<?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>26742</bug_id>
          
          <creation_ts>2009-06-25 17:10:57 -0700</creation_ts>
          <short_desc>Support fullscreen in MediaPlayer.</short_desc>
          <delta_ts>2009-10-05 18:07:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>26661</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre d&apos;Herbemont">pdherbemont</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>128332</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-06-25 17:10:57 -0700</bug_when>
    <thetext>Support fullscreen in MediaPlayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128340</commentid>
    <comment_count>1</comment_count>
      <attachid>31894</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-06-25 17:23:57 -0700</bug_when>
    <thetext>Created attachment 31894
patch v1.

Simple implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128532</commentid>
    <comment_count>2</comment_count>
      <attachid>31894</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-26 12:21:02 -0700</bug_when>
    <thetext>Comment on attachment 31894
patch v1.


&gt; diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp

&gt; +void HTMLMediaElement::enterFullscreen()
&gt; +{
&gt; +    // Convert the element rect to screen coordinates
&gt; +    RefPtr&lt;ClientRectList&gt; rectList = getClientRects();

BTW, this will ignore CSS and SVG transforms in the content.

&gt; +    IntRect elementRect(0,0,0,0);

Rects have a ctor that set the values to 0.

&gt; +    if (rectList-&gt;length() &gt; 0) {
&gt; +        ClientRect* rect = rectList-&gt;item(0);
&gt; +        IntRect intrect = IntRect(rect-&gt;left(), rect-&gt;top(), rect-&gt;width(), rect-&gt;height());
&gt; +        elementRect = document()-&gt;view()-&gt;contentsToScreen(intrect);
&gt; +    }
&gt; +    
&gt; +    // If the user has more than one monitor, use the one with the bottom left corner. 
&gt; +    // FIXME: should we have a way for the caller to specify which screen to use?
&gt; +    IntRect fullscreenRect = document()-&gt;view()-&gt;contentsToScreen(IntRect(0,0,0,0));

I don&apos;t like this (see below).

&gt; +    void enterFullscreen();
&gt; +    void exitFullscreen();

Do these need to return bool in case the user agent wants to deny the request for fullscreen?

I really think we need to expose something through WebKit to allow the hosting application to make decisions about whether fullscreen video is allowed. Maybe it&apos;s just a preference at first?

&gt; diff --git a/WebCore/platform/graphics/MediaPlayer.cpp b/WebCore/platform/graphics/MediaPlayer.cpp

&gt; +    virtual void enterFullscreen(IntRect, IntRect) {}

Params should be const IntRect&amp;, and be named so I know what they represent.
I&apos;m not a big fan of feeding in the rects; what if the video is transformed, and we want to do a more cinematic animation to fullscreen?

&gt; +    virtual void exitFullscreen(IntRect) {}

What is the rect?

&gt; diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h

&gt; +
&gt; +    // Fullscreen wants to get out.

Clarify the comment. Who&apos;s asking: the media player, or the browser?

&gt; diff --git a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm

&gt; +void MediaPlayerPrivate::enterFullscreen(IntRect elementRect, IntRect fullscreenRect)
&gt; +{
&gt; +    if (m_fullscreenController)
&gt; +        return;

Should you return something to indicate that you&apos;re already in fullscreen?

The asynchronous nature of this bothers me a bit. Should the MediaPlayer API expose the asynchronicity?

We also need to make sure that destroying the media element while in fullscreen, and during both transitions works.

&gt; +    m_fullscreenController.adoptNS([[MediaPlayerQTKitFullscreenController alloc] init]);
&gt; +    [m_fullscreenController.get() setDelegate:m_objcObserver.get()];
&gt; +    [m_fullscreenController.get() setMovie:m_qtMovie.get()];
&gt; +    NSScreen * fullscreen = nil;
&gt; +    for(NSScreen* screen in [NSScreen screens]) {

Space after the for. Enumeration needs to work on Tiger.

Maybe we should determine which screen to show in here, rather than passing in the rect from outside?
We may be able to make better decisions, e.g. based on bit depth, size, primary, or even user-agent supplied preferences,
but should be able to choose the screen based on window position too.

&gt; +        if (NSContainsRect([screen frame], fullscreenRect)) {
&gt; +            fullscreen = screen;
&gt; +            break;
&gt; +        }
&gt; +    }
&gt; +    if (!fullscreen) {
&gt; +        // The rect given is in a opaque region

Clarify comment to say the window might be offscreen.

&gt; diff --git a/WebCore/platform/graphics/mac/MediaPlayerQTKitFullscreenController.h b/WebCore/platform/graphics/mac/MediaPlayerQTKitFullscreenController.h

&gt; +@interface MediaPlayerQTKitFullscreenController : NSWindowController
&gt; +{
&gt; +    QTMovie* _movie;

Add to comment to say whether this is retained.

&gt; +    id&lt;MediaPlayerQTKitFullscreenControllerDelegate&gt; _delegate;

Ditto.

&gt; diff --git a/WebCore/platform/graphics/mac/MediaPlayerQTKitFullscreenController.mm b/WebCore/platform/graphics/mac/MediaPlayerQTKitFullscreenController.mm

Maybe wrap the contents of the file with #if ENABLE(VIDEO)? Same for other new files.

&gt; +#import &quot;config.h&quot;
&gt; +
&gt; +#import &lt;QTKit/QTKit.h&gt;
&gt; +#import &lt;objc/objc-runtime.h&gt;
&gt; +#include &lt;HIToolbox/HIToolbox.h&gt;
&gt; +

&gt; +@interface MediaPlayerQTKitFullscreenController ()

No need for ()

&gt; +- (NSString*)windowNibName
&gt; +{
&gt; +    return @&quot;No nib&quot;;
&gt; +}

Need this?

&gt; +- (void)windowDidLoad
&gt; +{
&gt; +    NSWindow * window = [self window];
&gt; +    QTMovieView* view = [[getQTMovieViewClass() alloc] init];
&gt; +    [window setContentView:view];
&gt; +    [view setControllerVisible:NO];
&gt; +    [view setPreservesAspectRatio:YES];
&gt; +    [view setMovie:[self movie]];
&gt; +    [window setHasShadow:YES];
&gt; +    [view release];
&gt; +}
&gt; +
&gt; +- (MediaPlayerQTKitFullscreenWindow*)fullscreenWindow
&gt; +{
&gt; +    return (MediaPlayerQTKitFullscreenWindow*)[super window];

[self window]

&gt; +#pragma mark -
&gt; +#pragma mark Accessors

Should probably remove these.

&gt; +- (void)setMovie:(QTMovie*)movie
&gt; +{
&gt; +    id oldMovie = _movie;
&gt; +    _movie = [movie retain];
&gt; +    [oldMovie release];
&gt; +}

Should this set the movie on the movie view?

&gt; +- (void)requestExitFullscreen
&gt; +{
&gt; +    [[self delegate] fullscreenExitRequested];
&gt; +}

-request implies that refusal is possible, which is not the case here.

&gt; +- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
&gt; +{
&gt; +    (void)aStyle;

There&apos;s a macro like UNUSED_PARAM for this.

&gt; +    if ((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {
&gt; +        [self setOpaque:NO];
&gt; +        [self setBackgroundColor:[NSColor clearColor]];

Use opaque black?

&gt; +- (void)dealloc
&gt; +{
&gt; +    [_fullscreenAnimation release];

Assert that _fullscreenAnimation is nil.

&gt; +- (BOOL)resignFirstResponder
&gt; +{
&gt; +    return NO;
&gt; +}

This will probably need to change once we have HUD controls that should be keyboard navigable.

&gt; +- (void)mouseDown:(NSEvent *)theEvent
&gt; +{
&gt; +    (void)theEvent;

Use UNUSED_PARAM

&gt; +- (void)cancelOperation:(id)sender
&gt; +{
&gt; +    (void)sender;

Use UNUSED_PARAM

&gt; +- (void)animatedResizeDidEnd
&gt; +{
&gt; +    // Call our windowController.
&gt; +    if (_controllerActionOnAnimationEnd)
&gt; +        objc_msgSend([self windowController], _controllerActionOnAnimationEnd);

Should this be done via a delegate method, or just a method on the specific class of the window controller.

&gt; +    [self setFrame:startRect display:NO];
&gt; +    [self makeKeyAndOrderFront:self];
&gt; +
&gt; +    NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithCapacity:2];

Capacity 3?

&gt; +    _fullscreenAnimation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];

Assert that you dont&apos; have a _fullscreenAnimation already.

&gt; +    [_fullscreenAnimation setDuration: .4 * (([NSEvent modifierFlags] &amp; NSShiftKeyMask) ? 5. : 1.)];

WebCore style is to say 0.4, 5.0 etc.

&gt; +    [_fullscreenAnimation setFrameRate: 60];

No spaces after colons in Obj-C.

&gt; +- (void)animationDidEnd:(NSAnimation*)animation
&gt; +{
&gt; +    if (animation != _fullscreenAnimation) return;

Return on new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130323</commentid>
    <comment_count>3</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-07 18:21:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/45614</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132056</commentid>
    <comment_count>4</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-15 15:28:07 -0700</bug_when>
    <thetext>Shouldn&apos;t have been closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134426</commentid>
    <comment_count>5</comment_count>
      <attachid>33412</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-24 00:43:26 -0700</bug_when>
    <thetext>Created attachment 33412
Implement video Fullscreen on Mac OS X.

ChromeClient gets a new interface enter/exit/supportsFullscreenForNode().
---
 28 files changed, 1110 insertions(+), 13 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134657</commentid>
    <comment_count>6</comment_count>
      <attachid>33470</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-24 14:10:08 -0700</bug_when>
    <thetext>Created attachment 33470
Implement video Fullscreen on Mac OS X.

ChromeClient gets a new interface enter/exit/supportsFullscreenForNode().
---
 30 files changed, 1588 insertions(+), 13 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136228</commentid>
    <comment_count>7</comment_count>
      <attachid>33898</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-31 13:22:16 -0700</bug_when>
    <thetext>Created attachment 33898
Support Fullscreen for video element

https://bugs.webkit.org/show_bug.cgi?id=26742
---
 27 files changed, 1464 insertions(+), 13 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136259</commentid>
    <comment_count>8</comment_count>
      <attachid>33903</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-31 15:02:30 -0700</bug_when>
    <thetext>Created attachment 33903
Support Fullscreen for video element

https://bugs.webkit.org/show_bug.cgi?id=26742
---
 27 files changed, 1464 insertions(+), 13 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136304</commentid>
    <comment_count>9</comment_count>
      <attachid>33903</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 16:58:27 -0700</bug_when>
    <thetext>Comment on attachment 33903
Support Fullscreen for video element

 1622     IntRect elementRect(0,0,0,0);

There are style problems with that line, but the default constructor would do better anyway.

Except even better would be to early return like this:

if (!renderer())
    return IntRect();
return renderer()-&gt;view()-&gt;frameView()-&gt;contentsToScreen(renderer()-&gt;absoluteBoundingBoxRect());

Seems I could make this crash by getting &quot;enterFullScreen or exitFullscreen()&quot; called on a detached document.  page() goes through frame() if I remember correctly, and the document looses its frame when detached...

We could use a typedef for PlatformMovie instead of just void*:
 77     void* platformMovie() const;

const?
 146     IntRect screenRect();

Same problem with page():
virtual bool supportsFullscreen() const { return document() &amp;&amp; document()-&gt;page()-&gt;chrome()-&gt;client()-&gt;supportsFullscreenForNode(this); }

If I had a click handler and detach the document during my handler but dont&apos; prevent default, it should crash from the enterFullScreen() call:
525525 void MediaControlFullscreenButtonElement::defaultEventHandler(Event* event)

Extra spacE?
     BOOL _forceDisableAnimation;
 49 
 50 }

Should any of these be @private?  and what&apos;s // (retain) supposed to mean?  (I thought Obj-C 2.0 ... which maybe we don&apos;t use in WebCore... did auto-retaining or something for you? ;)

Seems we should pick one style or the other for .mm files:
55 - (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement;
 56 - (WebCore::HTMLMediaElement*)mediaElement;
 57 
 58 - (void)enterFullscreen:(NSScreen *)screen;

What makes this weak pointer safe?
 - (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement;
 104 {
 105     _mediaElement = mediaElement;

Why autorelease here?  Seems unnecessary to add it to the containing autorelease pool (or if it is, isn&apos;t that a bug?)  seems -release is what you want.

 - (void)clearFadeAnimation
 123 {
 124     [_fadeAnimation stopAnimation];
 125     [_fadeAnimation setWindow:nil];
 126     [_fadeAnimation autorelease];

Sad that this has to be 2-steps:
     [_backgroundFullscreenWindow release];
 141     _backgroundFullscreenWindow = nil;

Why do we need to self-retain?
 143     [self autorelease];  // From in exitFullscreen

Style:
 181     if (newRatio &gt; originalRatio)
 182     {
 183         double newWidth = originalRatio * endFrame.size.height;

I would have used static inline functions to split up large functions like:
 170 - (void)enterFullscreen:(NSScreen *)screen;

 249     [self retain]; // Balanced in windowDidExitFullscreen
the comment ideally should explain &quot;why&quot;  :)

Most parts of WebKit prefer an early-return style:
 282     if ((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {

I don&apos;t remember if AppKit has strong style to the contrary, but it seems checking !self would make more sense here.

Why not just use normal syntaxt?
 323         objc_msgSend([self windowController], _controllerActionOnAnimationEnd);

Style again:
44     if ((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag]))
 45     {

Style:
7     if (![[self window] isVisible]) {
 118         [[self window] setAlphaValue:0];
 119     }

I&apos;m surprised we don&apos;t do more of the  184 - (void)windowDidLoad
 wiring in a nib?  Or maybe i&apos;m over-remembering the power of nibs here.

Wouldn&apos;t Marc Piccerelli yell at you for this? ;)
0 - (void)updateVolume
 281 {
 282     [self willChangeValueForKey:@&quot;volume&quot;];
 283     [self didChangeValueForKey:@&quot;volume&quot;];
 284 }

Aren&apos;t there NSDateFormatters for this sort of thing?
 359 static NSString *timeToString(double time)

Ideally this patch would be smaller for easier review.   I can&apos;t promise that I&apos;ve actually read it as closely as I really should have, but the above is enough for at least one more round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136312</commentid>
    <comment_count>10</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-31 17:25:42 -0700</bug_when>
    <thetext>(I won&apos;t be quoting all the part I agree with, or the obvious one. Thanks for pointing them out.)

(In reply to comment #9)

&gt; Except even better would be to early return like this:
&gt; 
&gt; if (!renderer())
&gt;     return IntRect();
&gt; return
&gt; renderer()-&gt;view()-&gt;frameView()-&gt;contentsToScreen(renderer()-&gt;absoluteBoundingBoxRect());
&gt; 
&gt; Seems I could make this crash by getting &quot;enterFullScreen or exitFullscreen()&quot;
&gt; called on a detached document.  page() goes through frame() if I remember
&gt; correctly, and the document looses its frame when detached...

Well, this shouldn&apos;t happen, because the enterFullscreen button has to result from user interaction, which shouldn&apos;t happen on detached document. I&apos;ll add an assert here.

After reading the rest of the review, you seem to highlight a special case where user interaction could happen with no document. I&apos;ll address that by adding proper check.

&gt; Extra spacE?
&gt;      BOOL _forceDisableAnimation;
&gt;  49 
&gt;  50 }
&gt; 
&gt; Should any of these be @private?  and what&apos;s // (retain) supposed to mean?  (I
&gt; thought Obj-C 2.0 ... which maybe we don&apos;t use in WebCore... did auto-retaining
&gt; or something for you? ;)

:) I don&apos;t think I am allowed to use Obj-C 2.0 here, so instead I am doing as if and marking ivar with // (retain). 

&gt; Seems we should pick one style or the other for .mm files:
&gt; 55 - (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement;
&gt;  56 - (WebCore::HTMLMediaElement*)mediaElement;
&gt;  57 
&gt;  58 - (void)enterFullscreen:(NSScreen *)screen;

What do you mean? NSScreen * is an objective C object pointer. The * has to be preceded by a space. WebCore::HTMLMediaElement is a C++ object. I think I am not mistaken here.

&gt; What makes this weak pointer safe?
&gt;  - (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement;
&gt;  104 {
&gt;  105     _mediaElement = mediaElement;
&gt; 
&gt; Why autorelease here?  Seems unnecessary to add it to the containing
&gt; autorelease pool (or if it is, isn&apos;t that a bug?)  seems -release is what you
&gt; want.

Right, after re-thinking release would be fine. Yet some other part of the code has to autorelease, because we may be processing callbacks from that object that may not be protected. (As you have noted below)
 
&gt;  - (void)clearFadeAnimation
&gt;  123 {
&gt;  124     [_fadeAnimation stopAnimation];
&gt;  125     [_fadeAnimation setWindow:nil];
&gt;  126     [_fadeAnimation autorelease];
&gt; 
&gt; Sad that this has to be 2-steps:
&gt;      [_backgroundFullscreenWindow release];
&gt;  141     _backgroundFullscreenWindow = nil;
&gt; 
&gt; Why do we need to self-retain?
&gt;  143     [self autorelease];  // From in exitFullscreen

Because the animation that will be running doesn&apos;t retain the controller (ie - delegate). So if someone does 
[controller exitFullscreen];
[controller release];
This is bound to crash.

&gt; 
&gt; Most parts of WebKit prefer an early-return style:
&gt;  282     if ((self = [super initWithContentRect:contentRect
&gt; styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {
&gt; 
&gt; I don&apos;t remember if AppKit has strong style to the contrary, but it seems
&gt; checking !self would make more sense here.
 
I&apos;ll recheck what other part of WebKit are doing.

&gt; Style again:
&gt; 44     if ((self = [super initWithContentRect:contentRect
&gt; styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag]))
&gt;  45     {
&gt; 
&gt; Style:
&gt; 7     if (![[self window] isVisible]) {
&gt;  118         [[self window] setAlphaValue:0];
&gt;  119     }
&gt; 
&gt; I&apos;m surprised we don&apos;t do more of the  184 - (void)windowDidLoad
&gt;  wiring in a nib?  Or maybe i&apos;m over-remembering the power of nibs here.

I am not sure about that either. Nibs don&apos;t seem to be encouraged in WebKit.

Plus, the controls part of this nib are instantiated via WKSI. It can be done, but it felt ok and easier that way.

&gt; Wouldn&apos;t Marc Piccerelli yell at you for this? ;)
&gt; 0 - (void)updateVolume
&gt;  281 {
&gt;  282     [self willChangeValueForKey:@&quot;volume&quot;];
&gt;  283     [self didChangeValueForKey:@&quot;volume&quot;];
&gt;  284 }

This is a bit controversial I know. Yet, having an ivar just to save all ivar, and synchronize them manually feels like a pain, and too much glue.

I would suggest to fix the KVO stuff :) Seriously, are you really against such a spread trick?

&gt; Aren&apos;t there NSDateFormatters for this sort of thing?
&gt;  359 static NSString *timeToString(double time)

Thanks.

&gt; Ideally this patch would be smaller for easier review.   I can&apos;t promise that
&gt; I&apos;ve actually read it as closely as I really should have, but the above is
&gt; enough for at least one more round.

It was originally split in multiple, but was a pain to maintain, and you don&apos;t get to see all the stuff that will get used.

I was advised not to split it, and it actually make chance are each different file are pretty much doing independent stuff. So there is already a split here IMO.

Thanks for the review Eric!

Pierre.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136320</commentid>
    <comment_count>11</comment_count>
      <attachid>33914</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-07-31 17:52:20 -0700</bug_when>
    <thetext>Created attachment 33914
Support Fullscreen for video element

https://bugs.webkit.org/show_bug.cgi?id=26742
---
 28 files changed, 1484 insertions(+), 14 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138351</commentid>
    <comment_count>12</comment_count>
      <attachid>33914</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-08 09:35:53 -0700</bug_when>
    <thetext>Comment on attachment 33914
Support Fullscreen for video element

I&apos;m not sure:
const IntRect HTMLMediaElement::screenRect()
really makes any sense on the dom element.  I found the name &quot;screenRect&quot; confusing at first.  It&apos;s really absoluteRectForRenderer() or something, but that&apos;s a more general concept than just HTMLMediaElement, and thus makes it strange that it&apos;s on HTMLMediaElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138356</commentid>
    <comment_count>13</comment_count>
      <attachid>33914</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-08 10:17:38 -0700</bug_when>
    <thetext>Comment on attachment 33914
Support Fullscreen for video element

I don&apos;t see any reply about my earlier question about a typedef for PlatformMedia, but maybe I missed it?

Why the extra ()?
 55 @interface WebVideoFullscreenController () &lt;WebVideoFullscreenHUDWindowControllerDelegate&gt;
I didn&apos;t know empty category names were even allowed?

Which part is required:
 68     return @&quot;No nib&quot;; // Required to get -loadWindow to be called.
returning exactly &quot;No nib&quot; or returning a non-nil string?  The comment is unclear.

This must be a QT call getQTMovieViewClass(), cause &quot;get&quot; is not part of WebKit style.

If it&apos;s fullscreen, why would it want a shadow?
 88     [window setHasShadow:YES];
(for during the animation to full screen?)  Seems a comment might be needed here.

I thought there was some sort of fullscreen constant for levels like this:
 89     [window setLevel:NSPopUpMenuWindowLevel-1];
Someone who actually still works @ Apple would know better than I. :)

Why super, not self here?
93 - (WebVideoFullscreenWindow *)fullscreenWindow
 94 {
 95     return (WebVideoFullscreenWindow *)[super window];
 96 }

I&apos;m surprised this isn&apos;t a _movieView method on the class:
 107         QTMovieView *movieView = (QTMovieView *)[[self window] contentView];

If we had a typedef PlatformMedia you might not need this cast. ;)
 108         [movieView setMovie:(QTMovie *)_mediaElement-&gt;platformMedia()];

No setDelegate call?
 153     _hudController.delegate = self;

Maybe Obj-C magically turns that into a setDelegate call... I&apos;m kinda surprised that compiles even, since _hudController is clearly a pointer.

Seems:
constrainFrameToRatioOfFrame
really wants a &quot;centerPoint&quot; call on a rect, so that you don&apos;t have to compute it yourself.  Also sad that this is now at least the 3rd implementation of preserveAspectRatio logic (in some form) in WebCore.

I would have put this whole block in a separate function (but I tend to be very static-inline heavy).
 // Create a black window if needed
 198     if (!_backgroundFullscreenWindow) {
 
Style:
 else {
 206         [_backgroundFullscreenWindow setFrame:[screen frame] display:NO];
 207     }

Sad that this block:
242     if (!_forceDisableAnimation &amp;&amp; [[self fullscreenWindow] isKeyWindow])
 243         _fadeAnimation = _backgroundFullscreenWindow ? [[WebWindowFadeAnimation alloc] initWithDuration:0.2 window:_backgroundFullscreenWindow initialAlpha:initialAlpha finalAlpha:0] : nil;
 244     else {
 245         // This will disable animation
 246         endFrame = NSZeroRect;
 247     }
 248 
 249     [[self fullscreenWindow] animateFromRect:[[self window] frame] toRect:endFrame withSubAnimation:_fadeAnimation controllerAction:@selector(windowDidExitFullscreen)];

is basically repeated twice.  Once to animate in, and once to animate out.  Maybe it could be abstracted into a function instead?

Did you learn if early-return was &quot;sanctioned&quot; here?
if ((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {
It seems like it would be cleaner.

I&apos;m surprised CoreAnimation doesn&apos;t take care of more of the &quot;cancel existing animations an start animating in the other direction&quot; code for you?  I thought that was part of the CA magic?
 336 - (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect withSubAnimation:(NSAnimation *)subAnimation controllerAction:(SEL)controllerAction
Seems to be almost entirely about handling the &quot;what if we&apos;re already animating&quot; case.

I&apos;m slightly suprised there no QTHudWindow to reuse here instead of writing one for WebKit.  I guess the QT ones are either private or not quite the right fit?

I&apos;m surprised this needs to be conditional:
     if ([_timelineUpdateTimer isValid])
 110         [_timelineUpdateTimer invalidate];

I&apos;m surprised we&apos;d want to do anything if the window was already visible?
118     if (![window isVisible])
 119         [window setAlphaValue:0];

I would think a few simple accessors would take care of these nil clearings better than doing it manually at every callsite:
     [_area release];;
 144     _area = nil;

Different case here:
 174     return @&quot;No Nib&quot;; // So that -windowDidLoad gets called.
I guess the string contents don&apos;t matter then?

I would have probably created each of the UI elements in a separate constructor function, mostly because windowDidLoad is a huge function at this point.  But I&apos;m not sure that it maters.  I hate how ugly UI code often is.

Seems strange to ask the delegate twice:
336     if (![_delegate mediaElement])
 337         return;
 338     WebCore::ExceptionCode e;
 339     [_delegate mediaElement]-&gt;setVolume(volume / [self maxVolume], e);

NSDateFormatters no right here?
 361 static NSString *timeToString(double time)

Still seems strange to ask the delegate more than once for mediaElement.  Not that it would change it&apos;s mind between calls... but it always scares me when asking delgates things. :)

Extra space:
 5462     HTMLMediaElement* videoElement = static_cast&lt;HTMLMediaElement*&gt; (node);

underlying:
 5466             // The backend may just warn us that the underlaying plaftormMovie()

Style:
     }
 5483     else

Cute:
 30 static const CGFloat slomoFactor = 10.;
But probably not the most readable to all our non-native english speakers. ;)

I&apos;m surprised NSRect doesn&apos;t already do this?  CGRect and WebCore&apos;s FloatRect certainly do:
 37 static NSRect scaledRect(NSRect _initialFrame, NSRect _finalFrame, double factor)

Sigh.  Again FloatRect would do this cleaner:
     dist = squaredDistance(NSMakePoint(NSMaxX(_initialFrame), NSMinY(_initialFrame)), NSMakePoint(NSMaxX(_finalFrame), NSMinY(_finalFrame)));
Sad that NSRect doesn&apos;t have an easy topLeft() accessor...

What does additionalDuration actually do?  Seems like it&apos;s the duration needed to cover some specific distance... just not sure what that distance is named... (aka, I think the function needs a better name).

In general I think the change looks fine.  You probably want some current Apple UI Engineer to look at this instead of me though. :)

r-, mostly for unanswered questions from the previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138497</commentid>
    <comment_count>14</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-08-09 06:54:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 33914 [details])
&gt; I&apos;m not sure:
&gt; const IntRect HTMLMediaElement::screenRect()
&gt; really makes any sense on the dom element.  I found the name &quot;screenRect&quot;
&gt; confusing at first.  It&apos;s really absoluteRectForRenderer() or something, but
&gt; that&apos;s a more general concept than just HTMLMediaElement, and thus makes it
&gt; strange that it&apos;s on HTMLMediaElement.

I am not that happy with this method as well, but I failed to see something sound that would not be more intrusive.

I could probably, in the mean time, use absoluteVideoRectForRenderer() on the HTMLVideoElement.

Do you prefer me to add absoluteRectForRenderer() on a super class?

Pierre.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138512</commentid>
    <comment_count>15</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-08-09 07:50:53 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 33914 [details])
&gt; I don&apos;t see any reply about my earlier question about a typedef for
&gt; PlatformMedia, but maybe I missed it?

I did define a ifdef for it, yet, I missed to propagate it down into the MediaPlayerPrivate.

&gt; Why the extra ()?
&gt;  55 @interface WebVideoFullscreenController ()
&gt; &lt;WebVideoFullscreenHUDWindowControllerDelegate&gt;
&gt; I didn&apos;t know empty category names were even allowed?

This is a commonly(?) used way to define local method.

&gt; Which part is required:
&gt;  68     return @&quot;No nib&quot;; // Required to get -loadWindow to be called.
&gt; returning exactly &quot;No nib&quot; or returning a non-nil string?  The comment is
&gt; unclear.

Returning a non nil string. I&apos;ll make the comment clearer.

&gt; This must be a QT call getQTMovieViewClass(), cause &quot;get&quot; is not part of WebKit
&gt; style.

Actually, it&apos;s how the dynamic linking defines its accessors, there is little I can do here apart using a #define. I don&apos;t plan to do it, is this really wanted?

&gt; If it&apos;s fullscreen, why would it want a shadow?
&gt;  88     [window setHasShadow:YES];
&gt; (for during the animation to full screen?)  Seems a comment might be needed
&gt; here.

Shadow is nicer when animating the fullscreen window. I&apos;ll add a comment.

&gt; I thought there was some sort of fullscreen constant for levels like this:
&gt;  89     [window setLevel:NSPopUpMenuWindowLevel-1];
&gt; Someone who actually still works @ Apple would know better than I. :)

Eh, I don&apos;t either :) AFAIK, there is no better way to do this kind of stuff. We really want to be on top of the Menu and Dock here. I could burry that in a constant for now.

&gt; Why super, not self here?
&gt; 93 - (WebVideoFullscreenWindow *)fullscreenWindow
&gt;  94 {
&gt;  95     return (WebVideoFullscreenWindow *)[super window];
&gt;  96 }

Ok.

&gt; I&apos;m surprised this isn&apos;t a _movieView method on the class:
&gt;  107         QTMovieView *movieView = (QTMovieView *)[[self window]
&gt; contentView];

Right. This looks ugly.

&gt; 
&gt; If we had a typedef PlatformMedia you might not need this cast. ;)
&gt;  108         [movieView setMovie:(QTMovie *)_mediaElement-&gt;platformMedia()];

I&apos;ll remove the cast. Note, I now have typedef void * PlatformMedia; This is actually media player and platform specific. For instance if we have a ffmpeg backend on Mac OS this wouldn&apos;t be a QTMovie. I should probably have some kind of better abstraction here. But for now, this would seem over-engineered.

&gt; No setDelegate call?
&gt;  153     _hudController.delegate = self;
&gt; 
&gt; Maybe Obj-C magically turns that into a setDelegate call... I&apos;m kinda surprised
&gt; that compiles even, since _hudController is clearly a pointer.

This is Obj-C 2.0. I&apos;ll have to remove it.

&gt; Seems:
&gt; constrainFrameToRatioOfFrame
&gt; really wants a &quot;centerPoint&quot; call on a rect, so that you don&apos;t have to compute
&gt; it yourself.  Also sad that this is now at least the 3rd implementation of
&gt; preserveAspectRatio logic (in some form) in WebCore.

hum. ok thanks :)

&gt; I would have put this whole block in a separate function (but I tend to be very
&gt; static-inline heavy).
&gt;  // Create a black window if needed
&gt;  198     if (!_backgroundFullscreenWindow) {
&gt; 
&gt; Style:
&gt;  else {
&gt;  206         [_backgroundFullscreenWindow setFrame:[screen frame] display:NO];
&gt;  207     }

Thanks.

&gt; Sad that this block:
&gt; 242     if (!_forceDisableAnimation &amp;&amp; [[self fullscreenWindow] isKeyWindow])
&gt;  243         _fadeAnimation = _backgroundFullscreenWindow ?
&gt; [[WebWindowFadeAnimation alloc] initWithDuration:0.2
&gt; window:_backgroundFullscreenWindow initialAlpha:initialAlpha finalAlpha:0] :
&gt; nil;
&gt;  244     else {
&gt;  245         // This will disable animation
&gt;  246         endFrame = NSZeroRect;
&gt;  247     }
&gt;  248 
&gt;  249     [[self fullscreenWindow] animateFromRect:[[self window] frame]
&gt; toRect:endFrame withSubAnimation:_fadeAnimation
&gt; controllerAction:@selector(windowDidExitFullscreen)];
&gt; 
&gt; is basically repeated twice.  Once to animate in, and once to animate out. 
&gt; Maybe it could be abstracted into a function instead?

I&apos;ll try something.

&gt; Did you learn if early-return was &quot;sanctioned&quot; here?
&gt; if ((self = [super initWithContentRect:contentRect
&gt; styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {
&gt; It seems like it would be cleaner.

Oh, I forgot about that. Yes, I checked, and I have to early return.

&gt; I&apos;m surprised CoreAnimation doesn&apos;t take care of more of the &quot;cancel existing
&gt; animations an start animating in the other direction&quot; code for you?  I thought
&gt; that was part of the CA magic?
&gt;  336 - (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect
&gt; withSubAnimation:(NSAnimation *)subAnimation
&gt; controllerAction:(SEL)controllerAction
&gt; Seems to be almost entirely about handling the &quot;what if we&apos;re already
&gt; animating&quot; case.

We are not using Core Animation, but NSAnimation, and AFAIK we really have to do that work ourselves.

&gt; I&apos;m slightly suprised there no QTHudWindow to reuse here instead of writing one
&gt; for WebKit.  I guess the QT ones are either private or not quite the right fit?

Right, there is no QTHUDWindow to reuse.

&gt; I&apos;m surprised this needs to be conditional:
&gt;      if ([_timelineUpdateTimer isValid])
&gt;  110         [_timelineUpdateTimer invalidate];

Right it doesn&apos;t.

&gt; I&apos;m surprised we&apos;d want to do anything if the window was already visible?
&gt; 118     if (![window isVisible])
&gt;  119         [window setAlphaValue:0];

If the window is already visible we want to animate the fadeIn from its current value to 1.
If the window is not visible, we want to:
1- set its alpha value to 0
2- show it
3- animate its alpha value to 1

So yes, we don&apos;t want to do anything if the window was already visible.

&gt; I would think a few simple accessors would take care of these nil clearings
&gt; better than doing it manually at every callsite:
&gt;      [_area release];;
&gt;  144     _area = nil;

Ok.

&gt; Different case here:
&gt;  174     return @&quot;No Nib&quot;; // So that -windowDidLoad gets called.
&gt; I guess the string contents don&apos;t matter then?

Right.

&gt; 
&gt; I would have probably created each of the UI elements in a separate constructor
&gt; function, mostly because windowDidLoad is a huge function at this point.  But
&gt; I&apos;m not sure that it maters.  I hate how ugly UI code often is.

I could do it. But I am not sure if it wouldn&apos;t add more useless glue code. At least now, the ugly code is constrained to one function :)

&gt; Seems strange to ask the delegate twice:
&gt; 336     if (![_delegate mediaElement])
&gt;  337         return;
&gt;  338     WebCore::ExceptionCode e;
&gt;  339     [_delegate mediaElement]-&gt;setVolume(volume / [self maxVolume], e);
&gt; 
&gt; NSDateFormatters no right here?
&gt;  361 static NSString *timeToString(double time)

I am by no way an expert of NSFormatters, but I don&apos;t think we can do what we want without subclassing. (We want 00:00 but 1:00:00 as well. )

&gt; Still seems strange to ask the delegate more than once for mediaElement.  Not
&gt; that it would change it&apos;s mind between calls... but it always scares me when
&gt; asking delgates things. :)

hum :) I could store the ivar on the stack if you prefer.

&gt; Extra space:
&gt;  5462     HTMLMediaElement* videoElement = static_cast&lt;HTMLMediaElement*&gt;
&gt; (node);
&gt; 
&gt; underlying:
&gt;  5466             // The backend may just warn us that the underlaying
&gt; plaftormMovie()

Thanks.

&gt; Style:
&gt;      }
&gt;  5483     else

Thanks. I&apos;ll try the webkit-check-style :)

&gt; 
&gt; Cute:
&gt;  30 static const CGFloat slomoFactor = 10.;
&gt; But probably not the most readable to all our non-native english speakers. ;)

Ok.

&gt; I&apos;m surprised NSRect doesn&apos;t already do this?  CGRect and WebCore&apos;s FloatRect
&gt; certainly do:
&gt;  37 static NSRect scaledRect(NSRect _initialFrame, NSRect _finalFrame, double
&gt; factor)

I can&apos;t find it for CGRect. Do you have the name of the function. Using WebCore&apos;s FloatRect here is probably not really appropriate, right?

&gt; Sigh.  Again FloatRect would do this cleaner:
&gt;      dist = squaredDistance(NSMakePoint(NSMaxX(_initialFrame),
&gt; NSMinY(_initialFrame)), NSMakePoint(NSMaxX(_finalFrame), NSMinY(_finalFrame)));
&gt; Sad that NSRect doesn&apos;t have an easy topLeft() accessor...
&gt; 
&gt; What does additionalDuration actually do?  Seems like it&apos;s the duration needed
&gt; to cover some specific distance... just not sure what that distance is named...
&gt; (aka, I think the function needs a better name).

Right, I&apos;ll try to come up with a better name.

Thanks for the review!

Pierre.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140601</commentid>
    <comment_count>16</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-08-16 14:53:55 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Seems:
&gt; &gt; constrainFrameToRatioOfFrame
&gt; &gt; really wants a &quot;centerPoint&quot; call on a rect, so that you don&apos;t have to compute
&gt; &gt; it yourself.  Also sad that this is now at least the 3rd implementation of
&gt; &gt; preserveAspectRatio logic (in some form) in WebCore.
&gt; 
&gt; hum. ok thanks :)

Well, it seems that I can&apos;t reuse any of those. I also don&apos;t see what I would do with a centerPoint.

&gt; &gt; Seems strange to ask the delegate twice:
&gt; &gt; 336     if (![_delegate mediaElement])
&gt; &gt;  337         return;
&gt; &gt;  338     WebCore::ExceptionCode e;
&gt; &gt;  339     [_delegate mediaElement]-&gt;setVolume(volume / [self maxVolume], e);
&gt; &gt; Still seems strange to ask the delegate more than once for mediaElement.  Not
&gt; &gt; that it would change it&apos;s mind between calls... but it always scares me when
&gt; &gt; asking delgates things. :)
&gt; 
&gt; hum :) I could store the ivar on the stack if you prefer.

I didn&apos;t do it. I don&apos;t think it adds anything valuable, as this is common Cocoa practice. It won&apos;t also be magically thread safe or anything. I could add it though if style requires it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140603</commentid>
    <comment_count>17</comment_count>
      <attachid>34936</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-08-16 15:04:04 -0700</bug_when>
    <thetext>Created attachment 34936
Fullscreen support for the video element.

https://bugs.webkit.org/show_bug.cgi?id=26742
---
 28 files changed, 1572 insertions(+), 14 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142440</commentid>
    <comment_count>18</comment_count>
      <attachid>34936</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-24 16:24:38 -0700</bug_when>
    <thetext>Comment on attachment 34936
Fullscreen support for the video element.


&gt; diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp


&gt; +void HTMLMediaElement::enterFullscreen()
&gt; +{
&gt; +    ASSERT(!m_isFullscreen);
&gt; +    if (document() &amp;&amp; document()-&gt;page())
&gt; +        document()-&gt;page()-&gt;chrome()-&gt;client()-&gt;enterFullscreenForNode(this);
&gt; +    m_isFullscreen = true;
&gt; +}

I think this should not enter fullscreen if renderer() is null.

&gt; diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h

&gt;  namespace WebCore {
&gt;  
&gt; +// Structure that will hold every native
&gt; +// types supported by the current media player.
&gt; +// We have to do that has multiple media players
&gt; +// backend can live at runtime.
&gt; +typedef struct PlatformMedia {
&gt; +    QTMovie* qtMovie;
&gt; +} PlatformMedia;

I think this would be better as a union with a type flag.

&gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenController.mm b/WebKit/mac/WebView/WebVideoFullscreenController.mm

&gt; +- (NSString *)windowNibName
&gt; +{
&gt; +    return @&quot;No nib&quot;; // Dummy string to ensure that -loadWindow will be called.
&gt; +}

I don&apos;t like this hack. Why do you go through the window nib-loading path, instead of just using -initWithWindow: ?

&gt; +#pragma mark -
&gt; +#pragma mark Exposed Interface

We don&apos;t normally use #pragma marks.

&gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm b/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm

&gt; +#if ENABLE(VIDEO)
&gt; +
&gt; +#import &lt;wtf/RetainPtr.h&gt;
&gt; +#import &lt;QTKit/QTKit.h&gt;
&gt; +#import &quot;WebVideoFullscreenHUDWindowController.h&quot;
&gt; +#import &quot;WebKitSystemInterface.h&quot;

Corresponding header should come first, and the rest should be alphabetical.

&gt; +- (BOOL)canBecomeKeyWindow
&gt; +{
&gt; +    return NO;
&gt; +}

So the HUD controls can&apos;t be operated via the keyboard? That sounds bad. What&apos;s accessibility like for those controls?

&gt; +@interface WebVideoFullscreenHUDWindowController () &lt;NSWindowDelegate&gt;
&gt; +@end

This looks weird. I think you should name the category &apos;Private&apos; or something.

&gt; +- (void)scheduleTimeUpdate
&gt; +{
&gt; +    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(unscheduleTimeUpdate) object:self];
&gt; +
&gt; +    // First, update right away, then schedule future update
&gt; +    [self updateTime];
&gt; +
&gt; +    _timelineUpdateTimer = [[NSTimer timerWithTimeInterval:0.250 target:self selector:@selector(updateTime) userInfo:nil repeats:YES] retain];
&gt; +    [[NSRunLoop currentRunLoop] addTimer:_timelineUpdateTimer forMode:NSRunLoopCommonModes];
&gt; +    [_timelineUpdateTimer fire];

Why are you firing the timer right away?

&gt; +    CGFloat center = (windowWidth - kButtonSize) / 2;
&gt; +    NSControl *playButton = createControlWithMediaUIControlType(WKMediaUIControlPlayPauseButton, NSMakeRect(center, top - kButtonSize, kButtonSize, kButtonSize));
&gt; +    [playButton bind:@&quot;value&quot; toObject:self withKeyPath:@&quot;playing&quot; options:nil];

Do these binding work on all OSes we have to support?

&gt; +- (void)updateVolume
&gt; +{
&gt; +    [self willChangeValueForKey:@&quot;volume&quot;];
&gt; +    [self didChangeValueForKey:@&quot;volume&quot;];
&gt; +}

This violates the will/did change contract for bindings: &apos;willChange&apos; should be called before the volume actually changes. If you can&apos;t do it correctly, maybe don&apos;t use bindings?

&gt; +
&gt; +- (void)updateTime
&gt; +{
&gt; +    [self updateVolume];
&gt; +
&gt; +    [self willChangeValueForKey:@&quot;currentQTTime&quot;];
&gt; +    [self didChangeValueForKey:@&quot;currentQTTime&quot;];
&gt; +    [self willChangeValueForKey:@&quot;duration&quot;];
&gt; +    [self didChangeValueForKey:@&quot;duration&quot;];
&gt; +    [self willChangeValueForKey:@&quot;remainingTimeText&quot;];
&gt; +    [self didChangeValueForKey:@&quot;remainingTimeText&quot;];
&gt; +    [self willChangeValueForKey:@&quot;elapsedTimeText&quot;];
&gt; +    [self didChangeValueForKey:@&quot;elapsedTimeText&quot;];
&gt; +}

Ditto.

&gt; diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm

&gt; +#if ENABLE(VIDEO)
&gt; +
&gt; +- (void)_enterFullscreenForNode:(WebCore::Node*)node
&gt; +{
&gt; +    ASSERT(node-&gt;hasTagName(WebCore::HTMLNames::videoTag));
&gt; +    HTMLMediaElement* videoElement = static_cast&lt;HTMLMediaElement*&gt;(node);
&gt; +
&gt; +    if (_private-&gt;fullscreenController) {
&gt; +        if ([_private-&gt;fullscreenController mediaElement] == videoElement) {
&gt; +            // The backend may just warn us that the underlaying plaftormMovie()
&gt; +            // has changed. Just force an update.
&gt; +            [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +            return; // No more to do.
&gt; +        }
&gt; +
&gt; +        // First exit Fullscreen for the old mediaElement.
&gt; +        [_private-&gt;fullscreenController mediaElement]-&gt;exitFullscreen();
&gt; +        // This previous call has to trigger _exitFullscreen,
&gt; +        // which has to clear _private-&gt;fullscreenController.
&gt; +        ASSERT(!_private-&gt;fullscreenController);
&gt; +    }
&gt; +    if (!_private-&gt;fullscreenController) {
&gt; +        _private-&gt;fullscreenController = [[WebVideoFullscreenController alloc] init];
&gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +        [_private-&gt;fullscreenController enterFullscreen:[[self window] screen]];        
&gt; +    }
&gt; +    else
&gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +}

What if this webview isn&apos;t in the window?

&gt; diff --git a/WebKit/mac/WebView/WebWindowAnimation.m b/WebKit/mac/WebView/WebWindowAnimation.m

&gt; +- (float)currentValue
&gt; +{
&gt; +    return 0.5 - 0.5 * cos(M_PI * (1 - [self currentProgress]));
&gt; +}

I thought we talked about using a cubic-bezier for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142482</commentid>
    <comment_count>19</comment_count>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-08-24 17:44:43 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 34936 [details])
&gt; 
&gt; &gt; diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp
&gt; 
&gt; 
&gt; &gt; +void HTMLMediaElement::enterFullscreen()
&gt; &gt; +{
&gt; &gt; +    ASSERT(!m_isFullscreen);
&gt; &gt; +    if (document() &amp;&amp; document()-&gt;page())
&gt; &gt; +        document()-&gt;page()-&gt;chrome()-&gt;client()-&gt;enterFullscreenForNode(this);
&gt; &gt; +    m_isFullscreen = true;
&gt; &gt; +}
&gt; 
&gt; I think this should not enter fullscreen if renderer() is null.

Ok

&gt; &gt; diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h
&gt; 
&gt; &gt;  namespace WebCore {
&gt; &gt;  
&gt; &gt; +// Structure that will hold every native
&gt; &gt; +// types supported by the current media player.
&gt; &gt; +// We have to do that has multiple media players
&gt; &gt; +// backend can live at runtime.
&gt; &gt; +typedef struct PlatformMedia {
&gt; &gt; +    QTMovie* qtMovie;
&gt; &gt; +} PlatformMedia;
&gt; 
&gt; I think this would be better as a union with a type flag.

I don&apos;t think so because we need to support multiple backend at runtime. Am I mistaken?

&gt; &gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenController.mm b/WebKit/mac/WebView/WebVideoFullscreenController.mm
&gt; 
&gt; &gt; +- (NSString *)windowNibName
&gt; &gt; +{
&gt; &gt; +    return @&quot;No nib&quot;; // Dummy string to ensure that -loadWindow will be called.
&gt; &gt; +}
&gt; 
&gt; I don&apos;t like this hack. Why do you go through the window nib-loading path,
&gt; instead of just using -initWithWindow: ?

Ok.

&gt; &gt; +#pragma mark -
&gt; &gt; +#pragma mark Exposed Interface
&gt; 
&gt; We don&apos;t normally use #pragma marks.

Hum.

&gt; 
&gt; &gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm b/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm
&gt; 
&gt; &gt; +#if ENABLE(VIDEO)
&gt; &gt; +
&gt; &gt; +#import &lt;wtf/RetainPtr.h&gt;
&gt; &gt; +#import &lt;QTKit/QTKit.h&gt;
&gt; &gt; +#import &quot;WebVideoFullscreenHUDWindowController.h&quot;
&gt; &gt; +#import &quot;WebKitSystemInterface.h&quot;
&gt; 
&gt; Corresponding header should come first, and the rest should be alphabetical.

Ok.

&gt; &gt; +- (BOOL)canBecomeKeyWindow
&gt; &gt; +{
&gt; &gt; +    return NO;
&gt; &gt; +}
&gt; 
&gt; So the HUD controls can&apos;t be operated via the keyboard? That sounds bad. What&apos;s
&gt; accessibility like for those controls?

This is something I should check as I have no idea.

&gt; 
&gt; &gt; +@interface WebVideoFullscreenHUDWindowController () &lt;NSWindowDelegate&gt;
&gt; &gt; +@end
&gt; 
&gt; This looks weird. I think you should name the category &apos;Private&apos; or something.

Ok.

&gt; &gt; +- (void)scheduleTimeUpdate
&gt; &gt; +{
&gt; &gt; +    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(unscheduleTimeUpdate) object:self];
&gt; &gt; +
&gt; &gt; +    // First, update right away, then schedule future update
&gt; &gt; +    [self updateTime];
&gt; &gt; +
&gt; &gt; +    _timelineUpdateTimer = [[NSTimer timerWithTimeInterval:0.250 target:self selector:@selector(updateTime) userInfo:nil repeats:YES] retain];
&gt; &gt; +    [[NSRunLoop currentRunLoop] addTimer:_timelineUpdateTimer forMode:NSRunLoopCommonModes];
&gt; &gt; +    [_timelineUpdateTimer fire];
&gt; 
&gt; Why are you firing the timer right away?

We want to update the time right away. I&apos;ll add a comment.

&gt; 
&gt; &gt; +    CGFloat center = (windowWidth - kButtonSize) / 2;
&gt; &gt; +    NSControl *playButton = createControlWithMediaUIControlType(WKMediaUIControlPlayPauseButton, NSMakeRect(center, top - kButtonSize, kButtonSize, kButtonSize));
&gt; &gt; +    [playButton bind:@&quot;value&quot; toObject:self withKeyPath:@&quot;playing&quot; options:nil];
&gt; 
&gt; Do these binding work on all OSes we have to support?
&gt; 
&gt; &gt; +- (void)updateVolume
&gt; &gt; +{
&gt; &gt; +    [self willChangeValueForKey:@&quot;volume&quot;];
&gt; &gt; +    [self didChangeValueForKey:@&quot;volume&quot;];
&gt; &gt; +}
&gt; 
&gt; This violates the will/did change contract for bindings: &apos;willChange&apos; should be
&gt; called before the volume actually changes. If you can&apos;t do it correctly, maybe
&gt; don&apos;t use bindings?

Ok. I&apos;ll get rid of bindinds.

&gt; &gt; +
&gt; &gt; +- (void)updateTime
&gt; &gt; +{
&gt; &gt; +    [self updateVolume];
&gt; &gt; +
&gt; &gt; +    [self willChangeValueForKey:@&quot;currentQTTime&quot;];
&gt; &gt; +    [self didChangeValueForKey:@&quot;currentQTTime&quot;];
&gt; &gt; +    [self willChangeValueForKey:@&quot;duration&quot;];
&gt; &gt; +    [self didChangeValueForKey:@&quot;duration&quot;];
&gt; &gt; +    [self willChangeValueForKey:@&quot;remainingTimeText&quot;];
&gt; &gt; +    [self didChangeValueForKey:@&quot;remainingTimeText&quot;];
&gt; &gt; +    [self willChangeValueForKey:@&quot;elapsedTimeText&quot;];
&gt; &gt; +    [self didChangeValueForKey:@&quot;elapsedTimeText&quot;];
&gt; &gt; +}
&gt; 
&gt; Ditto.

ok.

&gt; 
&gt; &gt; diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
&gt; 
&gt; &gt; +#if ENABLE(VIDEO)
&gt; &gt; +
&gt; &gt; +- (void)_enterFullscreenForNode:(WebCore::Node*)node
&gt; &gt; +{
&gt; &gt; +    ASSERT(node-&gt;hasTagName(WebCore::HTMLNames::videoTag));
&gt; &gt; +    HTMLMediaElement* videoElement = static_cast&lt;HTMLMediaElement*&gt;(node);
&gt; &gt; +
&gt; &gt; +    if (_private-&gt;fullscreenController) {
&gt; &gt; +        if ([_private-&gt;fullscreenController mediaElement] == videoElement) {
&gt; &gt; +            // The backend may just warn us that the underlaying plaftormMovie()
&gt; &gt; +            // has changed. Just force an update.
&gt; &gt; +            [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; &gt; +            return; // No more to do.
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        // First exit Fullscreen for the old mediaElement.
&gt; &gt; +        [_private-&gt;fullscreenController mediaElement]-&gt;exitFullscreen();
&gt; &gt; +        // This previous call has to trigger _exitFullscreen,
&gt; &gt; +        // which has to clear _private-&gt;fullscreenController.
&gt; &gt; +        ASSERT(!_private-&gt;fullscreenController);
&gt; &gt; +    }
&gt; &gt; +    if (!_private-&gt;fullscreenController) {
&gt; &gt; +        _private-&gt;fullscreenController = [[WebVideoFullscreenController alloc] init];
&gt; &gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; &gt; +        [_private-&gt;fullscreenController enterFullscreen:[[self window] screen]];        
&gt; &gt; +    }
&gt; &gt; +    else
&gt; &gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; &gt; +}
&gt; 
&gt; What if this webview isn&apos;t in the window?

There should be no animation. I&apos;ll recheck and add a comment.
&gt; 
&gt; &gt; diff --git a/WebKit/mac/WebView/WebWindowAnimation.m b/WebKit/mac/WebView/WebWindowAnimation.m
&gt; 
&gt; &gt; +- (float)currentValue
&gt; &gt; +{
&gt; &gt; +    return 0.5 - 0.5 * cos(M_PI * (1 - [self currentProgress]));
&gt; &gt; +}
&gt; 
&gt; I thought we talked about using a cubic-bezier for this.

Hum, I thought it would be more understandable with cos. I&apos;ll switch to a third order cubic bezier since it&apos;s lighter.

Thanks Simon! :)

Pierre.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142729</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-25 16:30:14 -0700</bug_when>
    <thetext>Pierre is a committer, so I won&apos;t set cq+.  He could do it himself, except that the email address I see in
http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/modules/committers.py
is not the one matching this bug.  So I expect that if he set commit-queue+ it would be rejected by the commit queue as an unknown committer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142730</commentid>
    <comment_count>21</comment_count>
      <attachid>34936</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-25 16:31:13 -0700</bug_when>
    <thetext>Comment on attachment 34936
Fullscreen support for the video element.

Looks like simon asked for mods on landing anyway, so this is cq- regardless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144523</commentid>
    <comment_count>22</comment_count>
      <attachid>38990</attachid>
    <who name="Pierre d&apos;Herbemont">pdherbemont</who>
    <bug_when>2009-09-03 08:05:17 -0700</bug_when>
    <thetext>Created attachment 38990
Fullscreen support for the video element.

https://bugs.webkit.org/show_bug.cgi?id=26742
---
 28 files changed, 1620 insertions(+), 14 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148247</commentid>
    <comment_count>23</comment_count>
      <attachid>38990</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-09-18 11:02:34 -0700</bug_when>
    <thetext>Comment on attachment 38990
Fullscreen support for the video element.

&gt; diff --git a/WebCore/html/HTMLMediaElement.h b/WebCore/html/HTMLMediaElement.h

&gt; +    virtual void willRemove();

Would prefer willRemoveFromDocument() if that&apos;s what it really means.

&gt; +    const IntRect screenRect();

Should be
       IntRect screenRect() const;

&gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenController.mm b/WebKit/mac/WebView/WebVideoFullscreenController.mm

&gt; +// We support queuing animation, that means that we&apos;ll correctly
&gt; +// interrupt the running animation, and queue the next one.

&quot;We support queuing animation_s_&quot;

&gt; diff --git a/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm b/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm

&gt; +@implementation WebVideoFullscreenHUDWindowController
&gt; +
&gt; +- (id)init
&gt; +{
&gt; +    NSWindow* window = [[WebVideoFullscreenHUDWindow alloc] initWithContentRect:NSMakeRect(0, 0, windowWidth, windowHeight) styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
&gt; +    self = [super initWithWindow:window];
&gt; +    [window setDelegate:self];
&gt; +    [window release];
&gt; +    if (!self)
&gt; +        return nil;
&gt; +    [self windowDidLoad];
&gt; +    return self;
&gt; +}
&gt; +- (void)dealloc

Missing blank line between the methods.

&gt; +- (void)scheduleTimeUpdate
&gt; +{
&gt; +    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(unscheduleTimeUpdate) object:self];
&gt; +
&gt; +    // First, update right away, then schedule future update
&gt; +    [self updateTime];
&gt; +
&gt; +    _timelineUpdateTimer = [[NSTimer timerWithTimeInterval:0.250 target:self selector:@selector(updateTime) userInfo:nil repeats:YES] retain];

You&apos;ve created a retain cycle here (the timer retains its target). That&apos;s OK, because you explicitly call -unscheduleTimeUpdate before destroying the window, but I&apos;d like to see a comment that mentions this. 

&gt; +- (BOOL)playing
&gt; +{
&gt; +    if (![_delegate mediaElement])
&gt; +        return false;

Should be &apos;return NO&apos;.

&gt; diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm

&gt; @@ -2485,7 +2486,7 @@ static bool needsWebViewInitThreadWorkaround()
&gt;      
&gt;      if ([self _needsFrameLoadDelegateRetainQuirk])
&gt;          [_private-&gt;frameLoadDelegate release];
&gt; -        
&gt; +
&gt;      [_private release];
&gt;      // [super dealloc] can end up dispatching against _private (3466082)
&gt;      _private = nil;

Unwanted whitespace change.

&gt; +- (void)_enterFullscreenForNode:(WebCore::Node*)node
&gt; +{
&gt; +    ASSERT(node-&gt;hasTagName(WebCore::HTMLNames::videoTag));
&gt; +    HTMLMediaElement* videoElement = static_cast&lt;HTMLMediaElement*&gt;(node);
&gt; +
&gt; +    if (_private-&gt;fullscreenController) {
&gt; +        if ([_private-&gt;fullscreenController mediaElement] == videoElement) {
&gt; +            // The backend may just warn us that the underlaying plaftormMovie()
&gt; +            // has changed. Just force an update.
&gt; +            [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +            return; // No more to do.
&gt; +        }
&gt; +
&gt; +        // First exit Fullscreen for the old mediaElement.
&gt; +        [_private-&gt;fullscreenController mediaElement]-&gt;exitFullscreen();
&gt; +        // This previous call has to trigger _exitFullscreen,
&gt; +        // which has to clear _private-&gt;fullscreenController.
&gt; +        ASSERT(!_private-&gt;fullscreenController);
&gt; +    }
&gt; +    if (!_private-&gt;fullscreenController) {
&gt; +        _private-&gt;fullscreenController = [[WebVideoFullscreenController alloc] init];
&gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +        [_private-&gt;fullscreenController enterFullscreen:[[self window] screen]];        
&gt; +    }
&gt; +    else
&gt; +        [_private-&gt;fullscreenController setMediaElement:videoElement];
&gt; +}
&gt; +
&gt; +- (void)_exitFullscreen
&gt; +{
&gt; +    [_private-&gt;fullscreenController exitFullscreen];
&gt; +    [_private-&gt;fullscreenController release];
&gt; +    _private-&gt;fullscreenController = nil;
&gt; +}

What happens if the WebView is removed from the window while in fullscreen mode? Is there something that guarantees that _exitFullscreen will be called in this case?



&gt; diff --git a/WebKit/mac/WebView/WebWindowAnimation.h b/WebKit/mac/WebView/WebWindowAnimation.h


&gt; +@interface WebWindowFadeAnimation : NSAnimation {
&gt; +@private
&gt; +    CGFloat _initialAlpha, _finalAlpha;

We don&apos;t normally use comma-separated lists for multiple instance variable declarations. Please put one per line.

&gt; diff --git a/WebKit/mac/WebView/WebWindowAnimation.m b/WebKit/mac/WebView/WebWindowAnimation.m

&gt; +@implementation WebWindowScaleAnimation
&gt; +- (id)init
&gt; +{
&gt; +    self = [super init];
&gt; +    if (!self)
&gt; +        return nil;
&gt; +#ifdef HAVE_WINDOWSETSCALEDFRAME

Where does HAVE_WINDOWSETSCALEDFRAME come from? I don&apos;t see it defined anywhere.

&gt; +    [self setAnimationBlockingMode:NSAnimationNonblockingThreaded];
&gt; +#endif
&gt; +    [self setFrameRate:60.];

60.0 please.

r=me with these issues addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150271</commentid>
    <comment_count>24</comment_count>
      <attachid>38990</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-26 01:32:55 -0700</bug_when>
    <thetext>Comment on attachment 38990
Fullscreen support for the video element.

Simon has outstanding requested mods for this patch, so marking it cq- to make clear it can&apos;t be auto-committed as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152351</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-05 10:52:02 -0700</bug_when>
    <thetext>This patch has been waiting to land for a month.  Curious what&apos;s the status?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152358</commentid>
    <comment_count>26</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-05 10:57:42 -0700</bug_when>
    <thetext>I&apos;m working on landing it. It needs some tweaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152531</commentid>
    <comment_count>27</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-05 18:07:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/49136 and the followup build fixes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31894</attachid>
            <date>2009-06-25 17:23:57 -0700</date>
            <delta_ts>2009-07-24 00:43:23 -0700</delta_ts>
            <desc>patch v1.</desc>
            <filename>fullscreen_support_inqtkit.diff</filename>
            <type>text/plain</type>
            <size>29446</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTMyMmFkYS4uYmMwYmY4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAwOS0wNi0yNSAgUGllcnJlIGQnSGVy
YmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsZSBmdWxsc2NyZWVuIHN1cHBvcnQgaW4gTWVk
aWFQbGF5ZXJRVEtpdC4KKworICAgICAgICBUaGlzIGlzIG5vdCBhY3RpdmF0ZWQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyRnVsbHNjcmVlbkV4aXRSZXF1ZXN0ZWQpOiBjYWxsYmFjayBmcm9tIHdoaWNo
CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZSBjYW4gZXhpdCBmdWxsc2NyZWVuLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogZnVuZGFtZW50
YWwgZnVuY3Rpb24gdG8gZ28gZnMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpleGl0RnVsbHNjcmVlbik6ZnVuZGFtZW50YWwgZnVuY3Rpb24gdG8gZXhpdCBmcy4KKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOdWxsTWVkaWFQbGF5ZXJQcml2
YXRlOjplbnRlckZ1bGxzY3JlZW4pOiAgZ2x1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxNZWRp
YVBsYXllclByaXZhdGU6OmV4aXRGdWxsc2NyZWVuKTogZ2x1ZS4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjplbnRlckZ1bGxzY3JlZW4pOiBnbHVlLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXI6OmV4aXRGdWxsc2NyZWVuKTogZ2x1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpmdWxsc2NyZWVuRXhpdFJlcXVlc3RlZCk6IGdsdWUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyQ2xpZW50OjptZWRpYVBsYXllckZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkKTogZ2x1ZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6ZW50ZXJGdWxsc2NyZWVuKTog
Z2x1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6ZXhp
dEZ1bGxzY3JlZW4pOiBnbHVlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6ZW50ZXJGdWxsc2NyZWVuKTogYWN0dWFsIFFUS2l0IGltcGxlbWVudGF0aW9uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmV4aXRGdWxsc2NyZWVuKTogYWN0
dWFsIFFUS2l0IGltcGxlbWVudGF0aW9uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OmZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkKTogY2FsbGJhY2sgZnJvbSBmc0NvbnRyb2xs
ZXIKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZnVsbHNjcmVlbkRpZEV4
aXQpOiBjYWxsYmFjayBmcm9tIGZzQ29udHJvbGxlcgorICAgICAgICAoLVtXZWJDb3JlTW92aWVP
YnNlcnZlciBmdWxsc2NyZWVuRXhpdFJlcXVlc3RlZF0pOiBnbHVlLgorICAgICAgICAoLVtXZWJD
b3JlTW92aWVPYnNlcnZlciBmdWxsc2NyZWVuRGlkRXhpdF0pOiBnbHVlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUVRL
aXRGdWxsc2NyZWVuQ29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgIChTT0ZUX0xJTktfQ0xB
U1MpOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgZGVh
bGxvY10pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIg
d2luZG93TmliTmFtZV0pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNv
bnRyb2xsZXIgbG9hZFdpbmRvd10pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNj
cmVlbkNvbnRyb2xsZXIgd2luZG93RGlkTG9hZF0pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFU
S2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgZnVsbHNjcmVlbldpbmRvd10pOgorICAgICAgICAoLVtN
ZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgbW92aWVdKToKKyAgICAgICAgKC1b
TWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyIHNldE1vdmllOl0pOgorICAgICAg
ICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgZGVsZWdhdGVdKToKKyAg
ICAgICAgKC1bTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyIHNldERlbGVnYXRl
Ol0pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgd2lu
ZG93RGlkRXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bTWVkaWFQbGF5ZXJRVEtpdEZ1bGxz
Y3JlZW5Db250cm9sbGVyIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbl0pOgorICAgICAgICAoLVtN
ZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOmZyb21S
ZWN0Ol0pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIg
ZXhpdEZ1bGxzY3JlZW5Ub1JlY3Q6XSk6CisgICAgICAgICgtW01lZGlhUGxheWVyUVRLaXRGdWxs
c2NyZWVuQ29udHJvbGxlciByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bTWVk
aWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5XaW5kb3cgaW5pdFdpdGhDb250ZW50UmVjdDpzdHlsZU1h
c2s6YmFja2luZzpkZWZlcjpdKToKKyAgICAgICAgKC1bTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3Jl
ZW5XaW5kb3cgZGVhbGxvY10pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVl
bldpbmRvdyByZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtNZWRpYVBsYXllclFU
S2l0RnVsbHNjcmVlbldpbmRvdyBjYW5CZWNvbWVLZXlXaW5kb3ddKToKKyAgICAgICAgKC1bTWVk
aWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5XaW5kb3cgbW91c2VEb3duOl0pOgorICAgICAgICAoLVtN
ZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbldpbmRvdyBjYW5jZWxPcGVyYXRpb246XSk6CisgICAg
ICAgICgtW01lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuV2luZG93IGFuaW1hdGVkUmVzaXplRGlk
RW5kXSk6CisgICAgICAgICgtW01lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuV2luZG93IGFuaW1h
dGVGcm9tUmVjdDp0b1JlY3Q6ZmFkZTpjb250cm9sbGVyQWN0aW9uOl0pOgorICAgICAgICAoLVtN
ZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbldpbmRvdyBhbmltYXRpb25EaWRFbmQ6XSk6CisgICAg
ICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKTogQWN0dWFsbHkgYmluZCB0aGUgYnV0dG9uLgorCiAyMDA5LTA2LTIyICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91
Z2guCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFiZjc3
YTQuLmFjZDk0NTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC04OTIsNiArODkyLDggQEAKIAkJNURGRThGNTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVk
dWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLzsg
fTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0
MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5oICovOyB9OwogCQk2MzE4OUFFMzBFODNBMzMz
MDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRh
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJNjNDQ0U3QzcwRkYw
Nzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNDQ0U3QzUwRkYw
Nzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlci5oICov
OyB9OworCQk2M0NDRTdDODBGRjA3NzcwMDBCREVBMEYgLyogTWVkaWFQbGF5ZXJRVEtpdEZ1bGxz
Y3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjNDQ0U3QzYwRkYwNzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRLaXRGdWxs
c2NyZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKIAkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2MTdDIC8q
IE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICov
OyB9OwogCQk2M0Y1RDRGNzBFOEM0QjcxMDBDMEJEMDQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzdCN0FERTBFODc2
N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi87IH07CiAJCTY1MEY1M0RDMDlEMTVE
REEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTBGNTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5o
ICovOyB9OwpAQCAtNTg0NCw2ICs1ODQ2LDggQEAKIAkJNURDRjgzNkMwRDU5MTU5ODAwOTUzQkM2
IC8qIFBsdWdpbkluZm9TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bHVnaW5JbmZvU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjMxODlBRTIw
RTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOb2RlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjM3QjdBREUwRTg3NjdCODAwRTMyMTk0IC8qIEVsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjNDQ0U3QzUwRkYwNzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRL
aXRGdWxsc2NyZWVuQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjNDQ0U3QzYwRkYwNzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRL
aXRGdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IE1lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVS
ZW5kZXJTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlUmVuZGVy
U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwRjUzREIwOUQxNUREQTAw
QzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwRkJGMjcwRDlB
RjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTMxMjAsNiArMTMxMjQsOCBAQAogCQkJCUIyNzUzNTUxMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRTaXplTWFjLm1tICovLAogCQkJCUU0QjQxRTEwMENCRjkwRUYwMEFGMkVDRSAv
KiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oICovLAogCQkJCUU0QjQxRTExMENCRjkwRUYwMEFG
MkVDRSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbSAqLywKKwkJCQk2M0NDRTdDNTBGRjA3
NzcwMDBCREVBMEYgLyogTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyLmggKi8s
CisJCQkJNjNDQ0U3QzYwRkYwNzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVyUVRLaXRGdWxsc2Ny
ZWVuQ29udHJvbGxlci5tbSAqLywKIAkJCQkwNzM1RUU2OTBGNDBDNUU0MDA0QTI2MDQgLyogTWVk
aWFQbGF5ZXJQcm94eS5oICovLAogCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0RCAvKiBTaW1w
bGVGb250RGF0YU1hYy5tbSAqLywKIAkJCQkwRkNGMzMyQjBGMkI5QTI1MDA0QjY3OTUgLyogV2Vi
TGF5ZXIuaCAqLywKQEAgLTE2ODY2LDYgKzE2ODcyLDcgQEAKIAkJCQlCQzc3Q0RCQzBGRUZGMTQy
MDA3MDg4N0IgLyogSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNzdDRENGMEZFRkYzM0IwMDcwODg3QiAvKiBKU0hUTUxEYXRhR3JpZENlbGxFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzc3Q0VCMzBGRjAxN0YyMDA3MDg4N0IgLyogUmVuZGVyRGF0
YUdyaWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzQ0NFN0M3MEZGMDc3NzAwMEJERUEwRiAvKiBN
ZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTg4NzIsNiArMTg4NzksNyBAQAogCQkJCUJDNzdDREI4MEZFRkYxMjEwMDcwODg3QiAvKiBIVE1M
RGF0YUdyaWRDZWxsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3Q0RDRTBGRUZG
MzNCMDA3MDg4N0IgLyogSlNIVE1MRGF0YUdyaWRDZWxsRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzc3Q0VDODBGRjAxQ0JFMDA3MDg4N0IgLyogUmVuZGVyRGF0YUdyaWQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNjNDQ0U3QzgwRkYwNzc3MDAwQkRFQTBGIC8qIE1lZGlhUGxheWVy
UVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCmluZGV4IDViZmZjOTAuLjFhZDljMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTUzLDYgKzUzLDggQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVk
ZSAiQ2xpZW50UmVjdC5oIgorI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSA8
bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CkBAIC0xMjM5LDYgKzEyNDEsMTMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpt
ZWRpYVBsYXllclRpbWVDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICBlbmRQcm9jZXNzaW5nTWVk
aWFQbGF5ZXJDYWxsYmFjaygpOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxh
eWVyRnVsbHNjcmVlbkV4aXRSZXF1ZXN0ZWQoTWVkaWFQbGF5ZXIqKQoreworICAgIGJlZ2luUHJv
Y2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKKyAgICBleGl0RnVsbHNjcmVlbigpOworICAg
IGVuZFByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7Cit9CisKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6bWVkaWFQbGF5ZXJWb2x1bWVDaGFuZ2VkKE1lZGlhUGxheWVyKikKIHsKICAgICBi
ZWdpblByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CkBAIC0xNTgwLDYgKzE1ODksMzcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogfQogI2Vu
ZGlmCiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICAv
LyBDb252ZXJ0IHRoZSBlbGVtZW50IHJlY3QgdG8gc2NyZWVuIGNvb3JkaW5hdGVzCisgICAgUmVm
UHRyPENsaWVudFJlY3RMaXN0PiByZWN0TGlzdCA9IGdldENsaWVudFJlY3RzKCk7CisgICAgSW50
UmVjdCBlbGVtZW50UmVjdCgwLDAsMCwwKTsKKyAgICBpZiAocmVjdExpc3QtPmxlbmd0aCgpID4g
MCkgeworICAgICAgICBDbGllbnRSZWN0KiByZWN0ID0gcmVjdExpc3QtPml0ZW0oMCk7CisgICAg
ICAgIEludFJlY3QgaW50cmVjdCA9IEludFJlY3QocmVjdC0+bGVmdCgpLCByZWN0LT50b3AoKSwg
cmVjdC0+d2lkdGgoKSwgcmVjdC0+aGVpZ2h0KCkpOworICAgICAgICBlbGVtZW50UmVjdCA9IGRv
Y3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihpbnRyZWN0KTsKKyAgICB9CisgICAg
CisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIG1vcmUgdGhhbiBvbmUgbW9uaXRvciwgdXNlIHRoZSBv
bmUgd2l0aCB0aGUgYm90dG9tIGxlZnQgY29ybmVyLiAKKyAgICAvLyBGSVhNRTogc2hvdWxkIHdl
IGhhdmUgYSB3YXkgZm9yIHRoZSBjYWxsZXIgdG8gc3BlY2lmeSB3aGljaCBzY3JlZW4gdG8gdXNl
PworICAgIEludFJlY3QgZnVsbHNjcmVlblJlY3QgPSBkb2N1bWVudCgpLT52aWV3KCktPmNvbnRl
bnRzVG9TY3JlZW4oSW50UmVjdCgwLDAsMCwwKSk7CisKKyAgICBtX3BsYXllci0+ZW50ZXJGdWxs
c2NyZWVuKGVsZW1lbnRSZWN0LCBmdWxsc2NyZWVuUmVjdCk7Cit9CisKK3ZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIC8vIENvbnZlcnQgdGhlIGVsZW1lbnQg
cmVjdCB0byBzY3JlZW4gY29vcmRpbmF0ZXMKKyAgICBSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IHJl
Y3RMaXN0ID0gZ2V0Q2xpZW50UmVjdHMoKTsKKyAgICBJbnRSZWN0IGVsZW1lbnRSZWN0KDAsMCww
LDApOworICAgIGlmIChyZWN0TGlzdC0+bGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIENsaWVudFJl
Y3QqIHJlY3QgPSByZWN0TGlzdC0+aXRlbSgwKTsKKyAgICAgICAgSW50UmVjdCBpbnRyZWN0ID0g
SW50UmVjdChyZWN0LT5sZWZ0KCksIHJlY3QtPnRvcCgpLCByZWN0LT53aWR0aCgpLCByZWN0LT5o
ZWlnaHQoKSk7CisgICAgICAgIGVsZW1lbnRSZWN0ID0gZG9jdW1lbnQoKS0+dmlldygpLT5jb250
ZW50c1RvU2NyZWVuKGludHJlY3QpOworICAgIH0KKyAgICAKKyAgICBtX3BsYXllci0+ZXhpdEZ1
bGxzY3JlZW4oZWxlbWVudFJlY3QpOworfSAgICAKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAppbmRleCAxOGIyNjNhLi5mMjU3OWU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgK
QEAgLTE0Myw2ICsxNDMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpOwogI2VuZGlmCiAKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAg
IHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKwogcHJvdGVjdGVkOgogICAgIGZsb2F0IGdldFRpbWVP
ZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikg
Y29uc3Q7CiAgICAgdm9pZCBzZXRUaW1lT2Zmc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBmbG9hdCB2YWx1ZSk7CkBAIC0xNjQsNiArMTY3LDcgQEAgcHJpdmF0ZTogLy8gTWVkaWFQ
bGF5ZXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRy
YWNrcyhNZWRpYVBsYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlcGFpbnQo
TWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTaXplQ2hhbmdlZChN
ZWRpYVBsYXllciopOworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllckZ1bGxzY3JlZW5FeGl0
UmVxdWVzdGVkKE1lZGlhUGxheWVyKik7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQo
TWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIG1lZGlhUGxheWVyR3Jh
cGhpY3NMYXllcihNZWRpYVBsYXllciopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAppbmRleCA1ZWQ0ODM0Li45NzU5OTBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlKCkgeyB9ICAgIAogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGVudGVy
RnVsbHNjcmVlbihJbnRSZWN0LCBJbnRSZWN0KSB7fQorICAgIHZpcnR1YWwgdm9pZCBleGl0RnVs
bHNjcmVlbihJbnRSZWN0KSB7fQogCiAgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQogCkBAIC0zMDIsNiArMzA0LDE2IEBAIGJv
b2wgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiAgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+c3VwcG9ydHNGdWxsc2NyZWVuKCk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXI6OmVu
dGVyRnVsbHNjcmVlbihJbnRSZWN0IGVsZW1lbnRSZWN0LCBJbnRSZWN0IGZ1bGxzY3JlZW5SZWN0
KQoreworICAgIG1fcHJpdmF0ZS0+ZW50ZXJGdWxsc2NyZWVuKGVsZW1lbnRSZWN0LCBmdWxsc2Ny
ZWVuUmVjdCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OmV4aXRGdWxsc2NyZWVuKEludFJlY3Qg
ZWxlbWVudFJlY3QpCit7CisgICAgbV9wcml2YXRlLT5leGl0RnVsbHNjcmVlbihlbGVtZW50UmVj
dCk7Cit9ICAgIAorICAgIAogSW50U2l6ZSBNZWRpYVBsYXllcjo6bmF0dXJhbFNpemUoKQogewog
ICAgIHJldHVybiBtX3ByaXZhdGUtPm5hdHVyYWxTaXplKCk7CkBAIC00OTgsNiArNTEwLDEyIEBA
IHZvaWQgTWVkaWFQbGF5ZXI6OnRpbWVDaGFuZ2VkKCkKICAgICBpZiAobV9tZWRpYVBsYXllckNs
aWVudCkKICAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJUaW1lQ2hhbmdl
ZCh0aGlzKTsKIH0KKyAgICAKK3ZvaWQgTWVkaWFQbGF5ZXI6OmZ1bGxzY3JlZW5FeGl0UmVxdWVz
dGVkKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBs
YXllckNsaWVudC0+bWVkaWFQbGF5ZXJGdWxsc2NyZWVuRXhpdFJlcXVlc3RlZCh0aGlzKTsKK30K
IAogdm9pZCBNZWRpYVBsYXllcjo6c2l6ZUNoYW5nZWQoKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5oCmluZGV4IDFlZjM2MjIuLjZmZDJhNjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTY4LDcgKzY4LDEwIEBAIHB1YmxpYzoKIAog
ICAgIC8vIHRpbWUgaGFzIGp1bXBlZCwgZWcuIG5vdCBhcyBhIHJlc3VsdCBvZiBub3JtYWwgcGxh
eWJhY2sKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZChNZWRpYVBsYXll
ciopIHsgfQotICAgIAorCisgICAgLy8gRnVsbHNjcmVlbiB3YW50cyB0byBnZXQgb3V0LgorICAg
IHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllckZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkKE1lZGlhUGxh
eWVyKikgeyB9CisKICAgICAvLyB0aGUgbWVkaWEgZmlsZSBkdXJhdGlvbiBoYXMgY2hhbmdlZCwg
b3IgaXMgbm93IGtub3duCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyRHVyYXRpb25DaGFu
Z2VkKE1lZGlhUGxheWVyKikgeyB9CiAgICAgCkBAIC0xMDgsNiArMTExLDggQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAKICAgICBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0OworICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKEludFJlY3QsIEludFJlY3Qp
OworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCk7CiAgICAgSW50U2l6ZSBuYXR1cmFs
U2l6ZSgpOwogICAgIGJvb2wgaGFzVmlkZW8oKTsKICAgICAKQEAgLTE3Miw2ICsxNzcsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCByYXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2Vk
KCk7CiAKKyAgICB2b2lkIGZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkKCk7CisKICAgICB2b2lkIHJl
cGFpbnQoKTsKIAogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtZWRpYVBsYXllckNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFQbGF5ZXJDbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IDAyM2ExNTAuLjA0N2UxNDQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAt
NDcsNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAK
IAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKEludFJlY3QsIEludFJl
Y3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0KSB7IH0KIAog
ICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmgKaW5kZXggMjU3ZjI0OC4uZDRiNmIyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCkBAIC00MCw2ICs0MCw3
IEBACiBAY2xhc3MgUVRNb3ZpZUxheWVyOwogQGNsYXNzIFFUVmlkZW9SZW5kZXJlcldlYktpdE9u
bHk7CiBAY2xhc3MgV2ViQ29yZU1vdmllT2JzZXJ2ZXI7CitAY2xhc3MgTWVkaWFQbGF5ZXJRVEtp
dEZ1bGxzY3JlZW5Db250cm9sbGVyOwogI2Vsc2UKIGNsYXNzIFFUTW92aWU7CiBjbGFzcyBRVE1v
dmllVmlldzsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgUVRUaW1lOwogY2xhc3MgUVRNb3ZpZUxh
eWVyOwogY2xhc3MgUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seTsKIGNsYXNzIFdlYkNvcmVNb3Zp
ZU9ic2VydmVyOworY2xhc3MgTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyOwog
I2VuZGlmCiAKICNpZm5kZWYgRFJBV19GUkFNRV9SQVRFCkBAIC02Nyw2ICs2OSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAgICAgdm9pZCB0aW1lQ2hhbmdlZCgpOwogICAg
IHZvaWQgZGlkRW5kKCk7CisgICAgdm9pZCBmdWxsc2NyZWVuRXhpdFJlcXVlc3RlZCgpOworICAg
IHZvaWQgZnVsbHNjcmVlbkRpZEV4aXQoKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllclBy
aXZhdGUoTWVkaWFQbGF5ZXIqKTsKQEAgLTc3LDYgKzgxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KTsKIAorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKEludFJlY3QsIEludFJlY3QpOworICAgIHZv
aWQgZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCk7CiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNv
bnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKICAgICAKQEAgLTE1Niw2ICsxNjIsNyBA
QCBwcml2YXRlOgogICAgIFJldGFpblB0cjxRVE1vdmllVmlldz4gbV9xdE1vdmllVmlldzsKICAg
ICBSZXRhaW5QdHI8UVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seT4gbV9xdFZpZGVvUmVuZGVyZXI7
CiAgICAgUmV0YWluUHRyPFdlYkNvcmVNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKKyAg
ICBSZXRhaW5QdHI8TWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyPiBtX2Z1bGxz
Y3JlZW5Db250cm9sbGVyOwogICAgIGZsb2F0IG1fc2Vla1RvOwogICAgIFRpbWVyPE1lZGlhUGxh
eWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBt
X25ldHdvcmtTdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KaW5kZXggNDNkYjM4Yi4uNDY5Yjc3YyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0KQEAgLTQ0LDYgKzQ0LDggQEAKICNpbXBvcnQgPG9iamMvb2JqYy1ydW50
aW1lLmg+CiAjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KIAorI2ltcG9ydCAiTWVkaWFQbGF5
ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyLmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCkBAIC0xNTEsNyAr
MTUzLDcgQEAgZW51bSB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKLUBpbnRlcmZhY2UgV2ViQ29yZU1vdmllT2JzZXJ2ZXIgOiBOU09iamVjdAorQGlu
dGVyZmFjZSBXZWJDb3JlTW92aWVPYnNlcnZlciA6IE5TT2JqZWN0IDxNZWRpYVBsYXllclFUS2l0
RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4KIHsKICAgICBNZWRpYVBsYXllclByaXZhdGUq
IG1fY2FsbGJhY2s7CiAgICAgTlNWaWV3KiBtX3ZpZXc7CkBAIC02NzEsNiArNjczLDQ3IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zZWVr
VG8gPj0gMDsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVudGVyRnVsbHNjcmVlbihJ
bnRSZWN0IGVsZW1lbnRSZWN0LCBJbnRSZWN0IGZ1bGxzY3JlZW5SZWN0KQoreworICAgIGlmICht
X2Z1bGxzY3JlZW5Db250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Z1bGxzY3Jl
ZW5Db250cm9sbGVyLmFkb3B0TlMoW1tNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xs
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9mdWxsc2NyZWVuQ29udHJvbGxlci5nZXQoKSBzZXRE
ZWxlZ2F0ZTptX29iamNPYnNlcnZlci5nZXQoKV07CisgICAgW21fZnVsbHNjcmVlbkNvbnRyb2xs
ZXIuZ2V0KCkgc2V0TW92aWU6bV9xdE1vdmllLmdldCgpXTsKKyAgICBOU1NjcmVlbiAqIGZ1bGxz
Y3JlZW4gPSBuaWw7CisgICAgZm9yKE5TU2NyZWVuKiBzY3JlZW4gaW4gW05TU2NyZWVuIHNjcmVl
bnNdKSB7CisgICAgICAgIGlmIChOU0NvbnRhaW5zUmVjdChbc2NyZWVuIGZyYW1lXSwgZnVsbHNj
cmVlblJlY3QpKSB7CisgICAgICAgICAgICBmdWxsc2NyZWVuID0gc2NyZWVuOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmdWxsc2NyZWVuKSB7CisgICAg
ICAgIC8vIFRoZSByZWN0IGdpdmVuIGlzIGluIGEgb3BhcXVlIHJlZ2lvbgorICAgICAgICAvLyBX
aGljaCBtaWdodCBoYXBwZW4gaWYgb3VyIHdpbmRvdyBpcyBwYXJ0bHkgb2ZzY3JlZW4KKyAgICAg
ICAgLy8gcGljayB0aGUgbWFpbiBzY3JlZW4gaW5zdGVhZC4KKyAgICAgICAgZnVsbHNjcmVlbiA9
IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsKKyAgICB9CisgICAgW21fZnVsbHNjcmVlbkNvbnRyb2xs
ZXIuZ2V0KCkgZW50ZXJGdWxsc2NyZWVuOmZ1bGxzY3JlZW4gZnJvbVJlY3Q6ZWxlbWVudFJlY3Rd
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZXhpdEZ1bGxzY3JlZW4oSW50UmVjdCBv
cmlnaW5hbFJlY3QpCit7CisgICAgaWYgKCFtX2Z1bGxzY3JlZW5Db250cm9sbGVyKQorICAgICAg
ICByZXR1cm47CisgICAgW21fZnVsbHNjcmVlbkNvbnRyb2xsZXIuZ2V0KCkgZXhpdEZ1bGxzY3Jl
ZW5Ub1JlY3Q6b3JpZ2luYWxSZWN0XTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmZ1
bGxzY3JlZW5FeGl0UmVxdWVzdGVkKCkKK3sKKyAgICBtX3BsYXllci0+ZnVsbHNjcmVlbkV4aXRS
ZXF1ZXN0ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmZ1bGxzY3JlZW5EaWRF
eGl0KCkKK3sKKyAgICBtX2Z1bGxzY3JlZW5Db250cm9sbGVyID0gbmlsOworfQorCiBJbnRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAogewogICAgIGlmICghbWV0
YURhdGFBdmFpbGFibGUoKSkKQEAgLTkzNCw3ICs5NzcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6ZGlkRW5kKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKICAgICBtX3BsYXllci0+dGltZUNo
YW5nZWQoKTsKIH0KLQorICAgIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFNpemUoY29u
c3QgSW50U2l6ZSYpIAogeyAKICAgICAvLyBEb24ndCByZXNpemUgdGhlIHZpZXcgbm93IGJlY2F1
c2UgW3ZpZXcgc2V0RnJhbWVdIGFsc28gcmVzaXplcyB0aGUgbW92aWUgaXRzZWxmLCBhbmQgYmVj
YXVzZQpAQCAtMTM1NCw2ICsxMzk3LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjphY2Nl
bGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9kZWxheUNhbGxiYWNrcyA9IHNo
b3VsZERlbGF5OwogfQogCistICh2b2lkKWZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkCit7CisgICAg
bV9jYWxsYmFjay0+ZnVsbHNjcmVlbkV4aXRSZXF1ZXN0ZWQoKTsKK30KKy0gKHZvaWQpZnVsbHNj
cmVlbkRpZEV4aXQKK3sKKyAgICBtX2NhbGxiYWNrLT5mdWxsc2NyZWVuRGlkRXhpdCgpOworfQog
QGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlci5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmZTI3ZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUVRLaXRGdWxsc2Ny
ZWVuQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8vCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8
Q29jb2EvQ29jb2EuaD4KKworQGNsYXNzIFFUTW92aWU7CitAcHJvdG9jb2wgTWVkaWFQbGF5ZXJR
VEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgTWVkaWFQbGF5
ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyCit7CisgICAg
UVRNb3ZpZSogX21vdmllOworICAgIGlkPE1lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuQ29udHJv
bGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7CisgICAgQk9PTCBfaXNFbmRpbmdGdWxsc2NyZWVuOwor
fQorCistIChpZDxNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4p
ZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVnYXRlOihpZDxNZWRpYVBsYXllclFUS2l0RnVsbHNj
cmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CisKKy0gKHZvaWQpc2V0TW92aWU6KFFU
TW92aWUqKW1vdmllOworLSAoUVRNb3ZpZSopbW92aWU7CisKKy0gKHZvaWQpZW50ZXJGdWxsc2Ny
ZWVuOihOU1NjcmVlbiopc2NyZWVuIGZyb21SZWN0OihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpZXhp
dEZ1bGxzY3JlZW5Ub1JlY3Q6KE5TUmVjdClyZWN0OworCitAZW5kCisKK0Bwcm90b2NvbCBNZWRp
YVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CistICh2
b2lkKWZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkOworLSAodm9pZClmdWxsc2NyZWVuRGlkRXhpdDsK
K0BlbmQKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzBlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0KQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKworI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KKyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1l
Lmg+CisjaW5jbHVkZSA8SElUb29sYm94L0hJVG9vbGJveC5oPgorCisjaW1wb3J0ICJTb2Z0TGlu
a2luZy5oIgorCisjaW1wb3J0ICJNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXIu
aCIKKworU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKKworU09GVF9MSU5LX0NMQVNTKFFUS2l0
LCBRVE1vdmllVmlldykKKworQGludGVyZmFjZSBNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbldp
bmRvdyA6IE5TV2luZG93IDxOU0FuaW1hdGlvbkRlbGVnYXRlPgoreworICAgIFNFTCBfY29udHJv
bGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kOworICAgIE5TVmlld0FuaW1hdGlvbiogX2Z1bGxzY3Jl
ZW5BbmltYXRpb247Cit9CistICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVj
dCB0b1JlY3Q6KE5TUmVjdCllbmRSZWN0IGZhZGU6KEJPT0wpZmFkZSBjb250cm9sbGVyQWN0aW9u
OihTRUwpY29udHJvbGxlckFjdGlvbjsKK0BlbmQKKworCitAaW50ZXJmYWNlIE1lZGlhUGxheWVy
UVRLaXRGdWxsc2NyZWVuQ29udHJvbGxlciAoKQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gTWVk
aWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5Db250cm9sbGVyCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbX21vdmllIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJp
bmcqKXdpbmRvd05pYk5hbWUKK3sKKyAgICByZXR1cm4gQCJObyBuaWIiOworfQorCistICh2b2lk
KWxvYWRXaW5kb3cKK3sKKyAgICBOU1dpbmRvdyAqIHdpbmRvdyA9IFtbTWVkaWFQbGF5ZXJRVEtp
dEZ1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBz
dHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVm
ZmVyZWQgZGVmZXI6WUVTXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6d2luZG93XTsKKyAgICBbd2lu
ZG93IHJlbGVhc2VdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQKK3sKKyAgICBOU1dpbmRv
dyAqIHdpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgUVRNb3ZpZVZpZXcqIHZpZXcgPSBbW2dl
dFFUTW92aWVWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF07CisgICAgW3dpbmRvdyBzZXRDb250ZW50
Vmlldzp2aWV3XTsKKyAgICBbdmlldyBzZXRDb250cm9sbGVyVmlzaWJsZTpOT107CisgICAgW3Zp
ZXcgc2V0UHJlc2VydmVzQXNwZWN0UmF0aW86WUVTXTsKKyAgICBbdmlldyBzZXRNb3ZpZTpbc2Vs
ZiBtb3ZpZV1dOworICAgIFt3aW5kb3cgc2V0SGFzU2hhZG93OllFU107CisgICAgW3ZpZXcgcmVs
ZWFzZV07Cit9CisKKy0gKE1lZGlhUGxheWVyUVRLaXRGdWxsc2NyZWVuV2luZG93KilmdWxsc2Ny
ZWVuV2luZG93Cit7CisgICAgcmV0dXJuIChNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbldpbmRv
dyopW3N1cGVyIHdpbmRvd107Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQWNj
ZXNzb3JzCistIChRVE1vdmllKiltb3ZpZQoreworICAgIHJldHVybiBfbW92aWU7Cit9CisKKy0g
KHZvaWQpc2V0TW92aWU6KFFUTW92aWUqKW1vdmllCit7CisgICAgaWQgb2xkTW92aWUgPSBfbW92
aWU7CisgICAgX21vdmllID0gW21vdmllIHJldGFpbl07CisgICAgW29sZE1vdmllIHJlbGVhc2Vd
OworfQorCistIChpZDxNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0
ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorCistICh2b2lkKXNldERl
bGVnYXRlOihpZDxNZWRpYVBsYXllclFUS2l0RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4p
ZGVsZWdhdGU7Cit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKyNwcmFnbWEgbWFy
ayAtCisjcHJhZ21hIG1hcmsgQW5pbWF0aW9uIENhbGxiYWNrCisKKy0gKHZvaWQpd2luZG93RGlk
RXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbW3NlbGYgd2luZG93XSBjbG9zZV07CisgICAgU2V0U3lz
dGVtVUlNb2RlKGtVSU1vZGVOb3JtYWwsIDApOworICAgIFtbc2VsZiBkZWxlZ2F0ZV0gZnVsbHNj
cmVlbkRpZEV4aXRdOworfQorCistICh2b2lkKXdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbgorewor
ICAgIFNldFN5c3RlbVVJTW9kZShrVUlNb2RlQWxsU3VwcHJlc3NlZCwgMCk7Cit9CisKKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UKKworLSAodm9pZCllbnRl
ckZ1bGxzY3JlZW46KE5TU2NyZWVuKilzY3JlZW4gZnJvbVJlY3Q6KE5TUmVjdClyZWN0Cit7Cisg
ICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsK
KworICAgIFtbc2VsZiBmdWxsc2NyZWVuV2luZG93XSBhbmltYXRlRnJvbVJlY3Q6cmVjdCB0b1Jl
Y3Q6W3NjcmVlbiBmcmFtZV0gZmFkZTpZRVMgY29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2lu
ZG93RGlkRW50ZXJGdWxsc2NyZWVuKV07Cit9CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW5Ub1Jl
Y3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAg
IHJldHVybjsKKyAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOworICAgIFtbc2VsZiBmdWxs
c2NyZWVuV2luZG93XSBhbmltYXRlRnJvbVJlY3Q6c2VsZi53aW5kb3cuZnJhbWUgdG9SZWN0OnJl
Y3QgZmFkZTpZRVMgY29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxz
Y3JlZW4pXTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBXaW5kb3cgY2FsbGJh
Y2sKKworLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbW3NlbGYgZGVsZWdh
dGVdIGZ1bGxzY3JlZW5FeGl0UmVxdWVzdGVkXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gTWVkaWFQbGF5ZXJRVEtpdEZ1bGxzY3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250
ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUg
YmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxh
ZworeworICAgICh2b2lkKWFTdHlsZTsKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhD
b250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBi
YWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ10pKSB7CisgICAgICAgIFtzZWxmIHNldE9w
YXF1ZTpOT107CisgICAgICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVh
ckNvbG9yXV07CisgICAgICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAg
ICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgfQorICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2Z1bGxzY3JlZW5Bbmlt
YXRpb24gcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChCT09MKXJlc2ln
bkZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIE5POworfQorCistIChCT09MKWNhbkJlY29t
ZUtleVdpbmRvdworeworICAgIHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgRXZlbnQgaGFuZGxpbmcKKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0
aGVFdmVudAoreworICAgICh2b2lkKXRoZUV2ZW50OworfQorCistICh2b2lkKWNhbmNlbE9wZXJh
dGlvbjooaWQpc2VuZGVyCit7CisgICAgKHZvaWQpc2VuZGVyOworICAgIFtbc2VsZiB3aW5kb3dD
b250cm9sbGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOworfQorCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIEV2ZW50IGhhbmRsaW5nCisKKy0gKHZvaWQpYW5pbWF0ZWRSZXNpemVEaWRF
bmQKK3sKKyAgICAvLyBDYWxsIG91ciB3aW5kb3dDb250cm9sbGVyLgorICAgIGlmIChfY29udHJv
bGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kKQorICAgICAgICBvYmpjX21zZ1NlbmQoW3NlbGYgd2lu
ZG93Q29udHJvbGxlcl0sIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQpOworICAgIF9j
b250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQgPSBOVUxMOyAgICAKK30KKworLSAodm9pZClh
bmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCBm
YWRlOihCT09MKWZhZGUgY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb24KK3sK
KyAgICAodm9pZClmYWRlOworCisgICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9
IGNvbnRyb2xsZXJBY3Rpb247CisKKyAgICBpZiAoTlNJc0VtcHR5UmVjdChzdGFydFJlY3QpIHx8
IE5TSXNFbXB0eVJlY3QoZW5kUmVjdCkpIHsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6ZW5kUmVj
dCBkaXNwbGF5Ok5PXTsKKyAgICAgICAgW3NlbGYgbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07
CisgICAgICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFtzZWxmIHNldEZyYW1lOnN0YXJ0UmVjdCBkaXNwbGF5Ok5PXTsKKyAgICBb
c2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKKworICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKiBkaWN0ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
OjJdOyAgICAgICAgCisgICAgW2RpY3Qgc2V0T2JqZWN0OnNlbGYgZm9yS2V5Ok5TVmlld0FuaW1h
dGlvblRhcmdldEtleV07CisgICAgW2RpY3Qgc2V0T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJl
Y3Q6W3NlbGYgZnJhbWVdXSBmb3JLZXk6TlNWaWV3QW5pbWF0aW9uU3RhcnRGcmFtZUtleV07Cisg
ICAgW2RpY3Qgc2V0T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6ZW5kUmVjdF0gZm9yS2V5
Ok5TVmlld0FuaW1hdGlvbkVuZEZyYW1lS2V5XTsKKyAgICAKKyAgICBfZnVsbHNjcmVlbkFuaW1h
dGlvbiA9IFtbTlNWaWV3QW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aFZpZXdBbmltYXRpb25zOltO
U0FycmF5IGFycmF5V2l0aE9iamVjdDpkaWN0XV07CisgICAgCisgICAgW2RpY3QgcmVsZWFzZV07
CisgICAgCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldEFuaW1hdGlvbkJsb2NraW5nTW9k
ZTogTlNBbmltYXRpb25Ob25ibG9ja2luZ107CisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNl
dER1cmF0aW9uOiAuNCAqICgoW05TRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5TWFz
aykgPyA1LiA6IDEuKV07CisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldEZyYW1lUmF0ZTog
NjBdOworICAgIAorICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0ZTogc2VsZl07
CisKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RhcnRBbmltYXRpb25dOworfQorCistICh2
b2lkKWFuaW1hdGlvbkRpZEVuZDooTlNBbmltYXRpb24qKWFuaW1hdGlvbgoreworICAgIGlmIChh
bmltYXRpb24gIT0gX2Z1bGxzY3JlZW5BbmltYXRpb24pIHJldHVybjsKKyAgICAgICAgCisgICAg
W19mdWxsc2NyZWVuQW5pbWF0aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1h
dGlvbiA9IG5pbDsKKworICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworQGVu
ZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IGQ3MjBk
ZjUuLjk1MzNiMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAKQEAgLTMyOCw2ICszMjgsNyBAQCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbgogdm9pZCBNZWRp
YUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQpIHsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNjcmVlbigpOwogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33412</attachid>
            <date>2009-07-24 00:43:26 -0700</date>
            <delta_ts>2009-07-24 14:10:06 -0700</delta_ts>
            <desc>Implement video Fullscreen on Mac OS X.</desc>
            <filename>bug-26742-20090724004325.patch</filename>
            <type>text/plain</type>
            <size>61008</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzdhNWY2MC4uNTMwYzJiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wNy0yNCAgUGllcnJlIGQnSGVy
YmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB2aWRlbyBGdWxsc2NyZWVuIG9uIE1h
YyBPUyBYLgorICAgICAgICAKKyAgICAgICAgQ2hyb21lQ2xpZW50IGdldHMgYSBuZXcgaW50ZXJm
YWNlIGVudGVyL2V4aXQvc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSgpLgorCisgICAgICAgIFN1
cHBvcnQgZnVsbHNjcmVlbiBpbiBNZWRpYVBsYXllci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzQyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNv
cmUuVmlkZW8uZXhwOiBOZXcgbmVlZGVkIGV4cG9ydGVkIHN5bWJvbHMuCisgICAgICAgICogV2Vi
Q29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxSZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6c2NyZWVuUmVjdCk6IEhlbHBlciB0byBkaXJlY3RseSBnZXRzIHRoZQor
ICAgICAgICBzY3JlZW5SZWN0LiBUaGlzIGlzIHVzZWQgYnkgV2ViS2l0J3MgQ2hyb21lQ2xpZW50
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRmb3JtTW92aWUpOiBOZXcgYWNj
ZXNzb3IgdGhhdCBpcyB1c2VkCisgICAgICAgIGV2ZW50dWFsbHkgYnkgQ2hyb21lQ2xpZW50IHRv
IGRpcmVjdGx5IHJlbmRlciB0aGUgbW92aWUgZnVsbHNjcmVlbi4KKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6Cisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSk6IFNlZSBXZWJLaXQgY2hyb21lIGNsaWVu
dHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmVudGVy
RnVsbHNjcmVlbkZvck5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TnVsbE1lZGlhUGxheWVy
UHJpdmF0ZTo6cGxhdGZvcm1Nb3ZpZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
cGxhdGZvcm1Nb3ZpZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cGxhdGZvcm1Nb3Zp
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9y
bU1vdmllKToKKyAgICAgICAgKiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorCiAyMDA5LTA3LTIzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDNmNTNjYWEuLmNjNDE0MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTczMyw2ICs3MzMsMTAgQEAgaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9QTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9QTFUKICAgICAgV0VCQ09SRV9F
WFBPUlRfREVQRU5ERU5DSUVTIDo9ICQoV0VCQ09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKSBXZWJD
b3JlLlZpZGVvUHJveHkuZXhwCiBlbmRpZgogCitpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1ZJ
REVPLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9WSURFTykKKyAgICAgV0VCQ09SRV9FWFBP
UlRfREVQRU5ERU5DSUVTIDo9ICQoV0VCQ09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKSBXZWJDb3Jl
LlZpZGVvLmV4cAorZW5kaWYKKwogV2ViQ29yZS5leHAgOiBXZWJDb3JlLmJhc2UuZXhwICQoV0VC
Q09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKQogCWNhdCAkXiA+ICRACiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5WaWRlby5leHAgYi9XZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMDYwZjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwCkBAIC0wLDAgKzEsMTEgQEAKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVu
dDVwYXVzZUV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50NnZvbHVtZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50N2NhblBsYXlFdgorX19aTks3V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDhkdXJhdGlvbkV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ5
c2V0Vm9sdW1lRWZSaQorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTBzY3JlZW5SZWN0
RXYKK19fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxMWN1cnJlbnRUaW1lRXYKK19fWk5L
N1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxM3BsYXRmb3JtTW92aWVFdgorX19aTjdXZWJDb3Jl
MTZIVE1MTWVkaWFFbGVtZW50MTRzZXRDdXJyZW50VGltZUVmUmkKK19fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDE0ZXhpdEZ1bGxzY3JlZW5FdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDlhYjJiMzQuLjIz
N2E0Y2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAKQEAgLTcyOCw2ICs3MjgsNyBAQCBfX1pON1dlYkNvcmU5SFRNTE5h
bWVzN3NyY0F0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGZyYW1lVGFnRQogX19aTjdXZWJD
b3JlOUhUTUxOYW1lczhocmVmQXR0ckUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM4aW5wdXRUYWdF
CitfX1pON1dlYkNvcmU5SFRNTE5hbWVzOHZpZGVvVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1l
czlpZnJhbWVUYWdFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOXNjcmlwdFRhZ0UKIF9fWk43V2Vi
Q29yZTlQYWdlQ2FjaGUxMXNldENhcGFjaXR5RWkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYTQwODZhMS4uNTAzNGM4NyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU5MTQsNiArNTkxNCw3IEBACiAJCTYzMTg5
QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTm9kZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVy
U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVJlbmRlclN0eWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3
QSAvKiBXZWJDb3JlLlZpZGVvLmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0czsgcGF0
aCA9IFdlYkNvcmUuVmlkZW8uZXhwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBG
NTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTBGQkYyNzBEOUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0hLZXJuRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MEZCRjI4MEQ5QUYwNDcwMDhGQzI5MiAvKiBTVkdI
S2VybkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSEtlcm5F
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTc0LDYgKzk5NzUsNyBA
QAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJzLmV4
cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9yZWln
bk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNvcmUu
VGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3JlLlZp
ZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5WaWRl
b1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAppbmRleCA3Y2RhM2ZiLi5kYWZiNTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2lu
Y2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtMjM4LDYgKzI0MCwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1bGVMb2FkKCk7CiB9CiAKK3Zv
aWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7CisgICAgZXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICBIVE1MRWxlbWVudDo6d2lsbFJlbW92ZSgpOworfQogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPiBO
RVRXT1JLX0VNUFRZKQpAQCAtMTYwOCw2ICsxNjE1LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgIHVwZGF0ZVZvbHVtZSgpOwogfQogCitJbnRS
ZWN0IEhUTUxNZWRpYUVsZW1lbnQ6OnNjcmVlblJlY3QoKQoreworICAgIEludFJlY3QgZWxlbWVu
dFJlY3QoMCwwLDAsMCk7CisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIGVsZW1lbnRSZWN0
ID0gcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihyZW5k
ZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKKyAgICByZXR1cm4gZWxlbWVudFJl
Y3Q7Cit9CisgICAgCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQpAQCAt
MTY3OCw2ICsxNjkzLDIyIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCkKIH0KICNlbmRpZgogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNj
cmVlbigpCit7CisgICAgaWYgKGRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50KCktPnBhZ2Uo
KS0+Y2hyb21lKCktPmNsaWVudCgpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworfQor
Cit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAoZG9j
dW1lbnQoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKK30KKwordm9pZCogSFRNTE1lZGlhRWxlbWVu
dDo6cGxhdGZvcm1Nb3ZpZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyID8gbV9wbGF5
ZXItPnBsYXRmb3JtTW92aWUoKSA6IDA7Cit9ICAgICAgICAKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAppbmRleCAyN2I0OGVhLi43MGQ1MmVkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CkBA
IC03Miw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICAvLyBFdmVudHVhbGx5IG92ZXJsb2FkZWQgaW4g
SFRNTFZpZGVvRWxlbWVudAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTYXZlKCkg
Y29uc3Q7CisgICAgCisgICAgdm9pZCogcGxhdGZvcm1Nb3ZpZSgpIGNvbnN0OwogCiAgICAgdm9p
ZCBzY2hlZHVsZUxvYWQoKTsKICAgICAKQEAgLTE0MCw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBiZWdpblNjcnViYmluZygpOwogICAgIHZvaWQgZW5kU2NydWJiaW5nKCk7CiAKKyAgICBJ
bnRSZWN0IHNjcmVlblJlY3QoKTsKKwogICAgIGJvb2wgY2FuUGxheSgpIGNvbnN0OwogCiAgICAg
ZmxvYXQgcGVyY2VudExvYWRlZCgpIGNvbnN0OwpAQCAtMTUzLDYgKzE1OCw5IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuICFtX3BsYXllciB8fCBtX3BsYXllci0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKTsgfQor
ICAgIAorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVl
bigpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgZ2V0VGltZU9mZnNldEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgZmxvYXQgdmFsdWVPbkVycm9yKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVv
RWxlbWVudC5oCmluZGV4IGRjOTcxNGEuLjFiZGIyZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
aApAQCAtMjksNiArMjksOSBAQAogI2lmIEVOQUJMRShWSURFTykKIAogI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwogICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHBsYXllcigpICYmIHBsYXllcigpLT5oYXNW
aWRlbygpOyB9Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsg
cmV0dXJuIHBsYXllcigpICYmIHBsYXllcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4oKTsgfQorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBkb2N1bWVu
dCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5zdXBwb3J0c0Z1
bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOyB9CiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1h
Z2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaCBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzM2Vh
Y2Y5Li40Mjc4MmYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysr
IGIvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC0xODUsNiArMTg1LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVmlld1VwZGF0ZSgp
ID0gMDsKICNlbmRpZgogCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5G
b3JOb2RlKGNvbnN0IE5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQorICAgICAgICAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKSB7
IHJldHVybiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBkNGZhYjUyLi4yNGFlYmE1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHBsYXkoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSB7
IH0gICAgCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCB7
IHJldHVybiBJbnRTaXplKDAsIDApOyB9CiAKQEAgLTMwMSwxMSArMzAxLDYgQEAgYm9vbCBNZWRp
YVBsYXllcjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2Vla2luZygp
OwogfQogCi1ib29sIE1lZGlhUGxheWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwotfQotCiBib29sIE1l
ZGlhUGxheWVyOjpzdXBwb3J0c1NhdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUt
PnN1cHBvcnRzU2F2ZSgpOwpAQCAtMzI5LDYgKzMyNCwxMSBAQCBib29sIE1lZGlhUGxheWVyOjpp
bk1lZGlhRG9jdW1lbnQoKQogICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNNZWRp
YURvY3VtZW50KCk7CiB9CiAKK3ZvaWQqIE1lZGlhUGxheWVyOjpwbGF0Zm9ybU1vdmllKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybU1vdmllKCk7Cit9CisKIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXI6Om5ldHdvcmtTdGF0ZSgpCiB7CiAgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bmV0d29ya1N0YXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKaW5kZXggN2Y1ZjJhMC4uY2VhOWRjMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyB0aW1lIGhhcyBqdW1wZWQsIGVnLiBub3QgYXMgYSByZXN1bHQgb2Ygbm9ybWFsIHBsYXliYWNr
CiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7
IH0KLSAgICAKKwogICAgIC8vIHRoZSBtZWRpYSBmaWxlIGR1cmF0aW9uIGhhcyBjaGFuZ2VkLCBv
ciBpcyBub3cga25vd24KICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJEdXJhdGlvbkNoYW5n
ZWQoTWVkaWFQbGF5ZXIqKSB7IH0KICAgICAKQEAgLTEwNywxNSArMTA3LDE2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKICAg
ICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3Jl
ZW4oKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzU2F2ZSgpIGNvbnN0OworICAgIHZvaWQqIHBs
YXRmb3JtTW92aWUoKSBjb25zdDsKKwogICAgIEludFNpemUgbmF0dXJhbFNpemUoKTsKICAgICBi
b29sIGhhc1ZpZGVvKCk7CiAgICAgCiAgICAgdm9pZCBzZXRGcmFtZVZpZXcoRnJhbWVWaWV3KiBm
cmFtZVZpZXcpIHsgbV9mcmFtZVZpZXcgPSBmcmFtZVZpZXc7IH0KICAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldygpIHsgcmV0dXJuIG1fZnJhbWVWaWV3OyB9CiAgICAgYm9vbCBpbk1lZGlhRG9jdW1l
bnQoKTsKLSAgICAKKwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsKICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IDZkMTM1OWIu
LjhiNjFmZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclBy
aXZhdGUuaApAQCAtNDIsMTEgKzQyLDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBs
b2FkKGNvbnN0IFN0cmluZyYgdXJsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSA9IDA7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdCB7
IHJldHVybiAwOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcGF1c2UoKSA9IDA7ICAgIAogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
U2F2ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0
dXJhbFNpemUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAppbmRleCA1NGVlYTAwLi42MTEwYWYx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0LmgKQEAgLTc3LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsK
IAorICAgIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdDsKKwogICAgIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtp
dC5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Lm1tCmluZGV4IGMxZDdmY2IuLjcyMjg2ZDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCkBAIC01NjIs
NiArNTYyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9
CiAKK3ZvaWQqIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxhdGZvcm1Nb3ZpZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcXRNb3ZpZS5nZXQoKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBsYXkoKQogewogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBkMGFmOTgxLi43ZjRkNTJmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC01MjUsNiArNTI1
LDcgQEAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50KERvY3VtZW4KIHZvaWQgTWVkaWFDb250cm9sRnVsbHNjcmVl
bkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CisgICAgICAg
IG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oKTsKICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L0NoYW5nZUxvZyBiL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNzViN2FkMS4uM2I2NTczOCAxMDA2NDQKLS0tIGEvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMjQg
IFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdmlkZW8gRnVs
bHNjcmVlbiBvbiBNYWMgT1MgWC4KKyAgICAgICAgCisgICAgICAgIENocm9tZUNsaWVudCBnZXRz
IGEgbmV3IGludGVyZmFjZSBlbnRlci9leGl0L3N1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoKS4K
KworICAgICAgICBTdXBwb3J0IGZ1bGxzY3JlZW4gaW4gTWVkaWFQbGF5ZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjc0MgorCisgICAgICAgICog
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBuZXcgZmlsZXMuCisKIDIwMDkt
MDctMTYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2ZiMTRlNC4uYjQwZmM1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTAyLDYgKzEwMiwxMiBAQAogCQk1REU4M0E3QzBEMEY3Rjk0MDBD
QUQxMkEgLyogV2ViVmlld0VkaXRpbmdDb250ZXh0TWVudU9sZC5uaWIgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTgzQTc4MEQwRjdGOTQwMENBRDEy
QSAvKiBXZWJWaWV3RWRpdGluZ0NvbnRleHRNZW51T2xkLm5pYiAqLzsgfTsKIAkJNURFODNBN0Yw
RDBGN0ZBRDAwQ0FEMTJBIC8qIExvY2FsaXphYmxlLnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTgzQTdEMEQwRjdGQUQwMENBRDEyQSAv
KiBMb2NhbGl6YWJsZS5zdHJpbmdzICovOyB9OwogCQk1REU5MkZFRjBCRDcwMTdFMDA1OUE1RkQg
LyogV2ViQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNURFOTJGRUUwQkQ3MDE3RTAwNTlBNUZEIC8qIFdlYkFzc2VydGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2MzNGRkZBRTEw
MTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzNGRkZBQzEwMTBGMkU4MDBDNEU4ODEgLyog
V2ViV2luZG93QW5pbWF0aW9uLmggKi87IH07CisJCTYzM0ZGRkFGMTAxMEYyRTgwMEM0RTg4MSAv
KiBXZWJXaW5kb3dBbmltYXRpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubSAqLzsgfTsKKwkJNjM4MzU4REIxMDBDMEVDNDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYzODM1OEQ5MTAwQzBFQzQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLmggKi87IH07CisJCTYzODM1OERDMTAwQzBFQzQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjM4MzU4REExMDBDMEVDNDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIubW0gKi87IH07CisJCTYzODM1OUQyMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzgzNTlEMDEwMEMzOTY0MDAxRjlBQ0UgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovOyB9OworCQk2MzgzNTlEMzEw
MEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzODM1OUQx
MTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
Lm1tICovOyB9OwogCQk2NTQ4OERBMTA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5
RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggKi87IH07
CiAJCTY1NDg4REEyMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDg4REEwMDg0
RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubSAqLzsgfTsKIAkJNjU2RDMz
M0UwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2RDMzM0QwQUYy
MUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzQsNiArNDgwLDEy
IEBACiAJCTVERTgzQTc5MEQwRjdGOTQwMENBRDEyQSAvKiBFbmdsaXNoICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5uaWI7IG5hbWUgPSBF
bmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9XZWJWaWV3RWRpdGluZ0NvbnRleHRNZW51T2xk
Lm5pYjsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk1REU4M0E3RTBEMEY3RkFEMDBD
QUQxMkEgLyogRW5nbGlzaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAxMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnN0cmluZ3M7IG5hbWUgPSBF
bmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTVERTkyRkVFMEJENzAxN0UwMDU5QTVGRCAvKiBXZWJB
c3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlcnRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzM0ZGRkFDMTAxMEYyRTgwMEM0
RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViV2luZG93QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzODM1OEQ5MTAwQzBFQzQwMDFGOUFDRSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaDsgcGF0aCA9IC4uL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk2MzgzNThEQTEwMEMwRUM0MDAxRjlBQ0UgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHBhdGggPSAuLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTYzODM1OUQwMTAwQzM5NjQwMDFG
OUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM4MzU5RDExMDBDMzk2NDAw
MUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQ4OEQ5
RjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5TRGljdGlvbmFyeUV4
dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJNjU0ODhEQTAwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJh
cy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGgg
PSBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1NkQzMzNEMEFGMjFBRTkwMDIxMjE2OSAvKiBX
ZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTA5MCw2ICsxMTAyLDEyIEBACiAJCQkJQkMyRTQ2NEMwRkQ4QTk2
ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2
NzAxRSAvKiBXZWJWaWV3SW50ZXJuYWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJE
M0EgLyogV2ViVmlld1ByaXZhdGUuaCAqLywKKwkJCQk2MzgzNThEOTEwMEMwRUM0MDAxRjlBQ0Ug
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovLAorCQkJCTYzODM1OERBMTAwQzBF
QzQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovLAorCQkJCTYz
ODM1OUQwMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyLmggKi8sCisJCQkJNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8sCisJCQkJNjMzRkZGQUMxMDEwRjJFODAw
QzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovLAorCQkJCTYzM0ZGRkFEMTAxMEYyRTgw
MEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2Vi
VmlldzsKIAkJCXBhdGggPSBtYWMvV2ViVmlldzsKQEAgLTE0MzcsNiArMTQ1NSw5IEBACiAJCQkJ
OTM5ODEwNDYwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTA5QjA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlld0ludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTA3MTA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlld1ByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzODM1OERCMTAwQzBFQzQwMDFGOUFDRSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzgzNTlEMjEw
MEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNjMzRkZGQUUxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzY2LDYgKzE3ODcsOSBAQAogCQkJCTkz
OTgxMTA3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMyRTQ2NEUwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTM5ODEwRTgwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdGYWN0b3J5Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNjM4MzU4REMxMDBDMEVDNDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk2MzgzNTlEMzEwMEMzOTY0MDAx
RjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTYzM0ZGRkFGMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA4YTJlNzI3Li4xZmNiNzdkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDk1IEBACisyMDA5LTA3LTI0ICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IHZpZGVvIEZ1bGxzY3JlZW4gb24gTWFjIE9TIFguCisgICAgICAgIAorICAgICAg
ICBDaHJvbWVDbGllbnQgZ2V0cyBhIG5ldyBpbnRlcmZhY2UgZW50ZXIvZXhpdC9zdXBwb3J0c0Z1
bGxzY3JlZW5Gb3JOb2RlKCkuCisKKyAgICAgICAgU3VwcG9ydCBmdWxsc2NyZWVuIGluIE1lZGlh
UGxheWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjY3NDIKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSk6IERvIHdlIHN1cHBvcnQgZnVs
bHNjcmVlbiBmb3IgdGhpcyBub2RlPworICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjplbnRlckZ1
bGxzY3JlZW5Gb3JOb2RlKTogR28gZnVsbHNjcmVlbiBmb3IgdGhpcyBub2RlLiBUaGlzIGlzIGJh
bGFuY2VkIGJ5IGFuIGV4aXQuCisgICAgICAgIEZvciBub3cgd2UgaGFuZGxlIG5lc3RlZCBlbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlIHRoZSBtb3N0IHNpbXBsaWVzdCB3YXkuCisgICAgICAgIChXZWJD
aHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbTogQWRkZWQu
CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBpbml0V2l0aENvbnRlbnRS
ZWN0OnN0eWxlTWFzazpiYWNraW5nOmRlZmVyOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3cgY2FuQmVjb21lS2V5V2luZG93XSk6CisgICAgICAgICgtW1dlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvdyBjZW50ZXJdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgZGVsZWdhdGVdKToKKyAgICAgICAgKC1bV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpdKToKKyAgICAgICAg
KC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBzY2hlZHVsZVRpbWVVcGRh
dGVdKTogU3RhcnQgYSB0aW1lciB0byBkbyB0aGUgdGltZQorICAgICAgICB1cGRhdGVzIG9uIHRo
ZSBIVUQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIg
dW5zY2hlZHVsZVRpbWVVcGRhdGVdKTogU3RvcCB1cGRhdGluZyB0aGUgSFVELgorICAgICAgICAo
LVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHdpbmRvd05pYk5hbWVdKToK
KyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBmYWRlV2lu
ZG93SW5dKTogRmFkZSB0aGUgSFVEIGFuZCBzY2hlZHVsZSBpZiBuZWVkZWQKKyAgICAgICAgdGhl
IG5leHQgdGltZSBpdCB3aWxsIGJlIGhpZGRlbi4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlciBmYWRlV2luZG93T3V0XSk6IEhpZGUgdGhlIEhVRCAoYW5p
bWF0ZWQpLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
IGNsb3NlV2luZG93XSk6IENsb3NlIHRoZSBIVUQuCisgICAgICAgIChjcmVhdGVDb250cm9sV2l0
aE1lZGlhVUlDb250cm9sVHlwZSk6CisgICAgICAgIChjcmVhdGVUaW1lVGV4dEZpZWxkKToKKyAg
ICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBsb2FkV2luZG93
XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgd2lu
ZG93RGlkTG9hZF0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyIHVwZGF0ZVZvbHVtZV0pOiBVcGRhdGUgdGhpcyBpbmZvcm1hdGlvbgorICAgICAgICB2
aWEgS1ZPLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
IHVwZGF0ZVRpbWVdKTogZGl0dG8uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgY3VycmVudFFUVGltZV0pOiBUaGlzIGlzIGJpbmRlZCB0byB0aGUgVUkg
dmlhCisgICAgICAgIGNvY29hIGJpbmRpbmdzLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyIHNldEN1cnJlbnRRVFRpbWU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGR1cmF0aW9uXSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIG1h
eFZvbHVtZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlciB2b2x1bWVdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIgc2V0Vm9sdW1lOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBwbGF5aW5nXSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHNldFBsYXlpbmc6
XSk6IERpdHRvLgorICAgICAgICAodGltZVRvU3RyaW5nKToKKyAgICAgICAgKHN0cmluZ1RvVGlt
ZVRleHRBdHRyaWJ1dGVkKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlciByZW1haW5pbmdUaW1lVGV4dF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBlbGFwc2VkVGltZVRleHRdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgbW91c2VF
bnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyIG1vdXNlRXhpdGVkOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyIGV4aXRGdWxsc2NyZWVuOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHdpbmRvd0RpZEV4cG9zZTpdKToKKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciB3aW5kb3dEaWRDbG9zZTpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgZGVhbGxv
Y10pOgorICAgICAgICAoLVtXZWJWaWV3IF9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOldlYkNvcmU6
Ol0pOiBDYWxsZWQgZnJvbSB0aGUgY2hyb21lIGNsaWVudC4KKyAgICAgICAgKC1bV2ViVmlldyBf
ZXhpdEZ1bGxzY3JlZW5dKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5o
OgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisgICAgICAgICgtW1dlYlZpZXdQ
cml2YXRlIGRlYWxsb2NdKTogTWFrZSBzdXJlIHRoZSBmcyBvYmplY3QgaXMgZ29uZS4KKyAgICAg
ICAgKC1bV2ViVmlld1ByaXZhdGUgZmluYWxpemVdKTogRGl0dG8uCisgICAgICAgICogV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tOiBBZGRl
ZC4gVXNlZCBkdXJpbmcgZnVsbHNjcmVlbiB0cmFuc2l0aW9uLgorICAgICAgICAoV2ViV2luZG93
QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24pOgorICAgICAgICAoc2NhbGVkUmVjdCk6Cisg
ICAgICAgIChzcXVhcmVkRGlzdGFuY2UpOgorICAgICAgICAoLVtXZWJXaW5kb3dTY2FsZUFuaW1h
dGlvbiBpbml0XSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGluaXRXaXRo
SGludGVkRHVyYXRpb246d2luZG93OmluaXRhbEZyYW1lOmZpbmFsRnJhbWU6XSk6CisgICAgICAg
ICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViV2lu
ZG93U2NhbGVBbmltYXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYldpbmRvd1Nj
YWxlQW5pbWF0aW9uIHNldFdpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmlt
YXRpb24gY3VycmVudFZhbHVlXSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9u
IGN1cnJlbnRGcmFtZV0pOgorICAgICAgICAoLVtXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBzZXRD
dXJyZW50UHJvZ3Jlc3M6XSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIHNl
dFN1YkFuaW1hdGlvbjpdKToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gYWRk
aXRpb25hbER1cmF0aW9uXSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIHN0
YXJ0QW5pbWF0aW9uXSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dKToKKyAgICAgICAgKC1bV2ViV2luZG93RmFkZUFuaW1hdGlvbiBpbml0XSk6Cisg
ICAgICAgICgtW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gaW5pdFdpdGhEdXJhdGlvbjp3aW5kb3c6
aW5pdGlhbEFscGhhOmZpbmFsQWxwaGE6XSk6CisgICAgICAgICgtW1dlYldpbmRvd0ZhZGVBbmlt
YXRpb24gc2V0RHVyYXRpb246XSk6CisgICAgICAgICgtW1dlYldpbmRvd0ZhZGVBbmltYXRpb24g
Y3VycmVudEFscGhhXSk6CisgICAgICAgICgtW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gc2V0Q3Vy
cmVudFByb2dyZXNzOl0pOgorICAgICAgICAoLVtXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIHNldFdp
bmRvdzpdKToKKyAgICAgICAgKC1bV2ViV2luZG93RmFkZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9u
XSk6CisKIDIwMDktMDctMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBhMjU0ZTg4Li4zZjU3ODgzIDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTE0Niw2ICsxNDYsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVZpZXdVcGRhdGUoKTsKICNlbmRpZgog
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29y
ZTo6Tm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKTsKKwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNz
aW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpp
bmRleCA1ZGQyNjY4Li43YWQ4NzFmIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQpAQCAtNTUsNiArNTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZUxvYWRSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgpAQCAtNzA4LDYgKzcwOSwyOSBAQCB2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVWaWV3VXBkYXRlKCkKIAogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoVklERU8pCisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c0Z1bGxzY3Jl
ZW5Gb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05h
bWUoV2ViQ29yZTo6SFRNTE5hbWVzOjp2aWRlb1RhZyk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIFttX3dlYlZpZXcgX2VudGVyRnVsbHNjcmVlbkZvck5v
ZGU6bm9kZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW21fd2ViVmlldyBfZXhpdEZ1bGxzY3JlZW5dOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAgIAorfQorCisjZW5kaWYKKwogdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFt
ZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zOGVjMjlhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8Q29jb2EvQ29jb2Eu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorCitAcHJvdG9jb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNl
IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xs
ZXIgeworICAgIGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0
ZT4gX2RlbGVnYXRlOworICAgIE5TVGltZXIgKl90aW1lbGluZVVwZGF0ZVRpbWVyOworICAgIE5T
VHJhY2tpbmdBcmVhICpfYXJlYTsKKyAgICBCT09MIF9tb3VzZUlzSW5IVUQ7Cit9CistIChpZDxX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwor
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKy0gKHZvaWQpZmFkZVdpbmRvd0luOworLSAodm9pZClm
YWRlV2luZG93T3V0OworLSAodm9pZCljbG9zZVdpbmRvdzsKK0BlbmQKKworQHByb3RvY29sIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Cist
ICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQqKW1lZGlhRWxlbWVudDsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDVlN2QKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5tbQpAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBFTkFCTEUoVklERU8pCisK
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPFFUS2l0L1FUS2l0Lmg+CisjaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyIChQcml2YXRlKQorLSAodm9pZCl1cGRhdGVUaW1lOworQGVuZAor
CitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2luZG93CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cKKy0gKGlkKWlu
aXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVn
ZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVy
OihCT09MKWZsYWcKK3sKKyAgICAodm9pZClhU3R5bGU7CisgICAgaWYgKChzZWxmID0gW3N1cGVy
IGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dp
bmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddKSkKKyAgICB7CisgICAg
ICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xv
cjpbTlNDb2xvciBjbGVhckNvbG9yXV07CisgICAgICAgIFtzZWxmIHNldExldmVsOk5TU2NyZWVu
U2F2ZXJXaW5kb3dMZXZlbF07CisgICAgICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZl
bnRzOllFU107CisgICAgICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAg
fQorICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKWNhbkJlY29tZUtleVdpbmRvdworewor
ICAgIHJldHVybiBOTzsKK30KKworLSAodm9pZCljZW50ZXIKK3sKKyAgICBOU1JlY3QgaHVkRnJh
bWUgPSBbc2VsZiBmcmFtZV07CisgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW1tOU1NjcmVlbiBt
YWluU2NyZWVuXSBmcmFtZV07CisgICAgW3NlbGYgc2V0RnJhbWVUb3BMZWZ0UG9pbnQ6TlNNYWtl
UG9pbnQoKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIg
KyBzY3JlZW5GcmFtZS5vcmlnaW4ueCwgaHVkRnJhbWUuc2l6ZS5oZWlnaHQgKiAyICsgc2NyZWVu
RnJhbWUub3JpZ2luLngpXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgKCkgPE5TV2luZG93RGVsZWdhdGU+CitAZW5kCisgCisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyCisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOwor
ICAgIEFTU0VSVCghX2FyZWEpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQ8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQorewor
ICAgIHJldHVybiBfZGVsZWdhdGU7Cit9CistICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAg
X2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7
CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZd
OworCisgICAgLy8gRmlyc3QsIHVwZGF0ZSByaWdodCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVy
ZSB1cGRhdGUKKyAgICBbc2VsZiB1cGRhdGVUaW1lXTsKKworICAgIF90aW1lbGluZVVwZGF0ZVRp
bWVyID0gW1tOU1RpbWVyIHRpbWVyV2l0aFRpbWVJbnRlcnZhbDowLjI1MCB0YXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSBy
ZXRhaW5dOworICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxp
bmVVcGRhdGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKKyAgICBbX3RpbWVs
aW5lVXBkYXRlVGltZXIgZmlyZV07Cit9CisKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRhdGUK
K3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6bmls
XTsKKworICAgIGlmIChbX3RpbWVsaW5lVXBkYXRlVGltZXIgaXNWYWxpZF0pCisgICAgICAgIFtf
dGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGlt
ZXIgcmVsZWFzZV07CisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBuaWw7Cit9CisKKy0gKE5T
U3RyaW5nICopd2luZG93TmliTmFtZQoreworICAgIHJldHVybiBAIk5vIE5pYiI7Cit9CisKKy0g
KHZvaWQpZmFkZVdpbmRvd0luCit7CisgICAgaWYoIVtbc2VsZiB3aW5kb3ddIGlzVmlzaWJsZV0p
IHsKKyAgICAgICAgW1tzZWxmIHdpbmRvd10gc2V0QWxwaGFWYWx1ZTowXTsKKyAgICB9CisgICAg
W1tzZWxmIHdpbmRvd10gb3JkZXJGcm9udDpzZWxmXTsKKyAgICBbW1tzZWxmIHdpbmRvd10gYW5p
bWF0b3JdIHNldEFscGhhVmFsdWU6MV07CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsK
KworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07CisgICAg
aWYgKCFfbW91c2VJc0luSFVEKQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MS4wXTsKK30KKwor
LSAodm9pZClmYWRlV2luZG93T3V0Cit7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91
c2VNb3ZlczpZRVNdOworICAgIFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1
ZTowXTsKKyAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1l
VXBkYXRlKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3Nl
V2luZG93Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0
aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmls
XTsKKyAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07CisgICAgW3NlbGYud2luZG93LmNv
bnRlbnRWaWV3IHJlbW92ZVRyYWNraW5nQXJlYTpfYXJlYV07CisgICAgW19hcmVhIHJlbGVhc2Vd
OzsKKyAgICBfYXJlYSA9IG5pbDsKKyAgICBbW3NlbGYgd2luZG93XSBjbG9zZV07CisgICAgW3Nl
bGYgc2V0V2luZG93Om5pbF07Cit9CisKK3N0YXRpYyBOU0NvbnRyb2wgKmNyZWF0ZUNvbnRyb2xX
aXRoTWVkaWFVSUNvbnRyb2xUeXBlKGludCBjb250cm9sVHlwZSwgQ0dSZWN0IGZyYW1lKQorewor
ICAgIE5TQ29udHJvbCAqY29udHJvbCA9IFdLQ3JlYXRlTWVkaWFVSUNvbnRyb2woY29udHJvbFR5
cGUpOworICAgIFtjb250cm9sIHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpXTsKKyAg
ICByZXR1cm4gY29udHJvbDsKK30KKworc3RhdGljIE5TVGV4dEZpZWxkICpjcmVhdGVUaW1lVGV4
dEZpZWxkKENHUmVjdCBmcmFtZSkKK3sKKyAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0gW1tO
U1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAgW3RleHRGaWVsZCBz
ZXRUZXh0Q29sb3I6W05TQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFt0ZXh0RmllbGQgc2V0Qm9y
ZGVyZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0Rm9udDpbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6MTBdXTsKKyAgICBbdGV4dEZpZWxkIHNldERyYXdzQmFja2dyb3VuZDpOT107CisgICAgW3Rl
eHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKKyAgICBbdGV4dEZpZWxkIHNldEVkaXRhYmxlOk5PXTsK
KyAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFibGU6Tk9dOworICAgIHJldHVybiB0ZXh0RmllbGQ7
Cit9CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHdpbmRvd0hlaWdodCA9IDU5Oworc3RhdGljIGNv
bnN0IENHRmxvYXQgd2luZG93V2lkdGggPSA0Mzg7CisKKy0gKHZvaWQpbG9hZFdpbmRvdworewor
ICAgIE5TV2luZG93KiB3aW5kb3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBhbGxv
Y10gaW5pdFdpdGhDb250ZW50UmVjdDpOU01ha2VSZWN0KDAsIDAsIHdpbmRvd1dpZHRoLCB3aW5k
b3dIZWlnaHQpIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNr
aW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpzZWxm
XTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOwor
fQorCistICh2b2lkKXdpbmRvd0RpZExvYWQKK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBr
TWFyZ2luID0gOTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luVG9wID0gOTsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQnV0dG9uU2l6ZSA9IDI1OworICAgIHN0YXRpYyBjb25z
dCBDR0Zsb2F0IGtCdXR0b25NaW5pU2l6ZSA9IDE2OworCisgICAgTlNXaW5kb3cgKiB3aW5kb3cg
PSBbc2VsZiB3aW5kb3ddOworICAgIE5TQXNzZXJ0KHdpbmRvdywgQCJObyB3aW5kb3cgd2FzIGNy
ZWF0ZWQiKTsKKworICAgIFt3aW5kb3cgc2V0TW92YWJsZUJ5V2luZG93QmFja2dyb3VuZDpZRVNd
OworCisgICAgTlNWaWV3ICogYmFja2dyb3VuZCA9IFdLQ3JlYXRlTWVkaWFVSUJhY2tncm91bmRW
aWV3KCk7CisgICAgW3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJl
YSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3Vu
ZHNdIG9wdGlvbnM6TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0
aXZlQWx3YXlzIG93bmVyOnNlbGYgdXNlckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRU
cmFja2luZ0FyZWE6X2FyZWFdOworICAgIFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAg
IE5TVmlldyAqIGNvbnRlbnRWaWV3ID0gW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddOworCisg
ICAgQ0dGbG9hdCB0b3AgPSB3aW5kb3dIZWlnaHQgLSBrTWFyZ2luVG9wOworICAgIENHRmxvYXQg
Y2VudGVyID0gKHdpbmRvd1dpZHRoIC0ga0J1dHRvblNpemUpIC8gMjsKKyAgICBOU0NvbnRyb2wg
KnBsYXlCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlh
VUlDb250cm9sUGxheVBhdXNlQnV0dG9uLCBDR1JlY3RNYWtlKGNlbnRlciwgdG9wIC0ga0J1dHRv
blNpemUsIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSkpOworICAgIFtwbGF5QnV0dG9uIGJpbmQ6
QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAInBsYXlpbmciIG9wdGlvbnM6bmls
XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpwbGF5QnV0dG9uXTsKKyAgICBbcGxheUJ1
dHRvbiByZWxlYXNlXTsKKworICAgIENHRmxvYXQgbGVmdE9mQ2VudGVyID0gKHdpbmRvd1dpZHRo
IC0ga0J1dHRvblNpemUgKiAzIC0ga0J1dHRvblNpemUgLSBrQnV0dG9uU2l6ZSkgLyAyOworICAg
IE5TQ29udHJvbCAqcmV3aW5kQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJv
bFR5cGUoV0tNZWRpYVVJQ29udHJvbFJld2luZEJ1dHRvbiwgQ0dSZWN0TWFrZShsZWZ0T2ZDZW50
ZXIsIHRvcCAtIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSwga0J1dHRvblNpemUpKTsKKyAgICBb
cmV3aW5kQnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IocmV3aW5kOildOworICAgIFtyZXdpbmRC
dXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnJld2lu
ZEJ1dHRvbl07CisgICAgW3Jld2luZEJ1dHRvbiByZWxlYXNlXTsKKworICAgIENHRmxvYXQgcmln
aHRPZkNlbnRlciA9ICh3aW5kb3dXaWR0aCArIGtCdXR0b25TaXplICogMykgLyAyOworICAgIE5T
Q29udHJvbCAqZmFzdEZvcndhcmRCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250
cm9sVHlwZShXS01lZGlhVUlDb250cm9sRmFzdEZvcndhcmRCdXR0b24sIENHUmVjdE1ha2Uocmln
aHRPZkNlbnRlciwgdG9wIC0ga0J1dHRvblNpemUsIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSkp
OworICAgIFtyZXdpbmRCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihmYXN0Rm9yd2FyZDopXTsK
KyAgICBbcmV3aW5kQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBbY29udGVudFZpZXcgYWRk
U3VidmlldzpmYXN0Rm9yd2FyZEJ1dHRvbl07CisgICAgW2Zhc3RGb3J3YXJkQnV0dG9uIHJlbGVh
c2VdOworCisgICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5kb3dXaWR0aCAtIDIgKiBrTWFy
Z2luIC0ga0J1dHRvbk1pbmlTaXplOworICAgIE5TQ29udHJvbCAqZXhpdEZ1bGxzY3JlZW5CdXR0
b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9s
RXhpdEZ1bGxzY3JlZW5CdXR0b24sIENHUmVjdE1ha2UoY2xvc2VUb1JpZ2h0LCB0b3AgLSBrQnV0
dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCBrQnV0dG9uTWluaVNpemUsIGtCdXR0
b25NaW5pU2l6ZSkpOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVj
dG9yKGV4aXRGdWxsc2NyZWVuOildOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJn
ZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0
b25dOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNlXTsKKyAgICAKKyAgICBDR0Zs
b2F0IGxlZnQgPSBrTWFyZ2luOworICAgIE5TQ29udHJvbCAqdm9sdW1lRG93bkJ1dHRvbiA9IGNy
ZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVE
b3duQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnQsIHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtCdXR0
b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1pbmlTaXplKSk7CisgICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lRG93bkJ1dHRvbl07CisgICAgW3ZvbHVtZURv
d25CdXR0b24gcmVsZWFzZV07CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHZvbHVtZVNsaWRlcldp
ZHRoID0gNTA7CisKKyAgICBsZWZ0ID0ga01hcmdpbiArIGtCdXR0b25NaW5pU2l6ZTsKKyAgICBO
U0NvbnRyb2wgKnZvbHVtZVNsaWRlciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xU
eXBlKFdLTWVkaWFVSUNvbnRyb2xTbGlkZXIsIENHUmVjdE1ha2UobGVmdCwgdG9wIC0ga0J1dHRv
blNpemUgLyAyIC0ga0J1dHRvbk1pbmlTaXplIC8gMiwgdm9sdW1lU2xpZGVyV2lkdGgsIGtCdXR0
b25NaW5pU2l6ZSkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnZvbHVtZVNsaWRlcl07
CisgICAgW3ZvbHVtZVNsaWRlciBiaW5kOkAibWF4VmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtl
eVBhdGg6QCJtYXhWb2x1bWUiIG9wdGlvbnM6bmlsXTsKKyAgICBbdm9sdW1lU2xpZGVyIGJpbmQ6
QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAInZvbHVtZSIgb3B0aW9uczpuaWxd
OworICAgIFt2b2x1bWVTbGlkZXIgcmVsZWFzZV07CisKKyAgICBsZWZ0ID0ga01hcmdpbiArIGtC
dXR0b25NaW5pU2l6ZSArIHZvbHVtZVNsaWRlcldpZHRoICsga0J1dHRvbk1pbmlTaXplIC8gMjsK
KyAgICBOU0NvbnRyb2wgKmJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xU
eXBlKFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVVcEJ1dHRvbiwgQ0dSZWN0TWFrZShsZWZ0LCB0b3Ag
LSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCBrQnV0dG9uTWluaVNpemUs
IGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmJ1dHRvbl07
CisgICAgW2J1dHRvbiByZWxlYXNlXTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVU
ZXh0V2lkdGggPSA1MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNsaWRlckhlaWdodCA9IDEzOwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVyTWFyZ2luRml4dXAgPSA0OworCisgICAgTlNDb250
cm9sICpzbGlkZXIgPSBXS0NyZWF0ZU1lZGlhVUlDb250cm9sKFdLTWVkaWFVSUNvbnRyb2xUaW1l
bGluZSk7CisgICAgW3NsaWRlciBzZXRGcmFtZTpOU01ha2VSZWN0KGtNYXJnaW4gKyB0aW1lVGV4
dFdpZHRoICsga01hcmdpbi8yLCBrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXAsIHdpbmRvd1dp
ZHRoIC0gMiAqIChrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXApIC0ga01hcmdpbiAqIDIgLSAy
ICogdGltZVRleHRXaWR0aCwgc2xpZGVySGVpZ2h0KV07CisgICAgW3NsaWRlciBiaW5kOkAidmFs
dWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJjdXJyZW50UVRUaW1lIiBvcHRpb25zOm5p
bF07CisgICAgW3NsaWRlciBiaW5kOkAibWF4VmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBh
dGg6QCJkdXJhdGlvbiIgb3B0aW9uczpuaWxdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3
OnNsaWRlcl07CisgICAgW3NsaWRlciByZWxlYXNlXTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQg
dGltZVRleHRIZWlnaHQgPSAxMTsKKworICAgIE5TVGV4dEZpZWxkICplbGFwc2VkVGltZVRleHQg
PSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFrZVJlY3Qoa01hcmdpbiwga01hcmdpbiwgdGltZVRl
eHRXaWR0aCwgdGltZVRleHRIZWlnaHQpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzpl
bGFwc2VkVGltZVRleHRdOworICAgIFtlbGFwc2VkVGltZVRleHQgYmluZDpAInZhbHVlIiB0b09i
amVjdDpzZWxmIHdpdGhLZXlQYXRoOkAiZWxhcHNlZFRpbWVUZXh0IiBvcHRpb25zOm5pbF07Cisg
ICAgW2VsYXBzZWRUaW1lVGV4dCByZWxlYXNlXTsKKworICAgIE5TVGV4dEZpZWxkICpyZW1haW5p
bmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAt
IGtNYXJnaW4gLSB0aW1lVGV4dFdpZHRoLCBrTWFyZ2luLCB0aW1lVGV4dFdpZHRoLCB0aW1lVGV4
dEhlaWdodCkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnJlbWFpbmluZ1RpbWVUZXh0
XTsKKyAgICBbcmVtYWluaW5nVGltZVRleHQgYmluZDpAInZhbHVlIiB0b09iamVjdDpzZWxmIHdp
dGhLZXlQYXRoOkAicmVtYWluaW5nVGltZVRleHQiIG9wdGlvbnM6bmlsXTsKKyAgICBbcmVtYWlu
aW5nVGltZVRleHQgcmVsZWFzZV07CisgICAgCisgICAgW3dpbmRvdyBjZW50ZXJdOworfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiAgQmluZGluZ3MKKyAqCisgKi8K
KworLSAodm9pZCl1cGRhdGVWb2x1bWUKK3sKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JL
ZXk6QCJ2b2x1bWUiXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInZvbHVtZSJd
OworfQorCistICh2b2lkKXVwZGF0ZVRpbWUKK3sKKyAgICBbc2VsZiB1cGRhdGVWb2x1bWVdOwor
CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAiY3VycmVudFFUVGltZSJdOworICAg
IFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiY3VycmVudFFUVGltZSJdOworICAgIFtzZWxm
IHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAImR1cmF0aW9uIl07CisgICAgW3NlbGYgZGlkQ2hhbmdl
VmFsdWVGb3JLZXk6QCJkdXJhdGlvbiJdOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktl
eTpAInJlbWFpbmluZ1RpbWVUZXh0Il07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6
QCJyZW1haW5pbmdUaW1lVGV4dCJdOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpA
ImVsYXBzZWRUaW1lVGV4dCJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiZWxh
cHNlZFRpbWVUZXh0Il07Cit9CisKKy0gKFFUVGltZSljdXJyZW50UVRUaW1lCit7CisgICAgUVRU
aW1lIHJldDsKKyAgICByZXQudGltZVZhbHVlID0gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8g
W19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jdXJyZW50VGltZSgpICogMzAgOiAwOworICAgIHJl
dC50aW1lU2NhbGUgPSAzMDsKKyAgICByZXR1cm4gcmV0OworfQorCistICh2b2lkKXNldEN1cnJl
bnRRVFRpbWU6KFFUVGltZSljdXJyZW50UVRUaW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1l
ZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGU7CisgICAgW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5zZXRDdXJyZW50VGltZSgoZG91Ymxl
KWN1cnJlbnRRVFRpbWUudGltZVZhbHVlIC8gKGRvdWJsZSljdXJyZW50UVRUaW1lLnRpbWVTY2Fs
ZSwgZSk7Cit9CisKKy0gKGRvdWJsZSlkdXJhdGlvbgoreworICAgIHJldHVybiBbX2RlbGVnYXRl
IG1lZGlhRWxlbWVudF0gPyBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAw
OworfQorCistIChkb3VibGUpbWF4Vm9sdW1lCit7CisgICAgLy8gU2V0IHRoZSB2b2x1bWUgc2xp
ZGVyIHJlc29sdXRpb24KKyAgICByZXR1cm4gMTAwOworfQorCistIChkb3VibGUpdm9sdW1lCit7
CisgICAgcmV0dXJuIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVkaWFF
bGVtZW50XS0+dm9sdW1lKCkgKiBbc2VsZiBtYXhWb2x1bWVdIDogMDsKK30KKworLSAodm9pZClz
ZXRWb2x1bWU6KGRvdWJsZSl2b2x1bWUKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVt
ZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZTsKKyAg
ICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnNldFZvbHVtZSh2b2x1bWUgLyBbc2VsZiBtYXhW
b2x1bWVdLCBlKTsKK30KKworCistIChCT09MKXBsYXlpbmcKK3sKKyAgICBpZiAoIVtfZGVsZWdh
dGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhW19k
ZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jYW5QbGF5KCk7Cit9CisKKy0gKHZvaWQpc2V0UGxheWlu
ZzooQk9PTClwbGF5aW5nCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmKHBsYXlpbmcpCisgICAgICAgIFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XS0+cGxheSgpOworICAgIGVsc2UKKyAgICAgICAgW19kZWxlZ2F0ZSBtZWRpYUVs
ZW1lbnRdLT5wYXVzZSgpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKiB0aW1lVG9TdHJpbmcoZG91
YmxlIHRpbWUpCit7CisgICAgaWYgKCFpc2Zpbml0ZSh0aW1lKSkKKyAgICAgICAgdGltZSA9IDA7
CisgICAgaW50IHNlY29uZHMgPSAoaW50KWZhYnNmKHRpbWUpOyAKKyAgICBpbnQgaG91cnMgPSBz
ZWNvbmRzIC8gKDYwICogNjApOworICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2
MDsKKyAgICBzZWNvbmRzICU9IDYwOworICAgIGlmIChob3VycykgeworICAgICAgICBpZiAoaG91
cnMgPiA5KQorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JXMlMDJkOiUwMmQ6JTAyZCIsICh0aW1lIDwgMCA/ICItIiA6ICIiKSwgaG91cnMsIG1pbnV0ZXMs
IHNlY29uZHNdOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlcyUwMWQ6JTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIp
LCBob3VycywgbWludXRlcywgc2Vjb25kc107CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlMDJkOiUwMmQiLCAodGltZSA8IDAg
PyAiLSIgOiAiIiksIG1pbnV0ZXMsIHNlY29uZHNdOworICAgIAorfQorCitzdGF0aWMgTlNTdHJp
bmcgKiBzdHJpbmdUb1RpbWVUZXh0QXR0cmlidXRlZChOU1N0cmluZyogc3RyaW5nLCBOU1RleHRB
bGlnbm1lbnQgYWxpZ24pCit7CisgICAgTlNTaGFkb3cqIGJsYWNrU2hhZG93ID0gW1tOU1NoYWRv
dyBhbGxvY10gaW5pdF07CisgICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd0NvbG9yOltOU0NvbG9y
IGJsYWNrQ29sb3JdXTsKKyAgICBbYmxhY2tTaGFkb3cgc2V0U2hhZG93Qmx1clJhZGl1czowXTsK
KyAgICBbYmxhY2tTaGFkb3cgc2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoMCwgLTEpXTsKKyAg
ICBOU011dGFibGVQYXJhZ3JhcGhTdHlsZSAqIHN0eWxlID0gW1tOU011dGFibGVQYXJhZ3JhcGhT
dHlsZSBhbGxvY10gaW5pdF07CisgICAgW3N0eWxlIHNldEFsaWdubWVudDphbGlnbl07CisgICAg
TlNEaWN0aW9uYXJ5ICogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czpibGFja1NoYWRvdywgTlNTaGFkb3dBdHRyaWJ1dGVOYW1lLCBzdHlsZSwgTlNQYXJh
Z3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUsIG5pbF07CisgICAgW3N0eWxlIHJlbGVhc2VdOworCisg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICogYXR0clN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJpbmcgYXR0cmlidXRlczpkaWN0XTsKKyAgICByZXR1
cm4gW2F0dHJTdHJpbmcgYXV0b3JlbGVhc2VdOyAgICAKK30KKworLSAoTlNTdHJpbmcgKilyZW1h
aW5pbmdUaW1lVGV4dAoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAg
ICAgICByZXR1cm4gQCIiOworCisgICAgLy8gTmVnYXRpdmUgbnVtYmVyCisgICAgcmV0dXJuIHN0
cmluZ1RvVGltZVRleHRBdHRyaWJ1dGVkKHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIG1lZGlhRWxl
bWVudF0tPmN1cnJlbnRUaW1lKCkgLSBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmR1cmF0aW9u
KCkpLCBOU0xlZnRUZXh0QWxpZ25tZW50KTsKK30KKworLSAoTlNTdHJpbmcgKillbGFwc2VkVGlt
ZVRleHQKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0
dXJuIEAiIjsKKworICAgIHJldHVybiBzdHJpbmdUb1RpbWVUZXh0QXR0cmlidXRlZCh0aW1lVG9T
dHJpbmcoW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jdXJyZW50VGltZSgpKSwgTlNSaWdodFRl
eHRBbGlnbm1lbnQpOworfQorCisvKgorICogIFRyYWNraW5nIGFyZWEgY2FsbGJhY2tzCisgKgor
ICovCisKKy0gKHZvaWQpbW91c2VFbnRlcmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICAv
LyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBiZSBoaWRkZW4gZnJvbSBub3cKKyAgICBfbW91c2VJ
c0luSFVEID0gWUVTOworICAgIFtzZWxmIGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpbW91
c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsK
KyAgICBbc2VsZiBmYWRlV2luZG93SW5dOworfQorCisvKgorICogIEludGVyZmFjZSBjYWxsYmFj
a3MKKyAqCisgKi8KKworLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCit7CisgICAg
W19kZWxlZ2F0ZSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOyAKK30KKworLyoKKyAqICBXaW5kb3cg
Y2FsbGJhY2sKKyAqCisgKi8KKworLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30K
KworLSAodm9pZCl3aW5kb3dEaWRDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
K3sKKyAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07Cit9CisKK0BlbmQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDJlYWUyODYuLjFhY2VlZDAgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCkBAIC05Myw2ICs5Myw3IEBACiAjaW1wb3J0ICJXZWJUZXh0SXRlcmF0b3IuaCIKICNp
bXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxDb3Jl
Rm91bmRhdGlvbi9DRlNldC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAgLTI0NzUs
NyArMjQ3Niw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXJvdW5k
KCkKICAgICAKICAgICBpZiAoW3NlbGYgX25lZWRzRnJhbWVMb2FkRGVsZWdhdGVSZXRhaW5RdWly
a10pCiAgICAgICAgIFtfcHJpdmF0ZS0+ZnJhbWVMb2FkRGVsZWdhdGUgcmVsZWFzZV07Ci0gICAg
ICAgIAorCiAgICAgW19wcml2YXRlIHJlbGVhc2VdOwogICAgIC8vIFtzdXBlciBkZWFsbG9jXSBj
YW4gZW5kIHVwIGRpc3BhdGNoaW5nIGFnYWluc3QgX3ByaXZhdGUgKDM0NjYwODIpCiAgICAgX3By
aXZhdGUgPSBuaWw7CkBAIC01NDUyLDYgKzU0NTMsMzEgQEAgc3RhdGljIHZvaWQgdmlld1VwZGF0
ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BB
Y3QKIAogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pCisKKy0gKHZvaWQpX2VudGVyRnVsbHNj
cmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGUKK3sKKyAgICBBU1NFUlQobm9kZS0+aGFz
VGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZpZGVvVGFnKSk7CisgICAgSFRNTE1lZGlhRWxl
bWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+IChub2Rl
KTsKKworICAgIGlmICghX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CisgICAgICAg
IF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciBhbGxvY10gaW5pdF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+
ZnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOltbc2VsZiB3aW5kb3ddIHNjcmVl
bl1dOyAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKK30KKworLSAodm9p
ZClfZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVy
IGV4aXRGdWxsc2NyZWVuXTsKKyAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHJl
bGVhc2VdOworICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciA9IG5pbDsKK30KKwor
I2VuZGlmCisKIEBlbmQKIAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLmgKaW5kZXggYjA0M2YxZS4uNTI2Nzc1ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLmgKQEAgLTQzLDYgKzQzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQGNsYXNzIFdlYlBy
ZWZlcmVuY2VzOwogQGNsYXNzIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlcjsKIEBwcm90b2Nv
bCBXZWJGb3JtRGVsZWdhdGU7CisjaWYgRU5BQkxFKFZJREVPKQorQGNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXI7CisjZW5kaWYKIAogZXh0ZXJuIEJPT0wgYXBwbGljYXRpb25Jc1Rl
cm1pbmF0aW5nOwogZXh0ZXJuIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwpAQCAtMTU3
LDUgKzE2MCw4IEBAIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKICAgICBO
U0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2ZW50OwogCiAgICAgQ0ZSdW5Mb29wVGltZXJSZWYg
dXBkYXRlTW91c2VvdmVyVGltZXI7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgKmZ1bGxzY3JlZW5Db250cm9sbGVyOworI2VuZGlmCiB9CiBAZW5k
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0gYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXggNDhlN2Y2Yy4uN2UwNzEwNSAxMDA2NDQK
LS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5tbQpAQCAtODAsNiArODAsNyBAQCBpbnQgcGx1Z2luRGF0YWJh
c2VDbGllbnRDb3VudCA9IDA7CiAgICAgQVNTRVJUKGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyB8
fCAhcGFnZSk7CiAgICAgQVNTRVJUKGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZyB8fCAhcHJlZmVy
ZW5jZXMpOwogICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFzdGVib2FyZCk7CisgICAgQVNTRVJUKCFm
dWxsc2NyZWVuQ29udHJvbGxlcik7CiAKICAgICBbYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
IHJlbGVhc2VdOwogICAgIFtiYWNrZ3JvdW5kQ29sb3IgcmVsZWFzZV07CkBAIC05OSw2ICsxMDAs
NyBAQCBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9IDA7CiB7CiAgICAgQVNTRVJUX01B
SU5fVEhSRUFEKCk7CiAgICAgQVNTRVJUKCFpbnNlcnRpb25QYXN0ZWJvYXJkKTsKKyAgICBBU1NF
UlQoIWZ1bGxzY3JlZW5Db250cm9sbGVyKTsKIAogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmggYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKaW5kZXggNzE0ZGE4Ny4uOGI3YTI5NiAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50Owog
ICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgTm9kZTsKIH0KICNlbmRpZgogCkBAIC0xNjgsNCAr
MTY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAtICh2b2lkKV9zZXRJbnNlcnRpb25QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwogCisjaWYgRU5BQkxFKFZJREVPKSAm
JiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZToo
V2ViQ29yZTo6Tm9kZSopbm9kZTsKKy0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuOworI2VuZGlmCisK
IEBlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24u
aCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJiZThlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitAaW50ZXJmYWNlIFdlYldpbmRvd1NjYWxl
QW5pbWF0aW9uIDogTlNBbmltYXRpb24geworICAgIE5TUmVjdCBfaW5pdGlhbEZyYW1lLCBfZmlu
YWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dpbmRvdzsgLy8gKGFzc2lnbikK
KyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJldGFpbikKKyAgICBOU1RpbWVJ
bnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRh
bEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1l
OworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilhbmltYXRpb247CisK
Ky0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6
bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCistICh2
b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdzsKK0BlbmQKKworCitAaW50ZXJmYWNlIFdl
YldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7CisgICAgQ0dGbG9hdCBfaW5pdGlh
bEFscGhhLCBfZmluYWxBbHBoYTsKKyAgICBOU1dpbmRvdyAqX3dpbmRvdzsgLy8gKHJldGFpbikK
KyAgICBCT09MIF9pc1N0b3BwZWQ7CisgICAgCit9CistIChpZClpbml0V2l0aER1cmF0aW9uOihO
U1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRpYWxB
bHBoYTooQ0dGbG9hdClpbml0aWFsQWxwaGEgZmluYWxBbHBoYTooQ0dGbG9hdClmaW5hbEFscGhh
OworCistIChDR0Zsb2F0KWN1cnJlbnRBbHBoYTsKKworLy8gQmUgc3VyZSB0byBjYWxsIHNldFdp
bmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9wcmlhdGUK
Ky0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93OworQGVuZApkaWZmIC0tZ2l0IGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAzYTNkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2lu
ZG93QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXZWJX
aW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGljIGNvbnN0IENHRmxvYXQgc2xvbW9GYWN0
b3IgPSAxMC47CisKK3N0YXRpYyBOU1RpbWVJbnRlcnZhbCBXZWJXaW5kb3dBbmltYXRpb25EdXJh
dGlvbkZyb21EdXJhdGlvbihOU1RpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4g
KFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2spID8gZHVyYXRpb24gKiBz
bG9tb0ZhY3RvciA6IGR1cmF0aW9uOyAgICAgICAgCit9CisKK3N0YXRpYyBOU1JlY3Qgc2NhbGVk
UmVjdChOU1JlY3QgX2luaXRpYWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBkb3VibGUgZmFj
dG9yKQoreworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IF9pbml0aWFsRnJhbWU7CisgICAgY3Vy
cmVudFJlY3Qub3JpZ2luLnggKz0gKE5TTWluWChfZmluYWxGcmFtZSkgLSBOU01pblgoX2luaXRp
YWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi55ICs9IChOU01pblko
X2ZpbmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJy
ZW50UmVjdC5zaXplLndpZHRoICs9IChOU1dpZHRoKF9maW5hbEZyYW1lKSAtIE5TV2lkdGgoX2lu
aXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0LnNpemUuaGVpZ2h0ICs9IChO
U0hlaWdodChfZmluYWxGcmFtZSkgLSBOU0hlaWdodChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7
CisgICAgcmV0dXJuIGN1cnJlbnRSZWN0OworfQorCitzdGF0aWMgQ0dGbG9hdCBzcXVhcmVkRGlz
dGFuY2UoTlNQb2ludCBwb2ludDEsIE5TUG9pbnQgcG9pbnQyKQoreworICAgIENHRmxvYXQgZGVs
dGFYID0gcG9pbnQxLnggLSBwb2ludDIueDsKKyAgICBDR0Zsb2F0IGRlbHRhWSA9IHBvaW50MS55
IC0gcG9pbnQyLnk7CisgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRh
WTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uCistIChpZClp
bml0Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgICAgICBbc2VsZiBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsK
KyAgICAgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwLl07CisgICAgfQorICAgIHJldHVybiBzZWxm
OworfQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJh
dGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlh
bEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1lCit7CisgICAgaWYgKChzZWxmID0g
W3NlbGYgaW5pdF0pKSB7CisgICAgICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAg
ICAgICBfd2luZG93ID0gd2luZG93OworICAgICAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZy
YW1lOworICAgICAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgICAgIF9yZWFsRnJh
bWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpIGRlYWxsb2MKK3sKKyAgICBbX3dpbmRvdyByZWxlYXNlXTsKKyAgICBbX3N1YkFuaW1hdGlv
biByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldl
YldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0g
KHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93Cit7CisgICAgX3dpbmRvdyA9IHdpbmRv
dzsKK30KKworLSAoZmxvYXQpY3VycmVudFZhbHVlCit7CisgICAgcmV0dXJuIDAuNSAtIDAuNSAq
IGNvcyhNX1BJICogKDEgLSBbc2VsZiBjdXJyZW50UHJvZ3Jlc3NdKSk7Cit9CisKKy0gKE5TUmVj
dCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2NhbGVkUmVjdChfZmluYWxGcmFtZSwgX2lu
aXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVu
dFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCit7CisgICAgaWYgKCFfd2lu
ZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnBy
b2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IFtzZWxmIGN1cnJlbnRGcmFtZV07
CisgICAgV0tXaW5kb3dTZXRTY2FsZWRGcmFtZShfd2luZG93LCBjdXJyZW50UmVjdCwgX3JlYWxG
cmFtZSk7CisgICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsK
K30KKworLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCit7
CisgICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlvbjsKKyAgICBfc3ViQW5pbWF0aW9u
ID0gW2FuaW1hdGlvbiByZXRhaW5dOworICAgIFtvbGRBbmltYXRpb24gcmVsZWFzZV07Cit9CisK
Ky0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlvbgoreworICAgIHN0YXRpYyBjb25z
dCBDR0Zsb2F0IG1heEFkZGl0aW9uYWxEdXJhdGlvbiA9IDEuMDsKKyAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMTsKKyAgICAKKyAgICBDR0Zsb2F0IG1heERpc3Qg
PSBzcXVhcmVkRGlzdGFuY2UoX2luaXRpYWxGcmFtZS5vcmlnaW4sIF9maW5hbEZyYW1lLm9yaWdp
bik7CisgICAgQ0dGbG9hdCBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2Uo
TlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkp
LCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7
CisgICAgaWYoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAor
ICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJh
bWUpLCBOU01heFkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJh
bWUpLCBOU01heFkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYoZGlzdCA+IG1heERpc3QpCisgICAg
ICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNN
YWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBO
U01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7Cisg
ICAgaWYoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAg
IHJldHVybiBNSU4oc3FydChtYXhEaXN0KSAqIHNwZWVkRmFjdG9yLCBtYXhBZGRpdGlvbmFsRHVy
YXRpb24pOyAgICAKK30KKworLSAodm9pZClzdGFydEFuaW1hdGlvbgoreworICAgIC8vIENvbXB1
dGUgZXh0cmEgdGltZQorICAgIGlmIChfaGludGVkRHVyYXRpb24pCisgICAgICAgIFtzZWxmIHNl
dER1cmF0aW9uOl9oaW50ZWREdXJhdGlvbiArIFtzZWxmIGFkZGl0aW9uYWxEdXJhdGlvbl1dOwor
ICAgIFtzdXBlciBzdGFydEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbgor
eworICAgIF93aW5kb3cgPSBuaWw7CisgICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOworICAgIFtf
c3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViV2luZG93RmFkZUFuaW1hdGlvbgorLSAoaWQpaW5pdAoreworICAgIGlmICgoc2VsZiA9IFtz
dXBlciBpbml0XSkpIHsKKyAgICAgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5T
QW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07CisgICAgICAgIFtzZWxmIHNldEZyYW1lUmF0
ZTo2MC5dOworICAgICAgICBbc2VsZiBzZXRBbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJ
bk91dF07CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aER1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGlu
aXRpYWxBbHBoYTooQ0dGbG9hdClpbml0aWFsQWxwaGEgZmluYWxBbHBoYTooQ0dGbG9hdClmaW5h
bEFscGhhCit7CisgICAgaWYgKChzZWxmID0gW3NlbGYgaW5pdF0pKSB7CisgICAgICAgIFtzZWxm
IHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICAgICAgX3dpbmRvdyA9IHdpbmRvdzsKKyAgICAg
ICAgX2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsKKyAgICAgICAgX2ZpbmFsQWxwaGEgPSBm
aW5hbEFscGhhOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXREdXJh
dGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRpb246
V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30KKwor
LSAoQ0dGbG9hdCljdXJyZW50QWxwaGEKK3sKKyAgICByZXR1cm4gTUFYKDAuMCwgTUlOKDEuMCwg
X2luaXRpYWxBbHBoYSArIFtzZWxmIGN1cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5p
dGlhbEFscGhhKSkpOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRp
b25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmIChfaXNTdG9wcGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoX3dpbmRvdyk7CisgICAgV0tXaW5kb3dTZXRBbHBoYShfd2luZG93
LCBbc2VsZiBjdXJyZW50QWxwaGFdKTsKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnBy
b2dyZXNzXTsKK30KKworLSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93Kil3aW5kb3cKK3sKKyAg
ICBfd2luZG93ID0gd2luZG93OworfQorCistICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHdoZW4gd2UgYXJlIGEgc3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxl
IGFuaW1hdGlvbi4KKyAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5p
bWF0ZWQgdGhyZWFkIG9mIHRoZSBwYXJlbnQKKyAgICAvLyBhbmQgZXZlbiBhZnRlciBbc3VwZXIg
c3RvcEFuaW1hdGlvbl0sIHRoZSBwYXJlbnQgbWlnaHQgY2FsbAorICAgIC8vIHNldEN1cnJyZW50
UHJvZ3Jlc3MuCisgICAgX2lzU3RvcHBlZCA9IFlFUzsKKworICAgIFtzdXBlciBzdG9wQW5pbWF0
aW9uXTsKK30KKworQGVuZAor
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33470</attachid>
            <date>2009-07-24 14:10:08 -0700</date>
            <delta_ts>2009-07-31 13:22:14 -0700</delta_ts>
            <desc>Implement video Fullscreen on Mac OS X.</desc>
            <filename>bug-26742-20090724141008.patch</filename>
            <type>text/plain</type>
            <size>77676</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzdhNWY2MC4uNTMwYzJiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wNy0yNCAgUGllcnJlIGQnSGVy
YmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB2aWRlbyBGdWxsc2NyZWVuIG9uIE1h
YyBPUyBYLgorICAgICAgICAKKyAgICAgICAgQ2hyb21lQ2xpZW50IGdldHMgYSBuZXcgaW50ZXJm
YWNlIGVudGVyL2V4aXQvc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSgpLgorCisgICAgICAgIFN1
cHBvcnQgZnVsbHNjcmVlbiBpbiBNZWRpYVBsYXllci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzQyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNv
cmUuVmlkZW8uZXhwOiBOZXcgbmVlZGVkIGV4cG9ydGVkIHN5bWJvbHMuCisgICAgICAgICogV2Vi
Q29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxSZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6c2NyZWVuUmVjdCk6IEhlbHBlciB0byBkaXJlY3RseSBnZXRzIHRoZQor
ICAgICAgICBzY3JlZW5SZWN0LiBUaGlzIGlzIHVzZWQgYnkgV2ViS2l0J3MgQ2hyb21lQ2xpZW50
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRmb3JtTW92aWUpOiBOZXcgYWNj
ZXNzb3IgdGhhdCBpcyB1c2VkCisgICAgICAgIGV2ZW50dWFsbHkgYnkgQ2hyb21lQ2xpZW50IHRv
IGRpcmVjdGx5IHJlbmRlciB0aGUgbW92aWUgZnVsbHNjcmVlbi4KKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6Cisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSk6IFNlZSBXZWJLaXQgY2hyb21lIGNsaWVu
dHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmVudGVy
RnVsbHNjcmVlbkZvck5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TnVsbE1lZGlhUGxheWVy
UHJpdmF0ZTo6cGxhdGZvcm1Nb3ZpZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
cGxhdGZvcm1Nb3ZpZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cGxhdGZvcm1Nb3Zp
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9y
bU1vdmllKToKKyAgICAgICAgKiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorCiAyMDA5LTA3LTIzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDNmNTNjYWEuLmNjNDE0MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTczMyw2ICs3MzMsMTAgQEAgaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9QTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9QTFUKICAgICAgV0VCQ09SRV9F
WFBPUlRfREVQRU5ERU5DSUVTIDo9ICQoV0VCQ09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKSBXZWJD
b3JlLlZpZGVvUHJveHkuZXhwCiBlbmRpZgogCitpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1ZJ
REVPLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9WSURFTykKKyAgICAgV0VCQ09SRV9FWFBP
UlRfREVQRU5ERU5DSUVTIDo9ICQoV0VCQ09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKSBXZWJDb3Jl
LlZpZGVvLmV4cAorZW5kaWYKKwogV2ViQ29yZS5leHAgOiBXZWJDb3JlLmJhc2UuZXhwICQoV0VC
Q09SRV9FWFBPUlRfREVQRU5ERU5DSUVTKQogCWNhdCAkXiA+ICRACiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5WaWRlby5leHAgYi9XZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMDYwZjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwCkBAIC0wLDAgKzEsMTEgQEAKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVu
dDVwYXVzZUV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50NnZvbHVtZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50N2NhblBsYXlFdgorX19aTks3V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDhkdXJhdGlvbkV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ5
c2V0Vm9sdW1lRWZSaQorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTBzY3JlZW5SZWN0
RXYKK19fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxMWN1cnJlbnRUaW1lRXYKK19fWk5L
N1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxM3BsYXRmb3JtTW92aWVFdgorX19aTjdXZWJDb3Jl
MTZIVE1MTWVkaWFFbGVtZW50MTRzZXRDdXJyZW50VGltZUVmUmkKK19fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDE0ZXhpdEZ1bGxzY3JlZW5FdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDlhYjJiMzQuLjIz
N2E0Y2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAKQEAgLTcyOCw2ICs3MjgsNyBAQCBfX1pON1dlYkNvcmU5SFRNTE5h
bWVzN3NyY0F0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGZyYW1lVGFnRQogX19aTjdXZWJD
b3JlOUhUTUxOYW1lczhocmVmQXR0ckUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM4aW5wdXRUYWdF
CitfX1pON1dlYkNvcmU5SFRNTE5hbWVzOHZpZGVvVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1l
czlpZnJhbWVUYWdFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOXNjcmlwdFRhZ0UKIF9fWk43V2Vi
Q29yZTlQYWdlQ2FjaGUxMXNldENhcGFjaXR5RWkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYTQwODZhMS4uNTAzNGM4NyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU5MTQsNiArNTkxNCw3IEBACiAJCTYzMTg5
QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTm9kZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVy
U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVJlbmRlclN0eWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3
QSAvKiBXZWJDb3JlLlZpZGVvLmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0czsgcGF0
aCA9IFdlYkNvcmUuVmlkZW8uZXhwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBG
NTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTBGQkYyNzBEOUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0hLZXJuRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MEZCRjI4MEQ5QUYwNDcwMDhGQzI5MiAvKiBTVkdI
S2VybkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSEtlcm5F
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTc0LDYgKzk5NzUsNyBA
QAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJzLmV4
cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9yZWln
bk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNvcmUu
VGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3JlLlZp
ZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5WaWRl
b1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAppbmRleCA3Y2RhM2ZiLi45YmZlNzJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2lu
Y2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtMTEwLDYgKzExMiw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxN
ZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykK
ICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChmYWxz
ZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNjcmVl
bihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1fbmVl
ZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjM4LDYgKzI0MSwxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1bGVM
b2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7CisgICAg
aWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhUTUxF
bGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkp
CkBAIC0xNjA4LDYgKzE2MTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZvbHVt
ZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK0ludFJlY3QgSFRNTE1lZGlh
RWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVjdCgwLDAsMCww
KTsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJlcigp
LT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAgICAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNjc4LDYgKzE2OTUs
MjYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogfQog
I2VuZGlmCiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAg
ICBBU1NFUlQoIW1faXNGdWxsc2NyZWVuKTsKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSB0cnVlOworfQorCit2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9pc0Z1bGxzY3Jl
ZW4pOworICAgIGlmIChkb2N1bWVudCgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworICAgIG1faXNG
dWxsc2NyZWVuID0gZmFsc2U7Cit9CisKK3ZvaWQqIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRmb3Jt
TW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllciA/IG1fcGxheWVyLT5wbGF0Zm9y
bU1vdmllKCkgOiAwOworfSAgICAgICAgCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKaW5kZXggMjdiNDhlYS4uNDE1YjU4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC01
Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwpAQCAtNzIsNiArNzMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRlb0Vs
ZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH07CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2F2ZSgpIGNvbnN0OworICAg
IAorICAgIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdDsKIAogICAgIHZvaWQgc2NoZWR1bGVM
b2FkKCk7CiAgICAgCkBAIC0xNDAsNiArMTQzLDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW5T
Y3J1YmJpbmcoKTsKICAgICB2b2lkIGVuZFNjcnViYmluZygpOwogCisgICAgSW50UmVjdCBzY3Jl
ZW5SZWN0KCk7CisKICAgICBib29sIGNhblBsYXkoKSBjb25zdDsKIAogICAgIGZsb2F0IHBlcmNl
bnRMb2FkZWQoKSBjb25zdDsKQEAgLTE1Myw2ICsxNTgsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
ICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiAhbV9wbGF5
ZXIgfHwgbV9wbGF5ZXItPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCk7IH0KKyAgICAKKyAgICB2
b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAogcHJv
dGVjdGVkOgogICAgIGZsb2F0IGdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikgY29uc3Q7CkBAIC0zMDQsNiArMzEyLDggQEAgcHJv
dGVjdGVkOgogICAgIC8vIHN1cHBvcnQgcHJvZ3Jlc3MgZXZlbnRzIHNvIHNldHRpbmcgbV9zZW5k
UHJvZ3Jlc3NFdmVudHMgZGlzYWJsZXMgdGhlbSAKICAgICBib29sIG1fc2VuZFByb2dyZXNzRXZl
bnRzIDogMTsKIAorICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4gOiAxOworCiAjaWYgRU5BQkxFKFBM
VUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgYm9vbCBtX25lZWRXaWRnZXRVcGRhdGUgOiAxOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oIGIvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRleCBkYzk3MTRhLi4xYmRiMmY3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBFTkFCTEUoVklERU8p
CiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCB7IHJldHVybiBwbGF5ZXIo
KSAmJiBwbGF5ZXIoKS0+aGFzVmlkZW8oKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBwbGF5ZXIoKSAmJiBwbGF5ZXIoKS0+c3VwcG9ydHNG
dWxsc2NyZWVuKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29u
c3QgeyByZXR1cm4gZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5j
bGllbnQoKS0+c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggMzNlYWNmOS4uNDI3ODJmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMTg1
LDYgKzE4NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZVZpZXdVcGRhdGUoKSA9IDA7CiAjZW5kaWYKIAorICAgICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KKyAg
ICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICB2aXJ0dWFsIEtleWJvYXJkVUlNb2Rl
IGtleWJvYXJkVUlNb2RlKCkgeyByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OyB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggZDRmYWI1Mi4uMjRh
ZWJhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTYy
LDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlKCkgeyB9ICAgIAogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkKiBwbGF0
Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBJbnRTaXplIG5h
dHVyYWxTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQogCkBAIC0zMDEsMTEg
KzMwMSw2IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OnNlZWtpbmcoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaXZhdGUtPnNlZWtpbmcoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c0Z1bGxzY3Jl
ZW4oKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNTYXZlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c1NhdmUoKTsKQEAgLTMyOSw2ICszMjQsMTEgQEAg
Ym9vbCBNZWRpYVBsYXllcjo6aW5NZWRpYURvY3VtZW50KCkKICAgICByZXR1cm4gZG9jdW1lbnQg
JiYgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpOwogfQogCit2b2lkKiBNZWRpYVBsYXllcjo6
cGxhdGZvcm1Nb3ZpZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1N
b3ZpZSgpOworfQorCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyOjpuZXR3
b3JrU3RhdGUoKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm5ldHdvcmtTdGF0ZSgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDdmNWYyYTAuLmNlYTlkYzAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogCiAgICAgLy8gdGltZSBoYXMganVtcGVkLCBlZy4gbm90IGFzIGEgcmVzdWx0
IG9mIG5vcm1hbCBwbGF5YmFjawogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclRpbWVDaGFu
Z2VkKE1lZGlhUGxheWVyKikgeyB9Ci0gICAgCisKICAgICAvLyB0aGUgbWVkaWEgZmlsZSBkdXJh
dGlvbiBoYXMgY2hhbmdlZCwgb3IgaXMgbm93IGtub3duCiAgICAgdmlydHVhbCB2b2lkIG1lZGlh
UGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9CiAgICAgCkBAIC0xMDcsMTUg
KzEwNywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+Jik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotICAgIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1NhdmUoKSBj
b25zdDsKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7CisKICAgICBJbnRTaXplIG5h
dHVyYWxTaXplKCk7CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0RnJh
bWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3OyB9
CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQogICAg
IGJvb2wgaW5NZWRpYURvY3VtZW50KCk7Ci0gICAgCisKICAgICBJbnRTaXplIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZh
dGUuaAppbmRleCA2ZDEzNTliLi44YjYxZmUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTQyLDExICs0MiwxMiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOwotICAgIAorCisgICAgdmlydHVhbCB2b2lkKiBwbGF0
Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBsYXko
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAKIAotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1NhdmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
dmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKaW5k
ZXggNTRlZWEwMC4uNjExMGFmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCkBAIC03Nyw2ICs3Nyw4IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOwogICAgIHN0YXRpYyBi
b29sIGlzQXZhaWxhYmxlKCk7CiAKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7CisK
ICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNv
bnN0OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQppbmRleCBjMWQ3ZmNiLi43MjI4NmQzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtp
dC5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5tbQpAQCAtNTYyLDYgKzU2MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
bG9hZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVs
YXlDYWxsYmFja3M6Tk9dOwogfQogCit2b2lkKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3Jt
TW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0TW92aWUuZ2V0KCk7Cit9CisKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKIHsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxl
KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggZDBh
Zjk4MS4uN2Y0ZDUyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcApAQCAtNTI1LDYgKzUyNSw3IEBAIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVuCiB2b2lkIE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xp
Y2tFdmVudCkgeworICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKCk7CiAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5wdXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc1YjdhZDEuLjNiNjU3MzggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDA5LTA3LTI0ICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IHZpZGVvIEZ1bGxzY3JlZW4gb24gTWFjIE9TIFguCisgICAgICAgIAorICAgICAg
ICBDaHJvbWVDbGllbnQgZ2V0cyBhIG5ldyBpbnRlcmZhY2UgZW50ZXIvZXhpdC9zdXBwb3J0c0Z1
bGxzY3JlZW5Gb3JOb2RlKCkuCisKKyAgICAgICAgU3VwcG9ydCBmdWxsc2NyZWVuIGluIE1lZGlh
UGxheWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjY3NDIKKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
bmV3IGZpbGVzLgorCiAyMDA5LTA3LTE2ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdmYjE0ZTQuLjg0OWUxNjIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMiw2ICsxMDIsMTIgQEAKIAkJ
NURFODNBN0MwRDBGN0Y5NDAwQ0FEMTJBIC8qIFdlYlZpZXdFZGl0aW5nQ29udGV4dE1lbnVPbGQu
bmliIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4
M0E3ODBEMEY3Rjk0MDBDQUQxMkEgLyogV2ViVmlld0VkaXRpbmdDb250ZXh0TWVudU9sZC5uaWIg
Ki87IH07CiAJCTVERTgzQTdGMEQwRjdGQUQwMENBRDEyQSAvKiBMb2NhbGl6YWJsZS5zdHJpbmdz
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4M0E3
RDBEMEY3RkFEMDBDQUQxMkEgLyogTG9jYWxpemFibGUuc3RyaW5ncyAqLzsgfTsKIAkJNURFOTJG
RUYwQkQ3MDE3RTAwNTlBNUZEIC8qIFdlYkFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTkyRkVFMEJENzAxN0UwMDU5QTVGRCAvKiBX
ZWJBc3NlcnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNjMzRkZGQUUxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMzRkZGQUMx
MDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovOyB9OworCQk2MzNGRkZB
RjEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzNGRkZBRDEwMTBGMkU4MDBDNEU4ODEg
LyogV2ViV2luZG93QW5pbWF0aW9uLm0gKi87IH07CisJCTYzNTJBRjlCMTAxQTI5MkUwMEYyOTA2
RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovOyB9OworCQk2MzUyQUY5QzEwMUEyOTJFMDBG
MjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovOyB9OworCQk2MzgzNTlEMjEwMEMz
OTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM4MzU5RDAxMDBD
Mzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAq
LzsgfTsKKwkJNjM4MzU5RDMxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2MzgzNTlEMTEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJNjU0ODhEQTEwODRGQkNDQjAwODMxQUQw
IC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjU0ODhEOUYwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlv
bmFyeUV4dHJhcy5oICovOyB9OwogCQk2NTQ4OERBMjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNE
aWN0aW9uYXJ5RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTQ4OERBMDA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFz
Lm0gKi87IH07CiAJCTY1NkQzMzNFMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NkQzMzNEMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0
ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNDc0LDYgKzQ4MCwxMiBAQAogCQk1REU4M0E3OTBEMEY3Rjk0MDBDQUQxMkEgLyogRW5n
bGlzaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdy
YXBwZXIubmliOyBuYW1lID0gRW5nbGlzaDsgcGF0aCA9IEVuZ2xpc2gubHByb2ovV2ViVmlld0Vk
aXRpbmdDb250ZXh0TWVudU9sZC5uaWI7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJ
NURFODNBN0UwRDBGN0ZBRDAwQ0FEMTJBIC8qIEVuZ2xpc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMTA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlz
dC5zdHJpbmdzOyBuYW1lID0gRW5nbGlzaDsgcGF0aCA9IEVuZ2xpc2gubHByb2ovTG9jYWxpemFi
bGUuc3RyaW5nczsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk1REU5MkZFRTBCRDcw
MTdFMDA1OUE1RkQgLyogV2ViQXNzZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQXNzZXJ0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
MzNGRkZBQzEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2MzNGRkZBRDEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93
QW5pbWF0aW9uLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYldpbmRv
d0FuaW1hdGlvbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MzUyQUY5OTEwMUEy
OTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM4MzU5RDAxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2MzgzNTlEMTEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NDg4RDlGMDg0RkJDQ0IwMDgzMUFE
MCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NTQ4OERB
MDA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYk5TRGljdGlvbmFy
eUV4dHJhcy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJNjU2RDMzM0QwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERl
bGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVz
b3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMDkwLDYgKzExMDIsMTIgQEAKIAkJCQlCQzJFNDY0QzBGRDhBOTY4MDBBOUQ5REUgLyogV2Vi
Vmlld0RhdGEubW0gKi8sCiAJCQkJOTMwRDAyQkIwNjI3NUY2NDAwNzY3MDFFIC8qIFdlYlZpZXdJ
bnRlcm5hbC5oICovLAogCQkJCTUxQThCNTdEMDQyODM1M0EwMENBMkQzQSAvKiBXZWJWaWV3UHJp
dmF0ZS5oICovLAorCQkJCTYzNTJBRjk5MTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmggKi8sCisJCQkJNjM1MkFGOUExMDFBMjkyRTAwRjI5MDZFIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCisJCQkJNjM4MzU5RDAxMDBDMzk2NDAw
MUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQk2MzgzNTlEMTEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbSAqLywKKwkJCQk2MzNGRkZBQzEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLmggKi8sCisJCQkJNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdlYldp
bmRvd0FuaW1hdGlvbi5tICovLAogCQkJKTsKIAkJCW5hbWUgPSBXZWJWaWV3OwogCQkJcGF0aCA9
IG1hYy9XZWJWaWV3OwpAQCAtMTQzNyw2ICsxNDU1LDkgQEAKIAkJCQk5Mzk4MTA0NjA4MjRCRjAx
MDA4REYwMzggLyogV2ViVmlld0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDlC
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzOTgxMDcxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNjM4MzU5RDIxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzM0ZGRkFFMTAxMEYyRTgw
MEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTYzNTJB
RjlCMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE3NjYsNiArMTc4Nyw5IEBACiAJCQkJOTM5ODExMDcwODI0QkYwMTAw
OERGMDM4IC8qIFdlYlZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzJFNDY0RTBGRDhBOTY4
MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBFODA4
MjRCRjAxMDA4REYwMzggLyogV2ViVmlld0ZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKKwkJCQk2
MzgzNTlEMzEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTYzM0ZGRkFGMTAxMEYyRTgwMEM0RTg4MSAv
KiBXZWJXaW5kb3dBbmltYXRpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTYzNTJBRjlDMTAxQTI5
MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCmluZGV4IDhhMmU3MjcuLjFmY2I3N2QgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMDktMDct
MjQgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdmlkZW8g
RnVsbHNjcmVlbiBvbiBNYWMgT1MgWC4KKyAgICAgICAgCisgICAgICAgIENocm9tZUNsaWVudCBn
ZXRzIGEgbmV3IGludGVyZmFjZSBlbnRlci9leGl0L3N1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
KS4KKworICAgICAgICBTdXBwb3J0IGZ1bGxzY3JlZW4gaW4gTWVkaWFQbGF5ZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjc0MgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzdXBw
b3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKTogRG8gd2Ugc3VwcG9ydCBmdWxsc2NyZWVuIGZvciB0aGlz
IG5vZGU/CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUp
OiBHbyBmdWxsc2NyZWVuIGZvciB0aGlzIG5vZGUuIFRoaXMgaXMgYmFsYW5jZWQgYnkgYW4gZXhp
dC4KKyAgICAgICAgRm9yIG5vdyB3ZSBoYW5kbGUgbmVzdGVkIGVudGVyRnVsbHNjcmVlbkZvck5v
ZGUgdGhlIG1vc3Qgc2ltcGxpZXN0IHdheS4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhp
dEZ1bGxzY3JlZW5Gb3JOb2RlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IGluaXRXaXRoQ29udGVudFJlY3Q6c3R5bGVNYXNrOmJh
Y2tpbmc6ZGVmZXI6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBj
YW5CZWNvbWVLZXlXaW5kb3ddKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93IGNlbnRlcl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlciBkZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyIHNldERlbGVnYXRlOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHNjaGVkdWxlVGltZVVwZGF0ZV0pOiBTdGFydCBhIHRp
bWVyIHRvIGRvIHRoZSB0aW1lCisgICAgICAgIHVwZGF0ZXMgb24gdGhlIEhVRC4KKyAgICAgICAg
KC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciB1bnNjaGVkdWxlVGltZVVw
ZGF0ZV0pOiBTdG9wIHVwZGF0aW5nIHRoZSBIVUQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgd2luZG93TmliTmFtZV0pOgorICAgICAgICAoLVtXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGZhZGVXaW5kb3dJbl0pOiBGYWRlIHRo
ZSBIVUQgYW5kIHNjaGVkdWxlIGlmIG5lZWRlZAorICAgICAgICB0aGUgbmV4dCB0aW1lIGl0IHdp
bGwgYmUgaGlkZGVuLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyIGZhZGVXaW5kb3dPdXRdKTogSGlkZSB0aGUgSFVEIChhbmltYXRlZCkuCisgICAgICAg
ICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgY2xvc2VXaW5kb3ddKTog
Q2xvc2UgdGhlIEhVRC4KKyAgICAgICAgKGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xU
eXBlKToKKyAgICAgICAgKGNyZWF0ZVRpbWVUZXh0RmllbGQpOgorICAgICAgICAoLVtXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGxvYWRXaW5kb3ddKToKKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciB3aW5kb3dEaWRMb2FkXSk6Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgdXBkYXRlVm9s
dW1lXSk6IFVwZGF0ZSB0aGlzIGluZm9ybWF0aW9uCisgICAgICAgIHZpYSBLVk8uCisgICAgICAg
ICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgdXBkYXRlVGltZV0pOiBk
aXR0by4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBj
dXJyZW50UVRUaW1lXSk6IFRoaXMgaXMgYmluZGVkIHRvIHRoZSBVSSB2aWEKKyAgICAgICAgY29j
b2EgYmluZGluZ3MuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIgc2V0Q3VycmVudFFUVGltZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgZHVyYXRpb25dKTogRGl0dG8uCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgbWF4Vm9sdW1lXSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHZvbHVt
ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlciBzZXRWb2x1bWU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyIHBsYXlpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgc2V0UGxheWluZzpdKTogRGl0dG8uCisgICAg
ICAgICh0aW1lVG9TdHJpbmcpOgorICAgICAgICAoc3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQp
OgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIHJlbWFp
bmluZ1RpbWVUZXh0XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyIGVsYXBzZWRUaW1lVGV4dF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciBtb3VzZUVudGVyZWQ6XSk6CisgICAg
ICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgbW91c2VFeGl0ZWQ6
XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgZXhp
dEZ1bGxzY3JlZW46XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIgd2luZG93RGlkRXhwb3NlOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyIHdpbmRvd0RpZENsb3NlOl0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBkZWFsbG9jXSk6CisgICAgICAgICgt
W1dlYlZpZXcgX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6V2ViQ29yZTo6XSk6IENhbGxlZCBmcm9t
IHRoZSBjaHJvbWUgY2xpZW50LgorICAgICAgICAoLVtXZWJWaWV3IF9leGl0RnVsbHNjcmVlbl0p
OiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3RGF0YS5tbToKKyAgICAgICAgKC1bV2ViVmlld1ByaXZhdGUgZGVhbGxvY10p
OiBNYWtlIHN1cmUgdGhlIGZzIG9iamVjdCBpcyBnb25lLgorICAgICAgICAoLVtXZWJWaWV3UHJp
dmF0ZSBmaW5hbGl6ZV0pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5h
bC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm06IEFkZGVkLiBVc2VkIGR1cmluZyBm
dWxsc2NyZWVuIHRyYW5zaXRpb24uCisgICAgICAgIChXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlv
bkZyb21EdXJhdGlvbik6CisgICAgICAgIChzY2FsZWRSZWN0KToKKyAgICAgICAgKHNxdWFyZWRE
aXN0YW5jZSk6CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGluaXRdKToKKyAg
ICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gaW5pdFdpdGhIaW50ZWREdXJhdGlvbjp3
aW5kb3c6aW5pdGFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1bV2ViV2luZG93U2Nh
bGVBbmltYXRpb24gZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJXaW5kb3dTY2FsZUFuaW1hdGlv
biBzZXREdXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gc2V0
V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBjdXJyZW50VmFs
dWVdKToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gY3VycmVudEZyYW1lXSk6
CisgICAgICAgICgtW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpd
KToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gc2V0U3ViQW5pbWF0aW9uOl0p
OgorICAgICAgICAoLVtXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhZGRpdGlvbmFsRHVyYXRpb25d
KToKKyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gc3RhcnRBbmltYXRpb25dKToK
KyAgICAgICAgKC1bV2ViV2luZG93U2NhbGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl0pOgorICAg
ICAgICAoLVtXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIGluaXRdKToKKyAgICAgICAgKC1bV2ViV2lu
ZG93RmFkZUFuaW1hdGlvbiBpbml0V2l0aER1cmF0aW9uOndpbmRvdzppbml0aWFsQWxwaGE6Zmlu
YWxBbHBoYTpdKToKKyAgICAgICAgKC1bV2ViV2luZG93RmFkZUFuaW1hdGlvbiBzZXREdXJhdGlv
bjpdKToKKyAgICAgICAgKC1bV2ViV2luZG93RmFkZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdKToK
KyAgICAgICAgKC1bV2ViV2luZG93RmFkZUFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6XSk6
CisgICAgICAgICgtW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gc2V0V2luZG93Ol0pOgorICAgICAg
ICAoLVtXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dKToKKwogMjAwOS0wNy0y
MCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmggYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCmluZGV4IGEyNTRlODguLjNmNTc4ODMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTQ2LDYgKzE0NiwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlVmlld1VwZGF0ZSgpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKik7CisgICAg
dmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOworCiAg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDVkZDI2NjguLjdh
ZDg3MWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
CkBAIC01NSw2ICs1NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVz
dFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU2NyZWVuLmg+CkBAIC03MDgsNiArNzA5LDI5IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZVZpZXdVcGRhdGUoKQogCiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykK
KworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3Qg
Tm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnZpZGVvVGFnKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNj
cmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgW21fd2ViVmlldyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhp
dEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKKyAgICBbbV93ZWJWaWV3IF9leGl0RnVsbHNjcmVlbl07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsgICAgCit9CisKKyNlbmRpZgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9j
YXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGUwYjEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0
IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisKK0Bwcm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyRGVsZWdhdGU7CitAY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlcjsKK0BjbGFzcyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworCitAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKK3sKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8gKHJldGFpbikK
KyAgICBpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+IF9kZWxlZ2F0ZTsg
Ly8gKGFzc2lnbikKKworICAgIE5TV2luZG93ICpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3c7
IC8vIChyZXRhaW4pCisgICAgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciog
X2h1ZENvbnRyb2xsZXI7IC8vIChyZXRhaW4pCisKKyAgICBXZWJXaW5kb3dGYWRlQW5pbWF0aW9u
ICpfZmFkZUFuaW1hdGlvbjsgLy8gKHJldGFpbikKKworICAgIEJPT0wgX2lzRW5kaW5nRnVsbHNj
cmVlbjsKKyAgICBCT09MIF9pc1dpbmRvd0xvYWRlZDsKKworfQorCistIChpZDxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0
ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKwor
LSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudDsKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKwor
LSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuKilzY3JlZW47CistICh2b2lkKWV4aXRG
dWxsc2NyZWVuOworCitAZW5kCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjJlZDY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDM4MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPFFUS2l0L1FUS2l0Lmg+CisjaW1w
b3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8SElUb29sYm94L0hJVG9vbGJveC5o
PgorCisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExp
bmtpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorCisjaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKyNp
bXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0
KQorCisKK1NPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRNb3ZpZVZpZXcpCisKKworQGludGVyZmFj
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdyA8TlNBbmltYXRpb25EZWxlZ2F0
ZT4KK3sKKyAgICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZDsKKyAgICBXZWJX
aW5kb3dTY2FsZUFuaW1hdGlvbiogX2Z1bGxzY3JlZW5BbmltYXRpb247IC8vIChyZXRhaW4pCit9
CistICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6KE5TUmVj
dCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uKilzdWJBbmltYXRpb24gY29u
dHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb247CitAZW5kCisKK0BpbnRlcmZhY2Ug
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoKSA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlckRlbGVnYXRlPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlcgorLSAodm9pZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfYmFj
a2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cpOworICAgIEFTU0VSVCghX2ZhZGVBbmltYXRpb24pOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcqKXdpbmRvd05pYk5hbWUKK3sK
KyAgICByZXR1cm4gQCJObyBuaWIiOyAvLyBSZXF1aXJlZCB0byBnZXQgLWxvYWRXaW5kb3cgdG8g
YmUgY2FsbGVkLgorfQorCistICh2b2lkKWxvYWRXaW5kb3cKK3sKKyAgICAvLyBEbyBub3QgZGVm
ZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1cmUgLXdpbmRvd051bWJlciBpcyBjcmVhdGVk
IChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmltYXRpb24pLgorICAgIE5TV2luZG93KiB3aW5k
b3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVj
dDpOU1plcm9SZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNC
YWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgW3NlbGYgc2V0V2luZG93OndpbmRv
d107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRMb2FkCit7
CisgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgUVRNb3ZpZVZpZXcq
IHZpZXcgPSBbW2dldFFUTW92aWVWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF07CisgICAgW3ZpZXcg
c2V0RmlsbENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbd2luZG93IHNldENvbnRl
bnRWaWV3OnZpZXddOworICAgIFt2aWV3IHNldENvbnRyb2xsZXJWaXNpYmxlOk5PXTsKKyAgICBb
dmlldyBzZXRQcmVzZXJ2ZXNBc3BlY3RSYXRpbzpZRVNdOworICAgIFt2aWV3IHNldE1vdmllOihR
VE1vdmllKilfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1vdmllKCldOworICAgIFt3aW5kb3cgc2V0
SGFzU2hhZG93OllFU107CisgICAgW3dpbmRvdyBzZXRMZXZlbDpOU1NjcmVlblNhdmVyV2luZG93
TGV2ZWwtMV07CisgICAgW3ZpZXcgcmVsZWFzZV07Cit9CisKKy0gKFdlYlZpZGVvRnVsbHNjcmVl
bldpbmRvdyopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2ViVmlkZW9GdWxsc2Ny
ZWVuV2luZG93Kilbc3VwZXIgd2luZG93XTsKK30KKworLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCopbWVkaWFFbGVtZW50OworeworICAgIHJldHVybiBfbWVkaWFFbGVtZW50LmdldCgpOwor
fQorCistICh2b2lkKXNldE1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCop
bWVkaWFFbGVtZW50OworeworICAgIF9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisgICAg
aWYgKFtzZWxmIGlzV2luZG93TG9hZGVkXSkgeworICAgICAgICBRVE1vdmllVmlldyogbW92aWVW
aWV3ID0gKFFUTW92aWVWaWV3KilbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107CisgICAgICAg
IFttb3ZpZVZpZXcgc2V0TW92aWU6KFFUTW92aWUqKV9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTW92
aWUoKV07CisgICAgfQorfQorCistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVs
ZWdhdGU+KWRlbGVnYXRlCit7CisgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKK30KKworLSAodm9pZClz
ZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxl
Z2F0ZTsKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZCljbGVhckZh
ZGVBbmltYXRpb24KK3sKKyAgICBbX2ZhZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAg
W19mYWRlQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworICAgIFtfZmFkZUFuaW1hdGlvbiBhdXRv
cmVsZWFzZV07CisgICAgX2ZhZGVBbmltYXRpb24gPSBuaWw7Cit9CisKKy0gKHZvaWQpd2luZG93
RGlkRXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworICAg
IFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKKyAgICBT
ZXRTeXN0ZW1VSU1vZGUoa1VJTW9kZU5vcm1hbCwgMCk7CisgICAgW19odWRDb250cm9sbGVyIHNl
dERlbGVnYXRlOm5pbF07CisgICAgW19odWRDb250cm9sbGVyIHJlbGVhc2VdOworICAgIF9odWRD
b250cm9sbGVyID0gbmlsOworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2Vd
OworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgcmVsZWFzZV07CisgICAgX2JhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOworICAgIAorICAgIFtzZWxmIGF1dG9yZWxlYXNl
XTsgIC8vIEZyb20gaW4gZXhpdEZ1bGxzY3JlZW4KK30KKworLSAodm9pZCl3aW5kb3dEaWRFbnRl
ckZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworCisgICAgQVNT
RVJUKCFfaHVkQ29udHJvbGxlcik7CisgICAgX2h1ZENvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgIF9odWRDb250cm9s
bGVyLmRlbGVnYXRlID0gc2VsZjsKKyAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsK
KyAgICBTZXRTeXN0ZW1VSU1vZGUoa1VJTW9kZUFsbFN1cHByZXNzZWQgLCAwKTsKK30KKworLSAo
TlNSZWN0KW1lZGlhRWxlbWVudFJlY3QKK3sKKyAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50
ZXJmYWNlCisKKy0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiopc2NyZWVuOworewor
ICAgIGlmICghc2NyZWVuKQorICAgICAgICBzY3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07
CisKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1Jl
Y3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKKworICAgIC8vIEtlZXAgYSBjb25zdHJhaW5l
ZCBhc3BlY3QgcmF0aW8gZm9yIHRoZSBkZXN0aW5hdGlvbiB3aW5kb3cKKyAgICBkb3VibGUgb3Jp
Z2luYWxSYXRpbyA9IGZyYW1lLnNpemUud2lkdGggLyBmcmFtZS5zaXplLmhlaWdodDsKKyAgICBk
b3VibGUgbmV3UmF0aW8gPSBlbmRGcmFtZS5zaXplLndpZHRoIC8gZW5kRnJhbWUuc2l6ZS5oZWln
aHQ7CisgICAgaWYobmV3UmF0aW8gPiBvcmlnaW5hbFJhdGlvKQorICAgIHsKKyAgICAgICAgZG91
YmxlIG5ld1dpZHRoID0gb3JpZ2luYWxSYXRpbyAqIGVuZEZyYW1lLnNpemUuaGVpZ2h0OworICAg
ICAgICBkb3VibGUgZGlmZiA9IGVuZEZyYW1lLnNpemUud2lkdGggLSBuZXdXaWR0aDsKKyAgICAg
ICAgZW5kRnJhbWUuc2l6ZS53aWR0aCA9IG5ld1dpZHRoOworICAgICAgICBlbmRGcmFtZS5vcmln
aW4ueCArPSBkaWZmIC8gMjsKKyAgICAgICAgCisgICAgfQorICAgIGVsc2UgeworICAgICAgICBk
b3VibGUgbmV3SGVpZ2h0ID0gZW5kRnJhbWUuc2l6ZS53aWR0aCAvIG9yaWdpbmFsUmF0aW87Cisg
ICAgICAgIGRvdWJsZSBkaWZmID0gZW5kRnJhbWUuc2l6ZS5oZWlnaHQgLSBuZXdIZWlnaHQ7Cisg
ICAgICAgIGVuZEZyYW1lLnNpemUuaGVpZ2h0ID0gbmV3SGVpZ2h0OworICAgICAgICBlbmRGcmFt
ZS5vcmlnaW4ueSArPSBkaWZmIC8gMjsKKyAgICB9ICAgIAorCisgICAgLy8gQ3JlYXRlIGEgYmxh
Y2sgd2luZG93IGlmIG5lZWRlZAorICAgIGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
KSB7CisgICAgICAgIF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IFtbTlNXaW5kb3cgYWxs
b2NdIGluaXRXaXRoQ29udGVudFJlY3Q6W3NjcmVlbiBmcmFtZV0gc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsK
KyAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRPcGFxdWU6WUVTXTsKKyAg
ICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05T
Q29sb3IgYmxhY2tDb2xvcl1dOworICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
IHNldExldmVsOltbc2VsZiB3aW5kb3ddIGxldmVsXV07CisgICAgICAgIFtfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgc2V0SGlkZXNPbkRlYWN0aXZhdGU6WUVTXTsKKyAgICAgICAgW19iYWNr
Z3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFt
ZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5Ok5PXTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUg
d2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUgcHJldmlvdXMgb25lIGlzbid0IG92
ZXIgeWV0CisgICAgQ0dGbG9hdCBpbml0aWFsQWxwaGEgPSAwOworICAgIGlmIChfZmFkZUFuaW1h
dGlvbikgeworICAgICAgICBbX2ZhZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgICAg
IGluaXRpYWxBbHBoYSA9IFtfZmFkZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdOworICAgICAgICBb
c2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworICAgIH0KKyAgICBfZmFkZUFuaW1hdGlvbiA9IFtb
V2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIgd2luZG93
Ol9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFscGhhIGZp
bmFsQWxwaGE6MV07CisKKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21S
ZWN0OmZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9u
IGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbildOwor
CisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBvcmRlcldpbmRvdzpOU1dpbmRvd0Jl
bG93IHJlbGF0aXZlVG86W1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIHdpbmRvd051bWJlcl1dOwor
fQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVuCit7CisgICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3Jl
ZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOworICAg
IFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CisKKyAgICBDR0Zsb2F0IGluaXRpYWxBbHBo
YSA9IDE7CisgICAgaWYgKF9mYWRlQW5pbWF0aW9uKSB7CisgICAgICAgIGluaXRpYWxBbHBoYSA9
IFtfZmFkZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdOworICAgICAgICBbc2VsZiBjbGVhckZhZGVB
bmltYXRpb25dOworICAgIH0gICAgCisgICAgX2ZhZGVBbmltYXRpb24gPSBfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgPyBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gYWxsb2NdIGluaXRXaXRo
RHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgaW5pdGlhbEFs
cGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOjBdIDogbmlsOworCisgICAgW3NlbGYgcmV0YWlu
XTsgLy8gQmFsYW5jZWQgaW4gd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KKyAgICBbW3NlbGYgZnVs
bHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0Oltbc2VsZiB3aW5kb3ddIGZyYW1lXSB0b1Jl
Y3Q6W3NlbGYgbWVkaWFFbGVtZW50UmVjdF0gd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlv
biBjb250cm9sbGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbildOwor
fQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdpbmRvdyBjYWxsYmFjaworCistICh2
b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbgoreworICAgIF9tZWRpYUVsZW1lbnQtPmV4aXRGdWxs
c2NyZWVuKCk7Cit9CisKKy0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVy
IGZhZGVXaW5kb3dJbl07Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxz
Y3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRS
ZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVU
eXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShh
U3R5bGUpOworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRlbnRSZWN0OmNvbnRl
bnRSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6YnVmZmVyaW5n
VHlwZSBkZWZlcjpmbGFnXSkpIHsKKyAgICAgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICAg
ICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICAg
ICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKKyAgICAgICAgW3NlbGYgc2V0QWNj
ZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgor
eworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAg
ICByZXR1cm4gWUVTOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsKK30KKworLSAodm9pZCljYW5jZWxPcGVy
YXRpb246KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIFtbc2Vs
ZiB3aW5kb3dDb250cm9sbGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOworfQorCistICh2b2lk
KWFuaW1hdGVkUmVzaXplRGlkRW5kCit7CisgICAgLy8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxl
ci4KKyAgICBpZiAoX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCkKKyAgICAgICAgb2Jq
Y19tc2dTZW5kKFtzZWxmIHdpbmRvd0NvbnRyb2xsZXJdLCBfY29udHJvbGxlckFjdGlvbk9uQW5p
bWF0aW9uRW5kKTsKKyAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsK
K30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1l
IHJlY3RhbmdsZQorLy8gV2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0
aGF0IHdlJ2xsIGNvcnJlY3RseQorLy8gaW50ZXJydXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwg
YW5kIHF1ZXVlIHRoZSBuZXh0IG9uZS4KKy8vCistICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNS
ZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6KE5TUmVjdCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5T
QW5pbWF0aW9uICopc3ViQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVy
QWN0aW9uCit7CisgICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xs
ZXJBY3Rpb247CisKKyAgICBCT09MIHdhc0FuaW1hdGluZyA9IE5POworICAgIGlmIChfZnVsbHNj
cmVlbkFuaW1hdGlvbikgeworICAgICAgICB3YXNBbmltYXRpbmcgPSBZRVM7CisKKyAgICAgICAg
Ly8gSW50ZXJydXB0IGFueSBydW5uaW5nIGFuaW1hdGlvbi4KKyAgICAgICAgW19mdWxsc2NyZWVu
QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQg
cmVjdCB0byBlbnN1cmUgYSBzbW9vdGggdHJhbnNpdGlvbi4KKyAgICAgICAgc3RhcnRSZWN0ID0g
W19mdWxsc2NyZWVuQW5pbWF0aW9uIGN1cnJlbnRGcmFtZV07CisgICAgICAgIFtfZnVsbHNjcmVl
bkFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICAgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7
CisgICAgfQorICAgIAorICAgIGlmIChOU0lzRW1wdHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0Vt
cHR5UmVjdChlbmRSZWN0KSkgeworICAgICAgICAvLyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRp
b24uCisgICAgICAgIFtzdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjEuMF07CisgICAg
ICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGluayB0byB0aGUgd2luZG93LgorICAgICAgICBb
c3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIFtzZWxmIHNldEZyYW1lOmVu
ZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtzZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNl
bGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1hdGluZykgeworICAgICAgICAvLyBXZSdsbCBk
b3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhlIGFuaW1hdGlvbiBiYXNlZCBvbiB0aGUgaGln
aGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBCT09MIGhpZ2hlclJlc29sdXRpb25Jc0VuZFJl
Y3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVuZFJlY3Quc2l6ZS53aWR0aCAmJiBzdGFydFJl
Y3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUuaGVpZ2h0OworICAgICAgICBbc2VsZiBzZXRG
cmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID8gZW5kUmVjdCA6IHN0YXJ0UmVjdCBkaXNw
bGF5Ok5PXTsgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5p
bWF0aW9uKTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IFtbV2ViV2luZG93U2NhbGVBbmlt
YXRpb24gYWxsb2NdIGluaXRXaXRoSGludGVkRHVyYXRpb246MC4yIHdpbmRvdzpzZWxmIGluaXRh
bEZyYW1lOnN0YXJ0UmVjdCBmaW5hbEZyYW1lOmVuZFJlY3RdOworICAgIFtfZnVsbHNjcmVlbkFu
aW1hdGlvbiBzZXRTdWJBbmltYXRpb246c3ViQW5pbWF0aW9uXTsKKyAgICBbX2Z1bGxzY3JlZW5B
bmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZSBh
bmltYXRpb24gaGFzIHNjYWxlZCB0aGUgd2luZG93IGJlZm9yZSBzaG93aW5nIGl0LgorICAgIFtf
ZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6MF07CisgICAgW3NlbGYgbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07CisKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3Rh
cnRBbmltYXRpb25dOworfQorCistICh2b2lkKWFuaW1hdGlvbkRpZEVuZDooTlNBbmltYXRpb24q
KWFuaW1hdGlvbgoreworICAgIGlmICghW05TVGhyZWFkIGlzTWFpblRocmVhZF0pIHsKKyAgICAg
ICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihhbmltYXRpb25E
aWRFbmQ6KSB3aXRoT2JqZWN0OmFuaW1hdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoYW5pbWF0aW9uICE9IF9mdWxsc2NyZWVuQW5pbWF0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgYW5pbWF0aW9uIGlzIG5vdCByZWFsbHkg
b3ZlciBhbmQgd2FzIGludGVycnVwdGVkCisgICAgLy8gRG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2
ZW50cy4KKyAgICBpZiAoW2FuaW1hdGlvbiBjdXJyZW50UHJvZ3Jlc3NdIDwgMS4wKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhbmltYXRpb24gKGFuZCBzdWJhbmltYXRp
b24pIGRvbid0IGtlZXAKKyAgICAvLyB0aGUgd2VhayByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdyBp
dmFyIHRoYXQgbWF5IGJlIGRlc3Ryb3llZCBmcm9tCisgICAgLy8gbm93IG9uLgorICAgIFtfZnVs
bHNjcmVlbkFuaW1hdGlvbiBzZXRXaW5kb3c6bmlsXTsKKworICAgIFtfZnVsbHNjcmVlbkFuaW1h
dGlvbiBhdXRvcmVsZWFzZV07CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7CisKKyAg
ICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZDoo
TlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIGZhZGVI
VURJbl07Cit9CitAZW5kCisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGVjMjlhCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmIEVOQUJMRShW
SURFTykKKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudC5oPgorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgeworICAgIGlkPFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOworICAgIE5TVGltZXIg
Kl90aW1lbGluZVVwZGF0ZVRpbWVyOworICAgIE5TVHJhY2tpbmdBcmVhICpfYXJlYTsKKyAgICBC
T09MIF9tb3VzZUlzSW5IVUQ7Cit9CistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKy0g
KHZvaWQpZmFkZVdpbmRvd0luOworLSAodm9pZClmYWRlV2luZG93T3V0OworLSAodm9pZCljbG9z
ZVdpbmRvdzsKK0BlbmQKKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CistICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVl
bjsKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK0BlbmQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJmZDVlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpAQCAtMCwwICsxLDQ1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbXBvcnQgPFFUS2l0L1FUS2l0Lmg+CisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKwor
QGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIChQcml2YXRl
KQorLSAodm9pZCl1cGRhdGVUaW1lOworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvdyA6IE5TV2luZG93CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3cKKy0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdClj
b250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2lu
Z1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICAodm9pZClh
U3R5bGU7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVu
dFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdU
eXBlIGRlZmVyOmZsYWddKSkKKyAgICB7CisgICAgICAgIFtzZWxmIHNldE9wYXF1ZTpOT107Cisg
ICAgICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Cisg
ICAgICAgIFtzZWxmIHNldExldmVsOk5TU2NyZWVuU2F2ZXJXaW5kb3dMZXZlbF07CisgICAgICAg
IFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgICAgIFtzZWxmIHNl
dElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCist
IChCT09MKWNhbkJlY29tZUtleVdpbmRvdworeworICAgIHJldHVybiBOTzsKK30KKworLSAodm9p
ZCljZW50ZXIKK3sKKyAgICBOU1JlY3QgaHVkRnJhbWUgPSBbc2VsZiBmcmFtZV07CisgICAgTlNS
ZWN0IHNjcmVlbkZyYW1lID0gW1tOU1NjcmVlbiBtYWluU2NyZWVuXSBmcmFtZV07CisgICAgW3Nl
bGYgc2V0RnJhbWVUb3BMZWZ0UG9pbnQ6TlNNYWtlUG9pbnQoKHNjcmVlbkZyYW1lLnNpemUud2lk
dGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIgKyBzY3JlZW5GcmFtZS5vcmlnaW4ueCwgaHVk
RnJhbWUuc2l6ZS5oZWlnaHQgKiAyICsgc2NyZWVuRnJhbWUub3JpZ2luLngpXTsKK30KKworQGVu
ZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgKCkg
PE5TV2luZG93RGVsZWdhdGU+CitAZW5kCisgCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFT
U0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOworICAgIEFTU0VSVCghX2FyZWEpOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQ8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdhdGU7Cit9Cist
ICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisK
Ky0gKHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZp
b3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1bnNj
aGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOworCisgICAgLy8gRmlyc3QsIHVwZGF0ZSBy
aWdodCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1cGRhdGUKKyAgICBbc2VsZiB1cGRhdGVU
aW1lXTsKKworICAgIF90aW1lbGluZVVwZGF0ZVRpbWVyID0gW1tOU1RpbWVyIHRpbWVyV2l0aFRp
bWVJbnRlcnZhbDowLjI1MCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodXBkYXRlVGlt
ZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOworICAgIFtbTlNSdW5Mb29wIGN1
cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRhdGVUaW1lciBmb3JNb2RlOk5TUnVu
TG9vcENvbW1vbk1vZGVzXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgZmlyZV07Cit9CisK
Ky0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRhdGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJl
dmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVu
c2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6bmlsXTsKKworICAgIGlmIChbX3RpbWVsaW5lVXBk
YXRlVGltZXIgaXNWYWxpZF0pCisgICAgICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlk
YXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisgICAgX3RpbWVsaW5l
VXBkYXRlVGltZXIgPSBuaWw7Cit9CisKKy0gKE5TU3RyaW5nICopd2luZG93TmliTmFtZQorewor
ICAgIHJldHVybiBAIk5vIE5pYiI7Cit9CisKKy0gKHZvaWQpZmFkZVdpbmRvd0luCit7CisgICAg
aWYoIVtbc2VsZiB3aW5kb3ddIGlzVmlzaWJsZV0pIHsKKyAgICAgICAgW1tzZWxmIHdpbmRvd10g
c2V0QWxwaGFWYWx1ZTowXTsKKyAgICB9CisgICAgW1tzZWxmIHdpbmRvd10gb3JkZXJGcm9udDpz
ZWxmXTsKKyAgICBbW1tzZWxmIHdpbmRvd10gYW5pbWF0b3JdIHNldEFscGhhVmFsdWU6MV07Cisg
ICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2
aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFk
ZVdpbmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91c2VJc0luSFVEKQorICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmpl
Y3Q6bmlsIGFmdGVyRGVsYXk6MS4wXTsKK30KKworLSAodm9pZClmYWRlV2luZG93T3V0Cit7Cisg
ICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAgIFtbW3NlbGYg
d2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTowXTsKKyAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSB3aXRoT2JqZWN0Om5pbCBhZnRl
ckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2luZG93Cit7CisgICAgW05TT2JqZWN0IGNh
bmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiB1bnNjaGVkdWxlVGlt
ZVVwZGF0ZV07CisgICAgW3NlbGYud2luZG93LmNvbnRlbnRWaWV3IHJlbW92ZVRyYWNraW5nQXJl
YTpfYXJlYV07CisgICAgW19hcmVhIHJlbGVhc2VdOzsKKyAgICBfYXJlYSA9IG5pbDsKKyAgICBb
W3NlbGYgd2luZG93XSBjbG9zZV07CisgICAgW3NlbGYgc2V0V2luZG93Om5pbF07Cit9CisKK3N0
YXRpYyBOU0NvbnRyb2wgKmNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKGludCBj
b250cm9sVHlwZSwgQ0dSZWN0IGZyYW1lKQoreworICAgIE5TQ29udHJvbCAqY29udHJvbCA9IFdL
Q3JlYXRlTWVkaWFVSUNvbnRyb2woY29udHJvbFR5cGUpOworICAgIFtjb250cm9sIHNldEZyYW1l
Ok5TUmVjdEZyb21DR1JlY3QoZnJhbWUpXTsKKyAgICByZXR1cm4gY29udHJvbDsKK30KKworc3Rh
dGljIE5TVGV4dEZpZWxkICpjcmVhdGVUaW1lVGV4dEZpZWxkKENHUmVjdCBmcmFtZSkKK3sKKyAg
ICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0gW1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhG
cmFtZTpmcmFtZV07CisgICAgW3RleHRGaWVsZCBzZXRUZXh0Q29sb3I6W05TQ29sb3Igd2hpdGVD
b2xvcl1dOworICAgIFt0ZXh0RmllbGQgc2V0Qm9yZGVyZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQg
c2V0Rm9udDpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTBdXTsKKyAgICBbdGV4dEZpZWxkIHNl
dERyYXdzQmFja2dyb3VuZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKKyAg
ICBbdGV4dEZpZWxkIHNldEVkaXRhYmxlOk5PXTsKKyAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFi
bGU6Tk9dOworICAgIHJldHVybiB0ZXh0RmllbGQ7Cit9CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0
IHdpbmRvd0hlaWdodCA9IDU5Oworc3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93V2lkdGggPSA0
Mzg7CisKKy0gKHZvaWQpbG9hZFdpbmRvdworeworICAgIE5TV2luZG93KiB3aW5kb3cgPSBbW1dl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU01h
a2VSZWN0KDAsIDAsIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQpIHN0eWxlTWFzazpOU0JvcmRl
cmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107
CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6d2lu
ZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQK
K3sKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luID0gOTsKKyAgICBzdGF0aWMgY29u
c3QgQ0dGbG9hdCBrTWFyZ2luVG9wID0gOTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQnV0
dG9uU2l6ZSA9IDI1OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGtCdXR0b25NaW5pU2l6ZSA9
IDE2OworCisgICAgTlNXaW5kb3cgKiB3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIE5TQXNz
ZXJ0KHdpbmRvdywgQCJObyB3aW5kb3cgd2FzIGNyZWF0ZWQiKTsKKworICAgIFt3aW5kb3cgc2V0
TW92YWJsZUJ5V2luZG93QmFja2dyb3VuZDpZRVNdOworCisgICAgTlNWaWV3ICogYmFja2dyb3Vu
ZCA9IFdLQ3JlYXRlTWVkaWFVSUJhY2tncm91bmRWaWV3KCk7CisgICAgW3dpbmRvdyBzZXRDb250
ZW50VmlldzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJlYSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2Nd
IGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6TlNUcmFja2luZ01vdXNl
RW50ZXJlZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93bmVyOnNlbGYgdXNlcklu
Zm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6X2FyZWFdOworICAgIFti
YWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqIGNvbnRlbnRWaWV3ID0gW1tz
ZWxmIHdpbmRvd10gY29udGVudFZpZXddOworCisgICAgQ0dGbG9hdCB0b3AgPSB3aW5kb3dIZWln
aHQgLSBrTWFyZ2luVG9wOworICAgIENHRmxvYXQgY2VudGVyID0gKHdpbmRvd1dpZHRoIC0ga0J1
dHRvblNpemUpIC8gMjsKKyAgICBOU0NvbnRyb2wgKnBsYXlCdXR0b24gPSBjcmVhdGVDb250cm9s
V2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sUGxheVBhdXNlQnV0dG9uLCBD
R1JlY3RNYWtlKGNlbnRlciwgdG9wIC0ga0J1dHRvblNpemUsIGtCdXR0b25TaXplLCBrQnV0dG9u
U2l6ZSkpOworICAgIFtwbGF5QnV0dG9uIGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRo
S2V5UGF0aDpAInBsYXlpbmciIG9wdGlvbnM6bmlsXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vi
dmlldzpwbGF5QnV0dG9uXTsKKyAgICBbcGxheUJ1dHRvbiByZWxlYXNlXTsKKworICAgIENHRmxv
YXQgbGVmdE9mQ2VudGVyID0gKHdpbmRvd1dpZHRoIC0ga0J1dHRvblNpemUgKiAzIC0ga0J1dHRv
blNpemUgLSBrQnV0dG9uU2l6ZSkgLyAyOworICAgIE5TQ29udHJvbCAqcmV3aW5kQnV0dG9uID0g
Y3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFJld2lu
ZEJ1dHRvbiwgQ0dSZWN0TWFrZShsZWZ0T2ZDZW50ZXIsIHRvcCAtIGtCdXR0b25TaXplLCBrQnV0
dG9uU2l6ZSwga0J1dHRvblNpemUpKTsKKyAgICBbcmV3aW5kQnV0dG9uIHNldEFjdGlvbjpAc2Vs
ZWN0b3IocmV3aW5kOildOworICAgIFtyZXdpbmRCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnJld2luZEJ1dHRvbl07CisgICAgW3Jld2luZEJ1dHRv
biByZWxlYXNlXTsKKworICAgIENHRmxvYXQgcmlnaHRPZkNlbnRlciA9ICh3aW5kb3dXaWR0aCAr
IGtCdXR0b25TaXplICogMykgLyAyOworICAgIE5TQ29udHJvbCAqZmFzdEZvcndhcmRCdXR0b24g
PSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sRmFz
dEZvcndhcmRCdXR0b24sIENHUmVjdE1ha2UocmlnaHRPZkNlbnRlciwgdG9wIC0ga0J1dHRvblNp
emUsIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSkpOworICAgIFtyZXdpbmRCdXR0b24gc2V0QWN0
aW9uOkBzZWxlY3RvcihmYXN0Rm9yd2FyZDopXTsKKyAgICBbcmV3aW5kQnV0dG9uIHNldFRhcmdl
dDpzZWxmXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpmYXN0Rm9yd2FyZEJ1dHRvbl07
CisgICAgW2Zhc3RGb3J3YXJkQnV0dG9uIHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCBjbG9zZVRv
UmlnaHQgPSB3aW5kb3dXaWR0aCAtIDIgKiBrTWFyZ2luIC0ga0J1dHRvbk1pbmlTaXplOworICAg
IE5TQ29udHJvbCAqZXhpdEZ1bGxzY3JlZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlh
VUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sRXhpdEZ1bGxzY3JlZW5CdXR0b24sIENHUmVj
dE1ha2UoY2xvc2VUb1JpZ2h0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNp
emUgLyAyLCBrQnV0dG9uTWluaVNpemUsIGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtleGl0RnVs
bHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKGV4aXRGdWxsc2NyZWVuOildOworICAg
IFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3
IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0b25dOworICAgIFtleGl0RnVsbHNjcmVlbkJ1
dHRvbiByZWxlYXNlXTsKKyAgICAKKyAgICBDR0Zsb2F0IGxlZnQgPSBrTWFyZ2luOworICAgIE5T
Q29udHJvbCAqdm9sdW1lRG93bkJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRy
b2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVEb3duQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnQs
IHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5p
U2l6ZSwga0J1dHRvbk1pbmlTaXplKSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9s
dW1lRG93bkJ1dHRvbl07CisgICAgW3ZvbHVtZURvd25CdXR0b24gcmVsZWFzZV07CisKKyAgICBz
dGF0aWMgY29uc3QgaW50IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7CisKKyAgICBsZWZ0ID0ga01h
cmdpbiArIGtCdXR0b25NaW5pU2l6ZTsKKyAgICBOU0NvbnRyb2wgKnZvbHVtZVNsaWRlciA9IGNy
ZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xTbGlkZXIs
IENHUmVjdE1ha2UobGVmdCwgdG9wIC0ga0J1dHRvblNpemUgLyAyIC0ga0J1dHRvbk1pbmlTaXpl
IC8gMiwgdm9sdW1lU2xpZGVyV2lkdGgsIGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtjb250ZW50
VmlldyBhZGRTdWJ2aWV3OnZvbHVtZVNsaWRlcl07CisgICAgW3ZvbHVtZVNsaWRlciBiaW5kOkAi
bWF4VmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJtYXhWb2x1bWUiIG9wdGlvbnM6
bmlsXTsKKyAgICBbdm9sdW1lU2xpZGVyIGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRo
S2V5UGF0aDpAInZvbHVtZSIgb3B0aW9uczpuaWxdOworICAgIFt2b2x1bWVTbGlkZXIgcmVsZWFz
ZV07CisKKyAgICBsZWZ0ID0ga01hcmdpbiArIGtCdXR0b25NaW5pU2l6ZSArIHZvbHVtZVNsaWRl
cldpZHRoICsga0J1dHRvbk1pbmlTaXplIC8gMjsKKyAgICBOU0NvbnRyb2wgKmJ1dHRvbiA9IGNy
ZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVV
cEJ1dHRvbiwgQ0dSZWN0TWFrZShsZWZ0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9u
TWluaVNpemUgLyAyLCBrQnV0dG9uTWluaVNpemUsIGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtj
b250ZW50VmlldyBhZGRTdWJ2aWV3OmJ1dHRvbl07CisgICAgW2J1dHRvbiByZWxlYXNlXTsKKyAg
ICAKKyAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVUZXh0V2lkdGggPSA1MDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHNsaWRlckhlaWdodCA9IDEzOworICAgIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVy
TWFyZ2luRml4dXAgPSA0OworCisgICAgTlNDb250cm9sICpzbGlkZXIgPSBXS0NyZWF0ZU1lZGlh
VUlDb250cm9sKFdLTWVkaWFVSUNvbnRyb2xUaW1lbGluZSk7CisgICAgW3NsaWRlciBzZXRGcmFt
ZTpOU01ha2VSZWN0KGtNYXJnaW4gKyB0aW1lVGV4dFdpZHRoICsga01hcmdpbi8yLCBrTWFyZ2lu
IC0gc2xpZGVyTWFyZ2luRml4dXAsIHdpbmRvd1dpZHRoIC0gMiAqIChrTWFyZ2luIC0gc2xpZGVy
TWFyZ2luRml4dXApIC0ga01hcmdpbiAqIDIgLSAyICogdGltZVRleHRXaWR0aCwgc2xpZGVySGVp
Z2h0KV07CisgICAgW3NsaWRlciBiaW5kOkAidmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBh
dGg6QCJjdXJyZW50UVRUaW1lIiBvcHRpb25zOm5pbF07CisgICAgW3NsaWRlciBiaW5kOkAibWF4
VmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJkdXJhdGlvbiIgb3B0aW9uczpuaWxd
OworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnNsaWRlcl07CisgICAgW3NsaWRlciByZWxl
YXNlXTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZVRleHRIZWlnaHQgPSAxMTsKKworICAg
IE5TVGV4dEZpZWxkICplbGFwc2VkVGltZVRleHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFr
ZVJlY3Qoa01hcmdpbiwga01hcmdpbiwgdGltZVRleHRXaWR0aCwgdGltZVRleHRIZWlnaHQpKTsK
KyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzplbGFwc2VkVGltZVRleHRdOworICAgIFtlbGFw
c2VkVGltZVRleHQgYmluZDpAInZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAiZWxh
cHNlZFRpbWVUZXh0IiBvcHRpb25zOm5pbF07CisgICAgW2VsYXBzZWRUaW1lVGV4dCByZWxlYXNl
XTsKKworICAgIE5TVGV4dEZpZWxkICpyZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0
RmllbGQoTlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAtIGtNYXJnaW4gLSB0aW1lVGV4dFdpZHRoLCBr
TWFyZ2luLCB0aW1lVGV4dFdpZHRoLCB0aW1lVGV4dEhlaWdodCkpOworICAgIFtjb250ZW50Vmll
dyBhZGRTdWJ2aWV3OnJlbWFpbmluZ1RpbWVUZXh0XTsKKyAgICBbcmVtYWluaW5nVGltZVRleHQg
YmluZDpAInZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAicmVtYWluaW5nVGltZVRl
eHQiIG9wdGlvbnM6bmlsXTsKKyAgICBbcmVtYWluaW5nVGltZVRleHQgcmVsZWFzZV07CisgICAg
CisgICAgW3dpbmRvdyBjZW50ZXJdOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKy8qCisgKiAgQmluZGluZ3MKKyAqCisgKi8KKworLSAodm9pZCl1cGRhdGVWb2x1bWUKK3sK
KyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ2b2x1bWUiXTsKKyAgICBbc2VsZiBk
aWRDaGFuZ2VWYWx1ZUZvcktleTpAInZvbHVtZSJdOworfQorCistICh2b2lkKXVwZGF0ZVRpbWUK
K3sKKyAgICBbc2VsZiB1cGRhdGVWb2x1bWVdOworCisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVl
Rm9yS2V5OkAiY3VycmVudFFUVGltZSJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5
OkAiY3VycmVudFFUVGltZSJdOworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAImR1
cmF0aW9uIl07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJkdXJhdGlvbiJdOwor
ICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInJlbWFpbmluZ1RpbWVUZXh0Il07Cisg
ICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJyZW1haW5pbmdUaW1lVGV4dCJdOworICAg
IFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAImVsYXBzZWRUaW1lVGV4dCJdOworICAgIFtz
ZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAiZWxhcHNlZFRpbWVUZXh0Il07Cit9CisKKy0gKFFU
VGltZSljdXJyZW50UVRUaW1lCit7CisgICAgUVRUaW1lIHJldDsKKyAgICByZXQudGltZVZhbHVl
ID0gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5j
dXJyZW50VGltZSgpICogMzAgOiAwOworICAgIHJldC50aW1lU2NhbGUgPSAzMDsKKyAgICByZXR1
cm4gcmV0OworfQorCistICh2b2lkKXNldEN1cnJlbnRRVFRpbWU6KFFUVGltZSljdXJyZW50UVRU
aW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVy
bjsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGU7CisgICAgW19kZWxlZ2F0ZSBtZWRpYUVs
ZW1lbnRdLT5zZXRDdXJyZW50VGltZSgoZG91YmxlKWN1cnJlbnRRVFRpbWUudGltZVZhbHVlIC8g
KGRvdWJsZSljdXJyZW50UVRUaW1lLnRpbWVTY2FsZSwgZSk7Cit9CisKKy0gKGRvdWJsZSlkdXJh
dGlvbgoreworICAgIHJldHVybiBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0gPyBbX2RlbGVnYXRl
IG1lZGlhRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAwOworfQorCistIChkb3VibGUpbWF4Vm9sdW1l
Cit7CisgICAgLy8gU2V0IHRoZSB2b2x1bWUgc2xpZGVyIHJlc29sdXRpb24KKyAgICByZXR1cm4g
MTAwOworfQorCistIChkb3VibGUpdm9sdW1lCit7CisgICAgcmV0dXJuIFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+dm9sdW1lKCkgKiBbc2VsZiBt
YXhWb2x1bWVdIDogMDsKK30KKworLSAodm9pZClzZXRWb2x1bWU6KGRvdWJsZSl2b2x1bWUKK3sK
KyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZTsKKyAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0t
PnNldFZvbHVtZSh2b2x1bWUgLyBbc2VsZiBtYXhWb2x1bWVdLCBlKTsKK30KKworCistIChCT09M
KXBsYXlpbmcKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jYW5Q
bGF5KCk7Cit9CisKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCit7CisgICAgaWYg
KCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmKHBs
YXlpbmcpCisgICAgICAgIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+cGxheSgpOworICAgIGVs
c2UKKyAgICAgICAgW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5wYXVzZSgpOworfQorCitzdGF0
aWMgTlNTdHJpbmcgKiB0aW1lVG9TdHJpbmcoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKCFpc2Zp
bml0ZSh0aW1lKSkKKyAgICAgICAgdGltZSA9IDA7CisgICAgaW50IHNlY29uZHMgPSAoaW50KWZh
YnNmKHRpbWUpOyAKKyAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOworICAgIGlu
dCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2MDsKKyAgICBzZWNvbmRzICU9IDYwOworICAg
IGlmIChob3VycykgeworICAgICAgICBpZiAoaG91cnMgPiA5KQorICAgICAgICAgICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlMDJkOiUwMmQ6JTAyZCIsICh0aW1lIDwg
MCA/ICItIiA6ICIiKSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyUwMWQ6JTAy
ZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBob3VycywgbWludXRlcywgc2Vjb25kc107
CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJXMlMDJkOiUwMmQiLCAodGltZSA8IDAgPyAiLSIgOiAiIiksIG1pbnV0ZXMsIHNlY29u
ZHNdOworICAgIAorfQorCitzdGF0aWMgTlNTdHJpbmcgKiBzdHJpbmdUb1RpbWVUZXh0QXR0cmli
dXRlZChOU1N0cmluZyogc3RyaW5nLCBOU1RleHRBbGlnbm1lbnQgYWxpZ24pCit7CisgICAgTlNT
aGFkb3cqIGJsYWNrU2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07CisgICAgW2JsYWNr
U2hhZG93IHNldFNoYWRvd0NvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKKyAgICBbYmxhY2tT
aGFkb3cgc2V0U2hhZG93Qmx1clJhZGl1czowXTsKKyAgICBbYmxhY2tTaGFkb3cgc2V0U2hhZG93
T2Zmc2V0Ok5TTWFrZVNpemUoMCwgLTEpXTsKKyAgICBOU011dGFibGVQYXJhZ3JhcGhTdHlsZSAq
IHN0eWxlID0gW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBhbGxvY10gaW5pdF07CisgICAgW3N0
eWxlIHNldEFsaWdubWVudDphbGlnbl07CisgICAgTlNEaWN0aW9uYXJ5ICogZGljdCA9IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpibGFja1NoYWRvdywgTlNTaGFk
b3dBdHRyaWJ1dGVOYW1lLCBzdHlsZSwgTlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUsIG5p
bF07CisgICAgW3N0eWxlIHJlbGVhc2VdOworCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICogYXR0
clN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJp
bmcgYXR0cmlidXRlczpkaWN0XTsKKyAgICByZXR1cm4gW2F0dHJTdHJpbmcgYXV0b3JlbGVhc2Vd
OyAgICAKK30KKworLSAoTlNTdHJpbmcgKilyZW1haW5pbmdUaW1lVGV4dAoreworICAgIGlmICgh
W19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gQCIiOworCisgICAgLy8g
TmVnYXRpdmUgbnVtYmVyCisgICAgcmV0dXJuIHN0cmluZ1RvVGltZVRleHRBdHRyaWJ1dGVkKHRp
bWVUb1N0cmluZyhbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgLSBbX2Rl
bGVnYXRlIG1lZGlhRWxlbWVudF0tPmR1cmF0aW9uKCkpLCBOU0xlZnRUZXh0QWxpZ25tZW50KTsK
K30KKworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQKK3sKKyAgICBpZiAoIVtfZGVsZWdh
dGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVybiBzdHJp
bmdUb1RpbWVUZXh0QXR0cmlidXRlZCh0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSBtZWRpYUVsZW1l
bnRdLT5jdXJyZW50VGltZSgpKSwgTlNSaWdodFRleHRBbGlnbm1lbnQpOworfQorCisvKgorICog
IFRyYWNraW5nIGFyZWEgY2FsbGJhY2tzCisgKgorICovCisKKy0gKHZvaWQpbW91c2VFbnRlcmVk
OihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBi
ZSBoaWRkZW4gZnJvbSBub3cKKyAgICBfbW91c2VJc0luSFVEID0gWUVTOworICAgIFtzZWxmIGZh
ZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVu
dAoreworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsKKyAgICBbc2VsZiBmYWRlV2luZG93SW5dOwor
fQorCisvKgorICogIEludGVyZmFjZSBjYWxsYmFja3MKKyAqCisgKi8KKworLSAodm9pZClleGl0
RnVsbHNjcmVlbjooaWQpc2VuZGVyCit7CisgICAgW19kZWxlZ2F0ZSByZXF1ZXN0RXhpdEZ1bGxz
Y3JlZW5dOyAKK30KKworLyoKKyAqICBXaW5kb3cgY2FsbGJhY2sKKyAqCisgKi8KKworLSAodm9p
ZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAg
W3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRDbG9zZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiB1bnNjaGVkdWxlVGlt
ZVVwZGF0ZV07Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDJl
YWUyODYuLmNmYjhiZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC05Myw2ICs5Myw3IEBACiAj
aW1wb3J0ICJXZWJUZXh0SXRlcmF0b3IuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNp
bXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlNldC5oPgogI2ltcG9y
dCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAgLTI0NzUsNyArMjQ3Niw3IEBAIHN0YXRpYyBib29sIG5l
ZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXJvdW5kKCkKICAgICAKICAgICBpZiAoW3NlbGYgX25l
ZWRzRnJhbWVMb2FkRGVsZWdhdGVSZXRhaW5RdWlya10pCiAgICAgICAgIFtfcHJpdmF0ZS0+ZnJh
bWVMb2FkRGVsZWdhdGUgcmVsZWFzZV07Ci0gICAgICAgIAorCiAgICAgW19wcml2YXRlIHJlbGVh
c2VdOwogICAgIC8vIFtzdXBlciBkZWFsbG9jXSBjYW4gZW5kIHVwIGRpc3BhdGNoaW5nIGFnYWlu
c3QgX3ByaXZhdGUgKDM0NjYwODIpCiAgICAgX3ByaXZhdGUgPSBuaWw7CkBAIC01NDUyLDYgKzU0
NTMsNTYgQEAgc3RhdGljIHZvaWQgdmlld1VwZGF0ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENG
UnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BBY3QKIAogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
VklERU8pCisKKy0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUq
KW5vZGUKK3sKKyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnZpZGVvVGFnKSk7CisgICAgSFRNTE1lZGlhRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+IChub2RlKTsKKworICAgIGlmICghX3ByaXZhdGUtPmZ1
bGxzY3JlZW5Db250cm9sbGVyKSB7CisgICAgICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJv
bGxlciA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbGxvY10gaW5pdF07CisgICAg
ICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVv
RWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJG
dWxsc2NyZWVuOltbc2VsZiB3aW5kb3ddIHNjcmVlbl1dOyAgICAgICAgCisgICAgfQorICAgIGVs
c2UKKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1l
bnQ6dmlkZW9FbGVtZW50XTsKK30KKworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBb
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGV4aXRGdWxsc2NyZWVuXTsKKyAgICBbX3By
aXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciA9IG5pbDsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklERU8p
CisKKy0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGUK
K3sKKyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZpZGVv
VGFnKSk7CisgICAgSFRNTE1lZGlhRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTE1lZGlhRWxlbWVudCo+IChub2RlKTsKKworICAgIGlmICghX3ByaXZhdGUtPmZ1bGxzY3Jl
ZW5Db250cm9sbGVyKSB7CisgICAgICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciA9
IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbGxvY10gaW5pdF07CisgICAgICAgIFtf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVu
dF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2Ny
ZWVuOltbc2VsZiB3aW5kb3ddIHNjcmVlbl1dOyAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAg
ICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlk
ZW9FbGVtZW50XTsKK30KKworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbX3ByaXZh
dGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGV4aXRGdWxsc2NyZWVuXTsKKyAgICBbX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyIHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5mdWxsc2NyZWVu
Q29udHJvbGxlciA9IG5pbDsKK30KKworI2VuZGlmCisKIEBlbmQKIAogI2lmZGVmIEJVSUxESU5H
X09OX0xFT1BBUkQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5o
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKaW5kZXggYjA0M2YxZS4uNTI2Nzc1
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKQEAgLTQzLDYgKzQzLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogQGNsYXNzIFdlYlByZWZlcmVuY2VzOwogQGNsYXNzIFdlYlRleHRDb21wbGV0
aW9uQ29udHJvbGxlcjsKIEBwcm90b2NvbCBXZWJGb3JtRGVsZWdhdGU7CisjaWYgRU5BQkxFKFZJ
REVPKQorQGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXI7CisjZW5kaWYKIAogZXh0
ZXJuIEJPT0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nOwogZXh0ZXJuIGludCBwbHVnaW5EYXRh
YmFzZUNsaWVudENvdW50OwpAQCAtMTU3LDUgKzE2MCw4IEBAIGV4dGVybiBpbnQgcGx1Z2luRGF0
YWJhc2VDbGllbnRDb3VudDsKICAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2ZW50Owog
CiAgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlTW91c2VvdmVyVGltZXI7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgKmZ1bGxzY3JlZW5Db250
cm9sbGVyOworI2VuZGlmCiB9CiBAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KaW5kZXgg
NDhlN2Y2Yy4uN2UwNzEwNSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQpAQCAtODAsNiAr
ODAsNyBAQCBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9IDA7CiAgICAgQVNTRVJUKGFw
cGxpY2F0aW9uSXNUZXJtaW5hdGluZyB8fCAhcGFnZSk7CiAgICAgQVNTRVJUKGFwcGxpY2F0aW9u
SXNUZXJtaW5hdGluZyB8fCAhcHJlZmVyZW5jZXMpOwogICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFz
dGVib2FyZCk7CisgICAgQVNTRVJUKCFmdWxsc2NyZWVuQ29udHJvbGxlcik7CiAKICAgICBbYXBw
bGljYXRpb25OYW1lRm9yVXNlckFnZW50IHJlbGVhc2VdOwogICAgIFtiYWNrZ3JvdW5kQ29sb3Ig
cmVsZWFzZV07CkBAIC05OSw2ICsxMDAsNyBAQCBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3Vu
dCA9IDA7CiB7CiAgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CiAgICAgQVNTRVJUKCFpbnNlcnRp
b25QYXN0ZWJvYXJkKTsKKyAgICBBU1NFUlQoIWZ1bGxzY3JlZW5Db250cm9sbGVyKTsKIAogICAg
IFtzdXBlciBmaW5hbGl6ZV07CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlld0ludGVybmFsLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKaW5k
ZXggNzE0ZGE4Ny4uOGI3YTI5NiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS1VSTDsKICAg
ICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgTm9kZTsK
IH0KICNlbmRpZgogCkBAIC0xNjgsNCArMTY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAt
ICh2b2lkKV9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
OwogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorLSAodm9pZClf
ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSopbm9kZTsKKy0gKHZvaWQpX2V4
aXRGdWxsc2NyZWVuOworI2VuZGlmCisKIEBlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJXaW5kb3dBbmltYXRpb24uaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJXaW5kb3dB
bmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJiZThlCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitA
aW50ZXJmYWNlIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uIDogTlNBbmltYXRpb24geworICAgIE5T
UmVjdCBfaW5pdGlhbEZyYW1lLCBfZmluYWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRv
dyAqX3dpbmRvdzsgLy8gKGFzc2lnbikKKyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsg
Ly8gKHJldGFpbikKKyAgICBOU1RpbWVJbnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChp
ZClpbml0V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFs
RnJhbWU6KE5TUmVjdClmaW5hbEZyYW1lOworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNB
bmltYXRpb24gKilhbmltYXRpb247CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJl
IHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRv
dyB3aGVuIGFwcHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdzsK
K0BlbmQKKworCitAaW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1hdGlv
biB7CisgICAgQ0dGbG9hdCBfaW5pdGlhbEFscGhhLCBfZmluYWxBbHBoYTsKKyAgICBOU1dpbmRv
dyAqX3dpbmRvdzsgLy8gKHJldGFpbikKKyAgICBCT09MIF9pc1N0b3BwZWQ7CisgICAgCit9Cist
IChpZClpbml0V2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5T
V2luZG93ICopd2luZG93IGluaXRpYWxBbHBoYTooQ0dGbG9hdClpbml0aWFsQWxwaGEgZmluYWxB
bHBoYTooQ0dGbG9hdClmaW5hbEFscGhhOworCistIChDR0Zsb2F0KWN1cnJlbnRBbHBoYTsKKwor
Ly8gQmUgc3VyZSB0byBjYWxsIHNldFdpbmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBf
d2luZG93IHdoZW4gYXBwcm9wcmlhdGUKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2lu
ZG93OworQGVuZApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1h
dGlvbi5tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTNkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwyMjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYktp
dFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGlj
IGNvbnN0IENHRmxvYXQgc2xvbW9GYWN0b3IgPSAxMC47CisKK3N0YXRpYyBOU1RpbWVJbnRlcnZh
bCBXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihOU1RpbWVJbnRlcnZhbCBk
dXJhdGlvbikKK3sKKyAgICByZXR1cm4gKFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlm
dEtleU1hc2spID8gZHVyYXRpb24gKiBzbG9tb0ZhY3RvciA6IGR1cmF0aW9uOyAgICAgICAgCit9
CisKK3N0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRpYWxGcmFtZSwgTlNSZWN0
IF9maW5hbEZyYW1lLCBkb3VibGUgZmFjdG9yKQoreworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9
IF9pbml0aWFsRnJhbWU7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnggKz0gKE5TTWluWChfZmlu
YWxGcmFtZSkgLSBOU01pblgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRS
ZWN0Lm9yaWdpbi55ICs9IChOU01pblkoX2ZpbmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0aWFsRnJh
bWUpKSAqIGZhY3RvcjsKKyAgICBjdXJyZW50UmVjdC5zaXplLndpZHRoICs9IChOU1dpZHRoKF9m
aW5hbEZyYW1lKSAtIE5TV2lkdGgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJl
bnRSZWN0LnNpemUuaGVpZ2h0ICs9IChOU0hlaWdodChfZmluYWxGcmFtZSkgLSBOU0hlaWdodChf
aW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgcmV0dXJuIGN1cnJlbnRSZWN0OworfQorCitz
dGF0aWMgQ0dGbG9hdCBzcXVhcmVkRGlzdGFuY2UoTlNQb2ludCBwb2ludDEsIE5TUG9pbnQgcG9p
bnQyKQoreworICAgIENHRmxvYXQgZGVsdGFYID0gcG9pbnQxLnggLSBwb2ludDIueDsKKyAgICBD
R0Zsb2F0IGRlbHRhWSA9IHBvaW50MS55IC0gcG9pbnQyLnk7CisgICAgcmV0dXJuIGRlbHRhWCAq
IGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRv
d1NjYWxlQW5pbWF0aW9uCistIChpZClpbml0Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGlu
aXRdKSkgeworICAgICAgICBbc2VsZiBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRp
b25Ob25ibG9ja2luZ1RocmVhZGVkXTsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwLl07
CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0
aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGlu
aXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZy
YW1lCit7CisgICAgaWYgKChzZWxmID0gW3NlbGYgaW5pdF0pKSB7CisgICAgICAgIF9oaW50ZWRE
dXJhdGlvbiA9IGR1cmF0aW9uOworICAgICAgICBfd2luZG93ID0gd2luZG93OworICAgICAgICBf
aW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOworICAgICAgICBfZmluYWxGcmFtZSA9IGZpbmFs
RnJhbWU7CisgICAgICAgIF9yZWFsRnJhbWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICB9CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpIGRlYWxsb2MKK3sKKyAgICBbX3dpbmRvdyByZWxl
YXNlXTsKKyAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7Cisg
ICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93
Cit7CisgICAgX3dpbmRvdyA9IHdpbmRvdzsKK30KKworLSAoZmxvYXQpY3VycmVudFZhbHVlCit7
CisgICAgcmV0dXJuIDAuNSAtIDAuNSAqIGNvcyhNX1BJICogKDEgLSBbc2VsZiBjdXJyZW50UHJv
Z3Jlc3NdKSk7Cit9CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2Nh
bGVkUmVjdChfZmluYWxGcmFtZSwgX2luaXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7
Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXBy
b2dyZXNzCit7CisgICAgaWYgKCFfd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBbc3Vw
ZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJyZW50UmVj
dCA9IFtzZWxmIGN1cnJlbnRGcmFtZV07CisgICAgV0tXaW5kb3dTZXRTY2FsZWRGcmFtZShfd2lu
ZG93LCBjdXJyZW50UmVjdCwgX3JlYWxGcmFtZSk7CisgICAgW19zdWJBbmltYXRpb24gc2V0Q3Vy
cmVudFByb2dyZXNzOnByb2dyZXNzXTsKK30KKworLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5T
QW5pbWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1h
dGlvbjsKKyAgICBfc3ViQW5pbWF0aW9uID0gW2FuaW1hdGlvbiByZXRhaW5dOworICAgIFtvbGRB
bmltYXRpb24gcmVsZWFzZV07Cit9CisKKy0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJh
dGlvbgoreworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IG1heEFkZGl0aW9uYWxEdXJhdGlvbiA9
IDEuMDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMTsKKyAg
ICAKKyAgICBDR0Zsb2F0IG1heERpc3QgPSBzcXVhcmVkRGlzdGFuY2UoX2luaXRpYWxGcmFtZS5v
cmlnaW4sIF9maW5hbEZyYW1lLm9yaWdpbik7CisgICAgQ0dGbG9hdCBkaXN0OworICAgIAorICAg
IGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUp
LCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUp
LCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYoZGlzdCA+IG1heERpc3QpCisgICAgICAg
IG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtl
UG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUpLCBOU01heFkoX2luaXRpYWxGcmFtZSkpLCBOU01h
a2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUpLCBOU01heFkoX2ZpbmFsRnJhbWUpKSk7CisgICAg
aWYoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRp
c3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJhbWUpLCBO
U01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJhbWUpLCBO
U01pblkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1h
eERpc3QgPSBkaXN0OworICAgIAorICAgIHJldHVybiBNSU4oc3FydChtYXhEaXN0KSAqIHNwZWVk
RmFjdG9yLCBtYXhBZGRpdGlvbmFsRHVyYXRpb24pOyAgICAKK30KKworLSAodm9pZClzdGFydEFu
aW1hdGlvbgoreworICAgIC8vIENvbXB1dGUgZXh0cmEgdGltZQorICAgIGlmIChfaGludGVkRHVy
YXRpb24pCisgICAgICAgIFtzZWxmIHNldER1cmF0aW9uOl9oaW50ZWREdXJhdGlvbiArIFtzZWxm
IGFkZGl0aW9uYWxEdXJhdGlvbl1dOworICAgIFtzdXBlciBzdGFydEFuaW1hdGlvbl07Cit9CisK
Ky0gKHZvaWQpc3RvcEFuaW1hdGlvbgoreworICAgIF93aW5kb3cgPSBuaWw7CisgICAgW3N1cGVy
IHN0b3BBbmltYXRpb25dOworICAgIFtfc3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworfQor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93RmFkZUFuaW1hdGlvbgorLSAoaWQpaW5p
dAoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKKyAgICAgICAgW3NlbGYgc2V0
QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07Cisg
ICAgICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MC5dOworICAgICAgICBbc2VsZiBzZXRBbmltYXRp
b25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgfQorICAgIHJldHVybiBzZWxmOwor
fQorCistIChpZClpbml0V2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5k
b3c6KE5TV2luZG93ICopd2luZG93IGluaXRpYWxBbHBoYTooQ0dGbG9hdClpbml0aWFsQWxwaGEg
ZmluYWxBbHBoYTooQ0dGbG9hdClmaW5hbEFscGhhCit7CisgICAgaWYgKChzZWxmID0gW3NlbGYg
aW5pdF0pKSB7CisgICAgICAgIFtzZWxmIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICAgICAg
X3dpbmRvdyA9IHdpbmRvdzsKKyAgICAgICAgX2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsK
KyAgICAgICAgX2ZpbmFsQWxwaGEgPSBmaW5hbEFscGhhOworICAgIH0KKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sK
KyAgICBbc3VwZXIgc2V0RHVyYXRpb246V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVy
YXRpb24oZHVyYXRpb24pXTsKK30KKworLSAoQ0dGbG9hdCljdXJyZW50QWxwaGEKK3sKKyAgICBy
ZXR1cm4gTUFYKDAuMCwgTUlOKDEuMCwgX2luaXRpYWxBbHBoYSArIFtzZWxmIGN1cnJlbnRWYWx1
ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOworfQorCistICh2b2lkKXNldEN1
cnJlbnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmIChf
aXNTdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoX3dpbmRvdyk7CisgICAg
V0tXaW5kb3dTZXRBbHBoYShfd2luZG93LCBbc2VsZiBjdXJyZW50QWxwaGFdKTsKKyAgICBbc3Vw
ZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKK30KKworLSAodm9pZClzZXRXaW5kb3c6
KE5TV2luZG93Kil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQorCistICh2b2lk
KXN0b3BBbmltYXRpb24KK3sKKyAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHdoZW4gd2UgYXJlIGEg
c3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxlIGFuaW1hdGlvbi4KKyAgICAvLyBJbiB0aGlzIGNhc2Ug
d2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5pbWF0ZWQgdGhyZWFkIG9mIHRoZSBwYXJlbnQKKyAgICAv
LyBhbmQgZXZlbiBhZnRlciBbc3VwZXIgc3RvcEFuaW1hdGlvbl0sIHRoZSBwYXJlbnQgbWlnaHQg
Y2FsbAorICAgIC8vIHNldEN1cnJyZW50UHJvZ3Jlc3MuCisgICAgX2lzU3RvcHBlZCA9IFlFUzsK
KworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVuZAor
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33898</attachid>
            <date>2009-07-31 13:22:16 -0700</date>
            <delta_ts>2009-07-31 15:02:27 -0700</delta_ts>
            <desc>Support Fullscreen for video element</desc>
            <filename>bug-26742-20090731132216.patch</filename>
            <type>text/plain</type>
            <size>70297</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCAyYzk0ZGYwLi5iY2RmZTM4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC03MzQsNiArNzM0LDEwIEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUExVR0lOX1BST1hZ
X0ZPUl9WSURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUExVCiAgICAgIFdFQkNPUkVf
RVhQT1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2Vi
Q29yZS5WaWRlb1Byb3h5LmV4cAogZW5kaWYKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9W
SURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfVklERU8pCisgICAgIFdFQkNPUkVfRVhQ
T1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2ViQ29y
ZS5WaWRlby5leHAKK2VuZGlmCisKIFdlYkNvcmUuZXhwIDogV2ViQ29yZS5iYXNlLmV4cCAkKFdF
QkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykKIAljYXQgJF4gPiAkQAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwIGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDA2MGY2Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApAQCAtMCwwICsxLDExIEBACitfX1pON1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ0cGxheUV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQ1cGF1c2VFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZ2b2x1bWVFdgorX19a
Tks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDdjYW5QbGF5RXYKK19fWk5LN1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb25FdgorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50
OXNldFZvbHVtZUVmUmkKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEwc2NyZWVuUmVj
dEV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTFjdXJyZW50VGltZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNwbGF0Zm9ybU1vdmllRXYKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDE0c2V0Q3VycmVudFRpbWVFZlJpCitfX1pON1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQxNGV4aXRGdWxsc2NyZWVuRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA4ZDM5NWI0Li4z
YjRlOGM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03MzIsNiArNzMyLDcgQEAgX19aTjdXZWJDb3JlOUhUTUxO
YW1lczdzcmNBdHRyRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczhmcmFtZVRhZ0UKIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGlucHV0VGFn
RQorX19aTjdXZWJDb3JlOUhUTUxOYW1lczh2aWRlb1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRUYWdFCiBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDY5MWQyZTcuLmE2MGRjNTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTMxLDYgKzU5MzEsNyBAQAogCQk2MzE4
OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRl
clN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVSZW5kZXJTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2M0YzNzFDRDEwMEU3OTAwMDBCQkE4
N0EgLyogV2ViQ29yZS5WaWRlby5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBh
dGggPSBXZWJDb3JlLlZpZGVvLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUwRkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGQkYyODBEOUFGMDQ3MDA4RkMyOTIgLyogU1ZH
SEtlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0hLZXJu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwMDAsNiArMTAwMDEs
NyBAQAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJz
LmV4cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9y
ZWlnbk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNv
cmUuVGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3Jl
LlZpZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5W
aWRlb1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCAyNTFlODVmLi5jYWZlODM2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgor
I2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTEwLDYgKzExMiw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChm
YWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNj
cmVlbihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1f
bmVlZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjM4LDYgKzI0MSwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1
bGVMb2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7Cisg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhU
TUxFbGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCkBAIC0xNjA4LDYgKzE2MTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK0ludFJlY3QgSFRNTE1l
ZGlhRWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVjdCgwLDAs
MCwwKTsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJl
cigpLT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAg
ICAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNjc4LDYgKzE2
OTUsMjYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQog
fQogI2VuZGlmCiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sK
KyAgICBBU1NFUlQoIW1faXNGdWxsc2NyZWVuKTsKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmVudGVyRnVsbHNjcmVl
bkZvck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSB0cnVlOworfQorCit2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9pc0Z1bGxz
Y3JlZW4pOworICAgIGlmIChkb2N1bWVudCgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworICAgIG1f
aXNGdWxsc2NyZWVuID0gZmFsc2U7Cit9CisKK3ZvaWQqIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRm
b3JtTW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllciA/IG1fcGxheWVyLT5wbGF0
Zm9ybU1vdmllKCkgOiAwOworfSAgICAgICAgCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKaW5kZXggMjdiNDhlYS4uNDE1YjU4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBA
IC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwpAQCAtNzIsNiAr
NzMsOCBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRl
b0VsZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH07CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2F2ZSgpIGNvbnN0Owor
ICAgIAorICAgIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdDsKIAogICAgIHZvaWQgc2NoZWR1
bGVMb2FkKCk7CiAgICAgCkBAIC0xNDAsNiArMTQzLDggQEAgcHVibGljOgogICAgIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKTsKICAgICB2b2lkIGVuZFNjcnViYmluZygpOwogCisgICAgSW50UmVjdCBz
Y3JlZW5SZWN0KCk7CisKICAgICBib29sIGNhblBsYXkoKSBjb25zdDsKIAogICAgIGZsb2F0IHBl
cmNlbnRMb2FkZWQoKSBjb25zdDsKQEAgLTE1Myw2ICsxNTgsOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiAhbV9w
bGF5ZXIgfHwgbV9wbGF5ZXItPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCk7IH0KKyAgICAKKyAg
ICB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAog
cHJvdGVjdGVkOgogICAgIGZsb2F0IGdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikgY29uc3Q7CkBAIC0zMDQsNiArMzEyLDggQEAg
cHJvdGVjdGVkOgogICAgIC8vIHN1cHBvcnQgcHJvZ3Jlc3MgZXZlbnRzIHNvIHNldHRpbmcgbV9z
ZW5kUHJvZ3Jlc3NFdmVudHMgZGlzYWJsZXMgdGhlbSAKICAgICBib29sIG1fc2VuZFByb2dyZXNz
RXZlbnRzIDogMTsKIAorICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4gOiAxOworCiAjaWYgRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgYm9vbCBtX25lZWRXaWRnZXRVcGRhdGUgOiAx
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRleCBkYzk3MTRhLi4xYmRiMmY3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBFTkFCTEUoVklE
RU8pCiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw3ICs1Miw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCB7IHJldHVybiBwbGF5
ZXIoKSAmJiBwbGF5ZXIoKS0+aGFzVmlkZW8oKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBwbGF5ZXIoKSAmJiBwbGF5ZXIoKS0+c3VwcG9y
dHNGdWxsc2NyZWVuKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKaW5kZXggMmE5MDYxMS4uZWZkNzdmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAt
MTk0LDYgKzE5NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZVZpZXdVcGRhdGUoKSA9IDA7CiAjZW5kaWYKIAorICAgICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0K
KyAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICB2aXJ0dWFsIEtleWJvYXJkVUlN
b2RlIGtleWJvYXJkVUlNb2RlKCkgeyByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OyB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggZDdkOGNlZi4u
NWFlODczOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHBhdXNlKCkgeyB9ICAgIAogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkKiBw
bGF0Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBJbnRTaXpl
IG5hdHVyYWxTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQogCkBAIC0zMDMs
MTEgKzMwMyw2IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OnNlZWtpbmcoKSBjb25zdAogICAgIHJldHVy
biBtX3ByaXZhdGUtPnNlZWtpbmcoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c0Z1bGxz
Y3JlZW4oKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNTYXZlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c1NhdmUoKTsKQEAgLTMzMSw2ICszMjYsMTEg
QEAgYm9vbCBNZWRpYVBsYXllcjo6aW5NZWRpYURvY3VtZW50KCkKICAgICByZXR1cm4gZG9jdW1l
bnQgJiYgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpOwogfQogCit2b2lkKiBNZWRpYVBsYXll
cjo6cGxhdGZvcm1Nb3ZpZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZv
cm1Nb3ZpZSgpOworfQorCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyOjpu
ZXR3b3JrU3RhdGUoKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm5ldHdvcmtTdGF0ZSgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDdmNWYyYTAuLmNlYTlk
YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTY4LDcgKzY4
LDcgQEAgcHVibGljOgogCiAgICAgLy8gdGltZSBoYXMganVtcGVkLCBlZy4gbm90IGFzIGEgcmVz
dWx0IG9mIG5vcm1hbCBwbGF5YmFjawogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclRpbWVD
aGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9Ci0gICAgCisKICAgICAvLyB0aGUgbWVkaWEgZmlsZSBk
dXJhdGlvbiBoYXMgY2hhbmdlZCwgb3IgaXMgbm93IGtub3duCiAgICAgdmlydHVhbCB2b2lkIG1l
ZGlhUGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9CiAgICAgCkBAIC0xMDcs
MTUgKzEwNywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmc+Jik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotICAg
IGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1NhdmUo
KSBjb25zdDsKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7CisKICAgICBJbnRTaXpl
IG5hdHVyYWxTaXplKCk7CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0
RnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3
OyB9CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQog
ICAgIGJvb2wgaW5NZWRpYURvY3VtZW50KCk7Ci0gICAgCisKICAgICBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclBy
aXZhdGUuaAppbmRleCA2ZDEzNTliLi44YjYxZmUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTQyLDExICs0MiwxMiBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOwotICAgIAorCisgICAgdmlydHVhbCB2b2lkKiBw
bGF0Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBs
YXkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAKIAotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NhdmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgK
aW5kZXggNTRlZWEwMC4uNjExMGFmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCkBAIC03Nyw2ICs3Nyw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOwogICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CiAKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7
CisKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQppbmRleCBjMWQ3ZmNiLi43MjI4NmQzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVR
VEtpdC5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbQpAQCAtNTYyLDYgKzU2MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0
RGVsYXlDYWxsYmFja3M6Tk9dOwogfQogCit2b2lkKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRm
b3JtTW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0TW92aWUuZ2V0KCk7Cit9CisKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKIHsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxh
YmxlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXgg
ZDBhZjk4MS4uN2Y0ZDUyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtNTI1LDYgKzUyNSw3IEBAIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVuCiB2b2lk
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgeworICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKCk7
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ODk0OTg5Li5jZGYzOTZkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIsNiArMTAyLDEyIEBACiAJCTVERTgz
QTdDMEQwRjdGOTQwMENBRDEyQSAvKiBXZWJWaWV3RWRpdGluZ0NvbnRleHRNZW51T2xkLm5pYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFODNBNzgw
RDBGN0Y5NDAwQ0FEMTJBIC8qIFdlYlZpZXdFZGl0aW5nQ29udGV4dE1lbnVPbGQubmliICovOyB9
OwogCQk1REU4M0E3RjBEMEY3RkFEMDBDQUQxMkEgLyogTG9jYWxpemFibGUuc3RyaW5ncyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFODNBN0QwRDBG
N0ZBRDAwQ0FEMTJBIC8qIExvY2FsaXphYmxlLnN0cmluZ3MgKi87IH07CiAJCTVERTkyRkVGMEJE
NzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU5MkZFRTBCRDcwMTdFMDA1OUE1RkQgLyogV2ViQXNz
ZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTYzM0ZGRkFFMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzM0ZGRkFDMTAxMEYy
RTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLzsgfTsKKwkJNjMzRkZGQUYxMDEw
RjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5tICovOyB9OworCQk2MzUyQUY5QjEwMUEyOTJFMDBGMjkwNkUgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjM1MkFGOTkxMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJNjM1MkFGOUMxMDFBMjkyRTAwRjI5MDZF
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJNjM4MzU5RDIxMDBDMzk2NDAw
MUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzODM1OUQwMTAwQzM5NjQw
MDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi87IH07
CisJCTYzODM1OUQzMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCTY1NDg4REExMDg0RkJDQ0IwMDgzMUFEMCAvKiBX
ZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NDg4RDlGMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlF
eHRyYXMuaCAqLzsgfTsKIAkJNjU0ODhEQTIwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlv
bmFyeUV4dHJhcy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU0ODhEQTAwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICov
OyB9OwogCQk2NTZEMzMzRTBBRjIxQUU5MDAyMTIxNjkgLyogV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTZEMzMzRDBBRjIxQUU5MDAyMTIxNjkgLyogV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3Niw2ICs0ODIsMTIgQEAKIAkJNURFODNBNzkwRDBGN0Y5NDAwQ0FEMTJBIC8qIEVuZ2xpc2gg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
Lm5pYjsgbmFtZSA9IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL1dlYlZpZXdFZGl0aW5n
Q29udGV4dE1lbnVPbGQubmliOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTVERTgz
QTdFMEQwRjdGQUQwMENBRDEyQSAvKiBFbmdsaXNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDEwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Quc3Ry
aW5nczsgbmFtZSA9IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0
cmluZ3M7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNURFOTJGRUUwQkQ3MDE3RTAw
NTlBNUZEIC8qIFdlYkFzc2VydGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkFzc2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjMzRkZG
QUMxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJXaW5kb3dBbmlt
YXRpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM1MkFGOTkxMDFBMjkyRTAw
RjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyog
V2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjU0ODhEQTAwODRG
QkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJOU0RpY3Rpb25hcnlFeHRy
YXMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTY1NkQzMzNEMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0
ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5
NCw2ICsxMTA2LDEyIEBACiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdE
YXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJWaWV3SW50ZXJu
YWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmlld1ByaXZhdGUu
aCAqLywKKwkJCQk2MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5oICovLAorCQkJCTYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovLAorCQkJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFD
RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCisJCQkJNjM4
MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIubW0gKi8sCisJCQkJNjMzRkZGQUMxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0Fu
aW1hdGlvbi5oICovLAorCQkJCTYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dB
bmltYXRpb24ubSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBtYWMv
V2ViVmlldzsKQEAgLTE0NDQsNiArMTQ2Miw5IEBACiAJCQkJOTM5ODEwNDYwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5QjA4MjRC
RjAxMDA4REYwMzggLyogV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA3MTA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTYzODM1OUQyMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzNGRkZBRTEwMTBGMkU4MDBDNEU4
ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzUyQUY5QjEw
MUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xNzc0LDYgKzE3OTUsOSBAQAogCQkJCTkzOTgxMTA3MDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRTQ2NEUwRkQ4QTk2ODAwQTlE
OURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRTgwODI0QkYw
MTAwOERGMDM4IC8qIFdlYlZpZXdGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjM4MzU5
RDMxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk2MzNGRkZBRjEwMTBGMkU4MDBDNEU4ODEgLyogV2Vi
V2luZG93QW5pbWF0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQk2MzUyQUY5QzEwMUEyOTJFMDBG
MjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggODUxZGVk
Zi4uZTNlNTc5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCkBAIC0xNDksNiArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVWaWV3VXBkYXRlKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisKICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R2VvbG9jYXRpb24qKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTYyYTljNS4uZTk3OTg1NCAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTU1LDYgKzU1LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HZW9sb2NhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4u
aD4KQEAgLTcxNSw2ICs3MTYsMjkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlVmll
d1VwZGF0ZSgpCiAKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorCitib29sIFdlYkNocm9t
ZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQorewor
ICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcp
OworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2Rl
KiBub2RlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbbV93ZWJW
aWV3IF9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOm5vZGVdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNjcmVlbkZvck5v
ZGUoTm9kZSopCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFttX3dl
YlZpZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAg
ICAKK30KKworI2VuZGlmCisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0R2VvbG9jYXRp
b25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRp
b24pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+
CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1l
bnQuaD4KKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsK
K0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdl
YldpbmRvd0ZhZGVBbmltYXRpb247CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlcgoreworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OyAvLyAocmV0YWluKQorICAgIGlkPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOyAvLyAoYXNzaWduKQorCisg
ICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFpbikKKyAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyKiBfaHVkQ29udHJvbGxlcjsg
Ly8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gKl9mYWRlQW5pbWF0aW9u
OyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxsc2NyZWVuOworICAgIEJPT0wg
X2lzV2luZG93TG9hZGVkOworICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworfQor
CistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwor
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudDsKKworLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2Ny
ZWVuOworLSAodm9pZClleGl0RnVsbHNjcmVlbjsKKworQGVuZAorCisjZW5kaWYKKwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0g
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ3MWMwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KQEAg
LTAsMCArMSw0MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0IDxR
VEtpdC9RVEtpdC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPEhJ
VG9vbGJveC9ISVRvb2xib3guaD4KKworI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4K
KworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKKworU09GVF9M
SU5LX0ZSQU1FV09SSyhRVEtpdCkKKworCitTT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUTW92aWVW
aWV3KQorCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93IDogTlNXaW5kb3cg
PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAgU0VMIF9jb250cm9sbGVyQWN0aW9uT25Bbmlt
YXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVBbmltYXRpb24gKl9mdWxsc2NyZWVuQW5pbWF0
aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFy
dFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlv
biAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJvbGxlckFjdGlvbjsK
K0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyICgpIDxXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyk7CisgICAgQVNTRVJU
KCFfZmFkZUFuaW1hdGlvbik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmlu
ZyAqKXdpbmRvd05pYk5hbWUKK3sKKyAgICByZXR1cm4gQCJObyBuaWIiOyAvLyBSZXF1aXJlZCB0
byBnZXQgLWxvYWRXaW5kb3cgdG8gYmUgY2FsbGVkLgorfQorCistICh2b2lkKWxvYWRXaW5kb3cK
K3sKKyAgICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1cmUgLXdp
bmRvd051bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmltYXRpb24p
LgorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyBhbGxv
Y10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NX
aW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAg
W3NlbGYgc2V0V2luZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKK30KKworLSAo
dm9pZCl3aW5kb3dEaWRMb2FkCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107CisgICAgUVRNb3ZpZVZpZXcgKnZpZXcgPSBbW2dldFFUTW92aWVWaWV3Q2xhc3MoKSBhbGxv
Y10gaW5pdF07CisgICAgW3ZpZXcgc2V0RmlsbENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsK
KyAgICBbd2luZG93IHNldENvbnRlbnRWaWV3OnZpZXddOworICAgIFt2aWV3IHNldENvbnRyb2xs
ZXJWaXNpYmxlOk5PXTsKKyAgICBbdmlldyBzZXRQcmVzZXJ2ZXNBc3BlY3RSYXRpbzpZRVNdOwor
ICAgIFt2aWV3IHNldE1vdmllOihRVE1vdmllICopX21lZGlhRWxlbWVudC0+cGxhdGZvcm1Nb3Zp
ZSgpXTsKKyAgICBbd2luZG93IHNldEhhc1NoYWRvdzpZRVNdOworICAgIFt3aW5kb3cgc2V0TGV2
ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbC0xXTsKKyAgICBbdmlldyByZWxlYXNlXTsKK30KKwor
LSAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJl
dHVybiAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0g
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sKKyAgICByZXR1cm4g
X21lZGlhRWxlbWVudC5nZXQoKTsKK30KKworLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sKKyAgICBfbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50OworICAgIGlmIChbc2VsZiBpc1dpbmRvd0xvYWRlZF0pIHsKKyAgICAg
ICAgUVRNb3ZpZVZpZXcgKm1vdmllVmlldyA9IChRVE1vdmllVmlldyAqKVtbc2VsZiB3aW5kb3dd
IGNvbnRlbnRWaWV3XTsKKyAgICAgICAgW21vdmllVmlldyBzZXRNb3ZpZTooUVRNb3ZpZSAqKV9t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTW92aWUoKV07CisgICAgfQorfQorCistIChpZDxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgcmV0dXJuIF9k
ZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKK30KKworLSAodm9pZCljbGVhckZhZGVBbmltYXRpb24KK3sKKyAgICBbX2ZhZGVBbmltYXRp
b24gc3RvcEFuaW1hdGlvbl07CisgICAgW19mYWRlQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOwor
ICAgIFtfZmFkZUFuaW1hdGlvbiBhdXRvcmVsZWFzZV07CisgICAgX2ZhZGVBbmltYXRpb24gPSBu
aWw7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBj
bGVhckZhZGVBbmltYXRpb25dOworICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKKyAgICBbc2Vs
ZiBzZXRXaW5kb3c6bmlsXTsKKyAgICBTZXRTeXN0ZW1VSU1vZGUoa1VJTW9kZU5vcm1hbCwgMCk7
CisgICAgW19odWRDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19odWRDb250cm9s
bGVyIHJlbGVhc2VdOworICAgIF9odWRDb250cm9sbGVyID0gbmlsOworICAgIFtfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2VdOworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgcmVsZWFzZV07CisgICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOworICAg
IAorICAgIFtzZWxmIGF1dG9yZWxlYXNlXTsgIC8vIEZyb20gaW4gZXhpdEZ1bGxzY3JlZW4KKyAg
ICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJG
dWxsc2NyZWVuCit7CisgICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKworICAgIEFTU0VS
VCghX2h1ZENvbnRyb2xsZXIpOworICAgIF9odWRDb250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBfaHVkQ29udHJvbGxl
ci5kZWxlZ2F0ZSA9IHNlbGY7CisgICAgaWYgKF9tZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgewor
ICAgICAgICAvLyBPbmx5IGZhZGUgdGhlIGh1ZCB3aW5kb3cgaWYgd2UgYXJlIHBhdXNlZC4KKyAg
ICAgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5kb3dJbl07CisgICAgfQorICAgIFNldFN5c3Rl
bVVJTW9kZShrVUlNb2RlQWxsU3VwcHJlc3NlZCAsIDApOworICAgIFtOU0N1cnNvciBzZXRIaWRk
ZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKK30KKworLSAoTlNSZWN0KW1lZGlhRWxlbWVudFJlY3QK
K3sKKyAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+c2NyZWVuUmVjdCgpOworfQorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50ZXJmYWNlCisKKy0gKHZvaWQpZW50ZXJG
dWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAg
ICAgc2NyZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGZyYW1lID0g
W3NlbGYgbWVkaWFFbGVtZW50UmVjdF07CisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NjcmVlbiBm
cmFtZV07CisKKyAgICAvLyBLZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUg
ZGVzdGluYXRpb24gd2luZG93CisgICAgZG91YmxlIG9yaWdpbmFsUmF0aW8gPSBmcmFtZS5zaXpl
LndpZHRoIC8gZnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAgZG91YmxlIG5ld1JhdGlvID0gZW5kRnJh
bWUuc2l6ZS53aWR0aCAvIGVuZEZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmKG5ld1JhdGlvID4g
b3JpZ2luYWxSYXRpbykKKyAgICB7CisgICAgICAgIGRvdWJsZSBuZXdXaWR0aCA9IG9yaWdpbmFs
UmF0aW8gKiBlbmRGcmFtZS5zaXplLmhlaWdodDsKKyAgICAgICAgZG91YmxlIGRpZmYgPSBlbmRG
cmFtZS5zaXplLndpZHRoIC0gbmV3V2lkdGg7CisgICAgICAgIGVuZEZyYW1lLnNpemUud2lkdGgg
PSBuZXdXaWR0aDsKKyAgICAgICAgZW5kRnJhbWUub3JpZ2luLnggKz0gZGlmZiAvIDI7CisgICAg
ICAgIAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZG91YmxlIG5ld0hlaWdodCA9IGVuZEZy
YW1lLnNpemUud2lkdGggLyBvcmlnaW5hbFJhdGlvOworICAgICAgICBkb3VibGUgZGlmZiA9IGVu
ZEZyYW1lLnNpemUuaGVpZ2h0IC0gbmV3SGVpZ2h0OworICAgICAgICBlbmRGcmFtZS5zaXplLmhl
aWdodCA9IG5ld0hlaWdodDsKKyAgICAgICAgZW5kRnJhbWUub3JpZ2luLnkgKz0gZGlmZiAvIDI7
CisgICAgfSAgICAKKworICAgIC8vIENyZWF0ZSBhIGJsYWNrIHdpbmRvdyBpZiBuZWVkZWQKKyAg
ICBpZiAoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdykgeworICAgICAgICBfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgPSBbW05TV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0
OltzY3JlZW4gZnJhbWVdIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6
TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgICAgIFtfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgc2V0T3BhcXVlOllFU107CisgICAgICAgIFtfYmFja2dyb3VuZEZ1bGxz
Y3JlZW5XaW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKKyAg
ICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRMZXZlbDpbW3NlbGYgd2luZG93
XSBsZXZlbF0tMV07CisgICAgICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgc2V0SGlk
ZXNPbkRlYWN0aXZhdGU6WUVTXTsKKyAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAg
W19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFtZTpbc2NyZWVuIGZyYW1lXSBkaXNw
bGF5Ok5PXTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFu
aW1hdGlvbiBpZiB0aGUgcHJldmlvdXMgb25lIGlzbid0IG92ZXIgeWV0CisgICAgQ0dGbG9hdCBp
bml0aWFsQWxwaGEgPSAwOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikgeworICAgICAgICBbX2Zh
ZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgICAgIGluaXRpYWxBbHBoYSA9IFtfZmFk
ZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdOworICAgICAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRp
b25dOworICAgIH0KKyAgICBpZiAoIV9mb3JjZURpc2FibGVBbmltYXRpb24pCisgICAgICAgIF9m
YWRlQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aER1
cmF0aW9uOjAuMiB3aW5kb3c6X2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IGluaXRpYWxBbHBo
YTppbml0aWFsQWxwaGEgZmluYWxBbHBoYToxXTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gVGhp
cyB3aWxsIGRpc2FibGUgYW5pbWF0aW9uCisgICAgICAgIGZyYW1lID0gTlNaZXJvUmVjdDsKKyAg
ICB9CisgICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFtZSB0
b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlvbiBjb250cm9sbGVy
QWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4pXTsKKworICAgIFtfYmFj
a2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2
ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJdXTsKK30KKworLSAodm9p
ZClleGl0RnVsbHNjcmVlbgoreworICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQorICAgICAg
ICByZXR1cm47CisgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBbX2h1ZENvbnRy
b2xsZXIgY2xvc2VXaW5kb3ddOworCisgICAgQ0dGbG9hdCBpbml0aWFsQWxwaGEgPSAxOworICAg
IGlmIChfZmFkZUFuaW1hdGlvbikgeworICAgICAgICBpbml0aWFsQWxwaGEgPSBbX2ZhZGVBbmlt
YXRpb24gY3VycmVudEFscGhhXTsKKyAgICAgICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsK
KyAgICB9CisgICAgCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgbWVkaWFFbGVtZW50UmVj
dF07CisKKyAgICBpZiAoIV9mb3JjZURpc2FibGVBbmltYXRpb24gJiYgW1tzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddIGlzS2V5V2luZG93XSkKKyAgICAgICAgX2ZhZGVBbmltYXRpb24gPSBfYmFja2dy
b3VuZEZ1bGxzY3JlZW5XaW5kb3cgPyBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gYWxsb2NdIGlu
aXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgaW5p
dGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOjBdIDogbmlsOworICAgIGVsc2Ugewor
ICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBhbmltYXRpb24KKyAgICAgICAgZW5kRnJhbWUg
PSBOU1plcm9SZWN0OworICAgIH0KKworICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGlu
IHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFu
aW1hdGVGcm9tUmVjdDpbW3NlbGYgd2luZG93XSBmcmFtZV0gdG9SZWN0OmVuZEZyYW1lIHdpdGhT
dWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24gY29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2lu
ZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFy
ayBXaW5kb3cgY2FsbGJhY2sKKworLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5p
bWF0aW9uOihCT09MKWFuaW1hdGlvbgoreworICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQor
ICAgICAgICByZXR1cm47CisKKyAgICBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uID0gIWFuaW1hdGlv
bjsKKyAgICBfbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgIF9mb3JjZURpc2Fi
bGVBbmltYXRpb24gPSBOTzsKK30KKworLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4KK3sK
KyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOllFU107Cit9CisK
Ky0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5kb3dJbl07
Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cKKwor
LSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazoo
TlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5
cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOworICAgIGlm
ICgoc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRlbnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFz
azpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFn
XSkpIHsKKyAgICAgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICAgICAgW3NlbGYgc2V0QmFj
a2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICAgICAgW3NlbGYgc2V0SGlk
ZXNPbkRlYWN0aXZhdGU6WUVTXTsKKyAgICAgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRz
Ok5PXTsKKyAgICAgICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsKKyAg
ICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VS
VCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
Qk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9P
TCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKW1v
dXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50
KTsKK30KKworLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRlcgoreworICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSByZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5dOworfQorCistICh2b2lkKWFuaW1hdGVkUmVzaXplRGlkRW5kCit7CisgICAg
Ly8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxlci4KKyAgICBpZiAoX2NvbnRyb2xsZXJBY3Rpb25P
bkFuaW1hdGlvbkVuZCkKKyAgICAgICAgb2JqY19tc2dTZW5kKFtzZWxmIHdpbmRvd0NvbnRyb2xs
ZXJdLCBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kKTsKKyAgICBfY29udHJvbGxlckFj
dGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gd2ls
bCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1lIHJlY3RhbmdsZQorLy8gV2Ugc3VwcG9ydCBxdWV1
aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ2xsIGNvcnJlY3RseQorLy8gaW50ZXJy
dXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwgYW5kIHF1ZXVlIHRoZSBuZXh0IG9uZS4KKy8vCist
ICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6KE5TUmVjdCll
bmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopc3ViQW5pbWF0aW9uIGNvbnRy
b2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uCit7CisgICAgX2NvbnRyb2xsZXJBY3Rp
b25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xsZXJBY3Rpb247CisKKyAgICBCT09MIHdhc0FuaW1h
dGluZyA9IE5POworICAgIGlmIChfZnVsbHNjcmVlbkFuaW1hdGlvbikgeworICAgICAgICB3YXNB
bmltYXRpbmcgPSBZRVM7CisKKyAgICAgICAgLy8gSW50ZXJydXB0IGFueSBydW5uaW5nIGFuaW1h
dGlvbi4KKyAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisg
ICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjdCB0byBlbnN1cmUgYSBzbW9vdGggdHJhbnNp
dGlvbi4KKyAgICAgICAgc3RhcnRSZWN0ID0gW19mdWxsc2NyZWVuQW5pbWF0aW9uIGN1cnJlbnRG
cmFtZV07CisgICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICAgICAg
X2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7CisgICAgfQorICAgIAorICAgIGlmIChOU0lzRW1w
dHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0VtcHR5UmVjdChlbmRSZWN0KSkgeworICAgICAgICAv
LyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRpb24uCisgICAgICAgIFtzdWJBbmltYXRpb24gc2V0
Q3VycmVudFByb2dyZXNzOjEuMF07CisgICAgICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGlu
ayB0byB0aGUgd2luZG93LgorICAgICAgICBbc3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwor
CisgICAgICAgIFtzZWxmIHNldEZyYW1lOmVuZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtz
ZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJl
c2l6ZURpZEVuZF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1h
dGluZykgeworICAgICAgICAvLyBXZSdsbCBkb3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhl
IGFuaW1hdGlvbiBiYXNlZCBvbiB0aGUgaGlnaGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBC
T09MIGhpZ2hlclJlc29sdXRpb25Jc0VuZFJlY3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVu
ZFJlY3Quc2l6ZS53aWR0aCAmJiBzdGFydFJlY3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUu
aGVpZ2h0OworICAgICAgICBbc2VsZiBzZXRGcmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0
ID8gZW5kUmVjdCA6IHN0YXJ0UmVjdCBkaXNwbGF5Ok5PXTsgICAgICAgIAorICAgIH0KKyAgICAK
KyAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKKyAgICBfZnVsbHNjcmVlbkFuaW1h
dGlvbiA9IFtbV2ViV2luZG93U2NhbGVBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoSGludGVkRHVy
YXRpb246MC4yIHdpbmRvdzpzZWxmIGluaXRhbEZyYW1lOnN0YXJ0UmVjdCBmaW5hbEZyYW1lOmVu
ZFJlY3RdOworICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRTdWJBbmltYXRpb246c3ViQW5p
bWF0aW9uXTsKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaGFzIHNjYWxlZCB0aGUgd2luZG93
IGJlZm9yZSBzaG93aW5nIGl0LgorICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRDdXJyZW50
UHJvZ3Jlc3M6MF07CisgICAgW3NlbGYgbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07CisKKyAg
ICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKWFu
aW1hdGlvbkRpZEVuZDooTlNBbmltYXRpb24gKilhbmltYXRpb24KK3sKKyAgICBpZiAoIVtOU1Ro
cmVhZCBpc01haW5UaHJlYWRdKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFp
blRocmVhZDpAc2VsZWN0b3IoYW5pbWF0aW9uRGlkRW5kOikgd2l0aE9iamVjdDphbmltYXRpb24g
d2FpdFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGFuaW1h
dGlvbiAhPSBfZnVsbHNjcmVlbkFuaW1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
VGhlIGFuaW1hdGlvbiBpcyBub3QgcmVhbGx5IG92ZXIgYW5kIHdhcyBpbnRlcnJ1cHRlZAorICAg
IC8vIERvbid0IHNlbmQgY29tcGxldGlvbiBldmVudHMuCisgICAgaWYgKFthbmltYXRpb24gY3Vy
cmVudFByb2dyZXNzXSA8IDEuMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRo
YXQgYW5pbWF0aW9uIChhbmQgc3ViYW5pbWF0aW9uKSBkb24ndCBrZWVwCisgICAgLy8gdGhlIHdl
YWsgcmVmZXJlbmNlIHRvIHRoZSB3aW5kb3cgaXZhciB0aGF0IG1heSBiZSBkZXN0cm95ZWQgZnJv
bQorICAgIC8vIG5vdyBvbi4KKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0V2luZG93Om5p
bF07CisKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gYXV0b3JlbGVhc2VdOworICAgIF9mdWxs
c2NyZWVuQW5pbWF0aW9uID0gbmlsOworCisgICAgW3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRd
OworfQorCistICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFtb
c2VsZiB3aW5kb3dDb250cm9sbGVyXSBmYWRlSFVESW5dOworfQorCistICh2b2lkKXJlc2lnbktl
eVdpbmRvdworeworICAgIFtzdXBlciByZXNpZ25LZXlXaW5kb3ddOworICAgIFtbc2VsZiB3aW5k
b3dDb250cm9sbGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOk5PXTsKK30K
K0BlbmQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggYi9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWMyOWEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisj
aW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50
Lmg+CisKK0Bwcm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVs
ZWdhdGU7CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ciA6IE5TV2luZG93Q29udHJvbGxlciB7CisgICAgaWQ8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7CisgICAgTlNUaW1lciAqX3RpbWVsaW5l
VXBkYXRlVGltZXI7CisgICAgTlNUcmFja2luZ0FyZWEgKl9hcmVhOworICAgIEJPT0wgX21vdXNl
SXNJbkhVRDsKK30KKy0gKGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClmYWRl
V2luZG93SW47CistICh2b2lkKWZhZGVXaW5kb3dPdXQ7CistICh2b2lkKWNsb3NlV2luZG93Owor
QGVuZAorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRl
bGVnYXRlIDxOU09iamVjdD4KKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuOworLSAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworQGVuZAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRm
NTViYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8
UVRLaXQvUVRLaXQuaD4KKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIuaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorCitAaW50ZXJmYWNl
IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgKFByaXZhdGUpCistICh2b2lk
KXVwZGF0ZVRpbWU7CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93IDogTlNXaW5kb3cKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvdworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0
IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBl
KWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgICh2b2lkKWFTdHlsZTsKKyAg
ICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHls
ZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6
ZmxhZ10pKQorICAgIHsKKyAgICAgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICAgICAgW3Nl
bGYgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICAgICAgW3Nl
bGYgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07CisgICAgICAgIFtzZWxmIHNldEFj
Y2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgICAgIFtzZWxmIHNldElnbm9yZXNNb3Vz
ZUV2ZW50czpOT107CisgICAgICAgIFtzZWxmIHNldE1vdmFibGVCeVdpbmRvd0JhY2tncm91bmQ6
WUVTXTsKKyAgICAgICAgW3NlbGYgc2V0SGlkZXNPbkRlYWN0aXZhdGU6WUVTXTsKKyAgICB9Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Cit7CisgICAg
cmV0dXJuIE5POworfQorCistICh2b2lkKWNlbnRlcgoreworICAgIE5TUmVjdCBodWRGcmFtZSA9
IFtzZWxmIGZyYW1lXTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW05TU2NyZWVuIG1haW5T
Y3JlZW5dIGZyYW1lXTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExlZnRQb2ludDpOU01ha2VQb2lu
dCgoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCAtIGh1ZEZyYW1lLnNpemUud2lkdGgpIC8gMiArIHNj
cmVlbkZyYW1lLm9yaWdpbi54LCBodWRGcmFtZS5zaXplLmhlaWdodCAqIDIgKyBzY3JlZW5GcmFt
ZS5vcmlnaW4ueCldOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZT4KK0BlbmQKKyAKKworQGlt
cGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIKKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfdGltZWxpbmVVcGRhdGVUaW1lcik7CisgICAg
QVNTRVJUKCFfYXJlYSk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChpZDxXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAg
cmV0dXJuIF9kZWxlZ2F0ZTsKK30KKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkPFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZClzY2hlZHVsZVRpbWVVcGRhdGUKK3sKKyAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6c2VsZl07CisK
KyAgICAvLyBGaXJzdCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2NoZWR1bGUgZnV0dXJlIHVw
ZGF0ZQorICAgIFtzZWxmIHVwZGF0ZVRpbWVdOworCisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIg
PSBbW05TVGltZXIgdGltZXJXaXRoVGltZUludGVydmFsOjAuMjUwIHRhcmdldDpzZWxmIHNlbGVj
dG9yOkBzZWxlY3Rvcih1cGRhdGVUaW1lKSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdIHJldGFp
bl07CisgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIGFkZFRpbWVyOl90aW1lbGluZVVw
ZGF0ZVRpbWVyIGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOworICAgIFtfdGltZWxpbmVV
cGRhdGVUaW1lciBmaXJlXTsKK30KKworLSAodm9pZCl1bnNjaGVkdWxlVGltZVVwZGF0ZQorewor
ICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUpIG9iamVjdDpuaWxdOwor
CisgICAgaWYgKFtfdGltZWxpbmVVcGRhdGVUaW1lciBpc1ZhbGlkXSkKKyAgICAgICAgW190aW1l
bGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOworICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBy
ZWxlYXNlXTsKKyAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IG5pbDsKK30KKworLSAodm9pZClm
YWRlV2luZG93SW4KK3sKKyAgICBpZighW1tzZWxmIHdpbmRvd10gaXNWaXNpYmxlXSkgeworICAg
ICAgICBbW3NlbGYgd2luZG93XSBzZXRBbHBoYVZhbHVlOjBdOworICAgIH0KKyAgICBbW3NlbGYg
d2luZG93XSBvcmRlckZyb250OnNlbGZdOworICAgIFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0g
c2V0QWxwaGFWYWx1ZToxXTsKKyAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOworCisgICAg
W05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNl
bGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBpZiAoIV9t
b3VzZUlzSW5IVUQpCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFk
ZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheToxLjBdOworfQorCistICh2b2lk
KWZhZGVXaW5kb3dPdXQKK3sKKyAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVz
OllFU107CisgICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBdOwor
ICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUp
IHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07Cit9CisKKy0gKHZvaWQpY2xvc2VXaW5kb3cK
K3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAg
IFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKKyAgICBbc2VsZi53aW5kb3cuY29udGVudFZp
ZXcgcmVtb3ZlVHJhY2tpbmdBcmVhOl9hcmVhXTsKKyAgICBbX2FyZWEgcmVsZWFzZV07OworICAg
IF9hcmVhID0gbmlsOworICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKKyAgICBbc2VsZiBzZXRX
aW5kb3c6bmlsXTsKK30KKworc3RhdGljIE5TQ29udHJvbCAqY3JlYXRlQ29udHJvbFdpdGhNZWRp
YVVJQ29udHJvbFR5cGUoaW50IGNvbnRyb2xUeXBlLCBDR1JlY3QgZnJhbWUpCit7CisgICAgTlND
b250cm9sICpjb250cm9sID0gV0tDcmVhdGVNZWRpYVVJQ29udHJvbChjb250cm9sVHlwZSk7Cisg
ICAgW2NvbnRyb2wgc2V0RnJhbWU6TlNSZWN0RnJvbUNHUmVjdChmcmFtZSldOworICAgIHJldHVy
biBjb250cm9sOworfQorCitzdGF0aWMgTlNUZXh0RmllbGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQo
Q0dSZWN0IGZyYW1lKQoreworICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQgPSBbW05TVGV4dEZp
ZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBbdGV4dEZpZWxkIHNldFRleHRD
b2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07CisgICAgW3RleHRGaWVsZCBzZXRCb3JkZXJlZDpO
T107CisgICAgW3RleHRGaWVsZCBzZXRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxMF1d
OworICAgIFt0ZXh0RmllbGQgc2V0RHJhd3NCYWNrZ3JvdW5kOk5PXTsKKyAgICBbdGV4dEZpZWxk
IHNldEJlemVsZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0RWRpdGFibGU6Tk9dOworICAgIFt0
ZXh0RmllbGQgc2V0U2VsZWN0YWJsZTpOT107CisgICAgcmV0dXJuIHRleHRGaWVsZDsKK30KKwor
c3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7CitzdGF0aWMgY29uc3QgQ0dG
bG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKKworLSAoTlNTdHJpbmcgKil3aW5kb3dOaWJOYW1lCit7
CisgICAgcmV0dXJuIEAiTm8gTmliIjsgLy8gU28gdGhhdCAtd2luZG93RGlkTG9hZCBnZXRzIGNh
bGxlZC4KK30KKworCistICh2b2lkKWxvYWRXaW5kb3cKK3sKKyAgICBOU1dpbmRvdyogd2luZG93
ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJl
Y3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSBzdHlsZU1hc2s6
TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVm
ZXI6Tk9dOworICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW3NlbGYgc2V0V2lu
ZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKK30KKworLSAodm9pZCl3aW5kb3dE
aWRMb2FkCit7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQga01hcmdpbiA9IDk7CisgICAgc3Rh
dGljIGNvbnN0IENHRmxvYXQga01hcmdpblRvcCA9IDk7CisgICAgc3RhdGljIGNvbnN0IENHRmxv
YXQga0J1dHRvblNpemUgPSAyNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQnV0dG9uTWlu
aVNpemUgPSAxNjsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAg
IE5TQXNzZXJ0KHdpbmRvdywgQCJObyB3aW5kb3cgd2FzIGNyZWF0ZWQiKTsKKworICAgIE5TVmll
dyAqYmFja2dyb3VuZCA9IFdLQ3JlYXRlTWVkaWFVSUJhY2tncm91bmRWaWV3KCk7CisgICAgW3dp
bmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJlYSA9IFtbTlNUcmFja2lu
Z0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6TlNU
cmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93bmVy
OnNlbGYgdXNlckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6X2Fy
ZWFdOworICAgIFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqY29udGVu
dFZpZXcgPSBbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107CisKKyAgICBDR0Zsb2F0IHRvcCA9
IHdpbmRvd0hlaWdodCAtIGtNYXJnaW5Ub3A7CisgICAgQ0dGbG9hdCBjZW50ZXIgPSAod2luZG93
V2lkdGggLSBrQnV0dG9uU2l6ZSkgLyAyOworICAgIE5TQ29udHJvbCAqcGxheUJ1dHRvbiA9IGNy
ZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xQbGF5UGF1
c2VCdXR0b24sIENHUmVjdE1ha2UoY2VudGVyLCB0b3AgLSBrQnV0dG9uU2l6ZSwga0J1dHRvblNp
emUsIGtCdXR0b25TaXplKSk7CisgICAgW3BsYXlCdXR0b24gYmluZDpAInZhbHVlIiB0b09iamVj
dDpzZWxmIHdpdGhLZXlQYXRoOkAicGxheWluZyIgb3B0aW9uczpuaWxdOworICAgIFtjb250ZW50
VmlldyBhZGRTdWJ2aWV3OnBsYXlCdXR0b25dOworICAgIFtwbGF5QnV0dG9uIHJlbGVhc2VdOwor
CisgICAgQ0dGbG9hdCBsZWZ0T2ZDZW50ZXIgPSAod2luZG93V2lkdGggLSBrQnV0dG9uU2l6ZSAq
IDMgLSBrQnV0dG9uU2l6ZSAtIGtCdXR0b25TaXplKSAvIDI7CisgICAgTlNDb250cm9sICpyZXdp
bmRCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlD
b250cm9sUmV3aW5kQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnRPZkNlbnRlciwgdG9wIC0ga0J1dHRv
blNpemUsIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSkpOworICAgIFtyZXdpbmRCdXR0b24gc2V0
QWN0aW9uOkBzZWxlY3RvcihyZXdpbmQ6KV07CisgICAgW3Jld2luZEJ1dHRvbiBzZXRUYXJnZXQ6
c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6cmV3aW5kQnV0dG9uXTsKKyAgICBb
cmV3aW5kQnV0dG9uIHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCByaWdodE9mQ2VudGVyID0gKHdp
bmRvd1dpZHRoICsga0J1dHRvblNpemUgKiAzKSAvIDI7CisgICAgTlNDb250cm9sICpmYXN0Rm9y
d2FyZEJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFV
SUNvbnRyb2xGYXN0Rm9yd2FyZEJ1dHRvbiwgQ0dSZWN0TWFrZShyaWdodE9mQ2VudGVyLCB0b3Ag
LSBrQnV0dG9uU2l6ZSwga0J1dHRvblNpemUsIGtCdXR0b25TaXplKSk7CisgICAgW3Jld2luZEJ1
dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKGZhc3RGb3J3YXJkOildOworICAgIFtyZXdpbmRCdXR0
b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmZhc3RGb3J3
YXJkQnV0dG9uXTsKKyAgICBbZmFzdEZvcndhcmRCdXR0b24gcmVsZWFzZV07CisKKyAgICBDR0Zs
b2F0IGNsb3NlVG9SaWdodCA9IHdpbmRvd1dpZHRoIC0gMiAqIGtNYXJnaW4gLSBrQnV0dG9uTWlu
aVNpemU7CisgICAgTlNDb250cm9sICpleGl0RnVsbHNjcmVlbkJ1dHRvbiA9IGNyZWF0ZUNvbnRy
b2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xFeGl0RnVsbHNjcmVlbkJ1
dHRvbiwgQ0dSZWN0TWFrZShjbG9zZVRvUmlnaHQsIHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtC
dXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1pbmlTaXplKSk7Cisg
ICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IoZXhpdEZ1bGxzY3Jl
ZW46KV07CisgICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBb
Y29udGVudFZpZXcgYWRkU3VidmlldzpleGl0RnVsbHNjcmVlbkJ1dHRvbl07CisgICAgW2V4aXRG
dWxsc2NyZWVuQnV0dG9uIHJlbGVhc2VdOworICAgIAorICAgIENHRmxvYXQgbGVmdCA9IGtNYXJn
aW47CisgICAgTlNDb250cm9sICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhN
ZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFZvbHVtZURvd25CdXR0b24sIENHUmVj
dE1ha2UobGVmdCwgdG9wIC0ga0J1dHRvblNpemUgLyAyIC0ga0J1dHRvbk1pbmlTaXplIC8gMiwg
a0J1dHRvbk1pbmlTaXplLCBrQnV0dG9uTWluaVNpemUpKTsKKyAgICBbY29udGVudFZpZXcgYWRk
U3Vidmlldzp2b2x1bWVEb3duQnV0dG9uXTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxlYXNl
XTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgdm9sdW1lU2xpZGVyV2lkdGggPSA1MDsKKworICAg
IGxlZnQgPSBrTWFyZ2luICsga0J1dHRvbk1pbmlTaXplOworICAgIE5TQ29udHJvbCAqdm9sdW1l
U2xpZGVyID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29u
dHJvbFNsaWRlciwgQ0dSZWN0TWFrZShsZWZ0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0
dG9uTWluaVNpemUgLyAyLCB2b2x1bWVTbGlkZXJXaWR0aCwga0J1dHRvbk1pbmlTaXplKSk7Cisg
ICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lU2xpZGVyXTsKKyAgICBbdm9sdW1lU2xp
ZGVyIGJpbmQ6QCJtYXhWYWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAIm1heFZvbHVt
ZSIgb3B0aW9uczpuaWxdOworICAgIFt2b2x1bWVTbGlkZXIgYmluZDpAInZhbHVlIiB0b09iamVj
dDpzZWxmIHdpdGhLZXlQYXRoOkAidm9sdW1lIiBvcHRpb25zOm5pbF07CisgICAgW3ZvbHVtZVNs
aWRlciByZWxlYXNlXTsKKworICAgIGxlZnQgPSBrTWFyZ2luICsga0J1dHRvbk1pbmlTaXplICsg
dm9sdW1lU2xpZGVyV2lkdGggKyBrQnV0dG9uTWluaVNpemUgLyAyOworICAgIE5TQ29udHJvbCAq
YnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29u
dHJvbFZvbHVtZVVwQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnQsIHRvcCAtIGtCdXR0b25TaXplIC8g
MiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1pbmlTaXpl
KSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6YnV0dG9uXTsKKyAgICBbYnV0dG9uIHJl
bGVhc2VdOworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZVRleHRXaWR0aCA9IDUwOwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVySGVpZ2h0ID0gMTM7CisgICAgc3RhdGljIGNvbnN0
IGludCBzbGlkZXJNYXJnaW5GaXh1cCA9IDQ7CisKKyAgICBOU0NvbnRyb2wgKnNsaWRlciA9IFdL
Q3JlYXRlTWVkaWFVSUNvbnRyb2woV0tNZWRpYVVJQ29udHJvbFRpbWVsaW5lKTsKKyAgICBbc2xp
ZGVyIHNldEZyYW1lOk5TTWFrZVJlY3Qoa01hcmdpbiArIHRpbWVUZXh0V2lkdGggKyBrTWFyZ2lu
LzIsIGtNYXJnaW4gLSBzbGlkZXJNYXJnaW5GaXh1cCwgd2luZG93V2lkdGggLSAyICogKGtNYXJn
aW4gLSBzbGlkZXJNYXJnaW5GaXh1cCkgLSBrTWFyZ2luICogMiAtIDIgKiB0aW1lVGV4dFdpZHRo
LCBzbGlkZXJIZWlnaHQpXTsKKyAgICBbc2xpZGVyIGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2Vs
ZiB3aXRoS2V5UGF0aDpAImN1cnJlbnRRVFRpbWUiIG9wdGlvbnM6bmlsXTsKKyAgICBbc2xpZGVy
IGJpbmQ6QCJtYXhWYWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAImR1cmF0aW9uIiBv
cHRpb25zOm5pbF07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6c2xpZGVyXTsKKyAgICBb
c2xpZGVyIHJlbGVhc2VdOworCisgICAgc3RhdGljIGNvbnN0IGludCB0aW1lVGV4dEhlaWdodCA9
IDExOworCisgICAgTlNUZXh0RmllbGQgKmVsYXBzZWRUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0
RmllbGQoTlNNYWtlUmVjdChrTWFyZ2luLCBrTWFyZ2luLCB0aW1lVGV4dFdpZHRoLCB0aW1lVGV4
dEhlaWdodCkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmVsYXBzZWRUaW1lVGV4dF07
CisgICAgW2VsYXBzZWRUaW1lVGV4dCBiaW5kOkAidmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtl
eVBhdGg6QCJlbGFwc2VkVGltZVRleHQiIG9wdGlvbnM6bmlsXTsKKyAgICBbZWxhcHNlZFRpbWVU
ZXh0IHJlbGVhc2VdOworCisgICAgTlNUZXh0RmllbGQgKnJlbWFpbmluZ1RpbWVUZXh0ID0gY3Jl
YXRlVGltZVRleHRGaWVsZChOU01ha2VSZWN0KHdpbmRvd1dpZHRoIC0ga01hcmdpbiAtIHRpbWVU
ZXh0V2lkdGgsIGtNYXJnaW4sIHRpbWVUZXh0V2lkdGgsIHRpbWVUZXh0SGVpZ2h0KSk7CisgICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6cmVtYWluaW5nVGltZVRleHRdOworICAgIFtyZW1haW5p
bmdUaW1lVGV4dCBiaW5kOkAidmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJyZW1h
aW5pbmdUaW1lVGV4dCIgb3B0aW9uczpuaWxdOworICAgIFtyZW1haW5pbmdUaW1lVGV4dCByZWxl
YXNlXTsKKyAgICAKKyAgICBbd2luZG93IGNlbnRlcl07Cit9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorLyoKKyAqICBCaW5kaW5ncworICoKKyAqLworCistICh2b2lkKXVwZGF0
ZVZvbHVtZQoreworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInZvbHVtZSJdOwor
ICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidm9sdW1lIl07Cit9CisKKy0gKHZvaWQp
dXBkYXRlVGltZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07CisKKyAgICBbc2VsZiB3aWxs
Q2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07CisgICAgW3NlbGYgZGlkQ2hhbmdl
VmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVl
Rm9yS2V5OkAiZHVyYXRpb24iXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAImR1
cmF0aW9uIl07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAicmVtYWluaW5nVGlt
ZVRleHQiXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInJlbWFpbmluZ1RpbWVU
ZXh0Il07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAiZWxhcHNlZFRpbWVUZXh0
Il07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJlbGFwc2VkVGltZVRleHQiXTsK
K30KKworLSAoUVRUaW1lKWN1cnJlbnRRVFRpbWUKK3sKKyAgICBRVFRpbWUgcmV0OworICAgIHJl
dC50aW1lVmFsdWUgPSBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0gPyBbX2RlbGVnYXRlIG1lZGlh
RWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgKiAzMCA6IDA7CisgICAgcmV0LnRpbWVTY2FsZSA9IDMw
OworICAgIHJldHVybiByZXQ7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFFUVGltZTooUVRUaW1l
KWN1cnJlbnRRVFRpbWUKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZTsKKyAgICBbX2RlbGVn
YXRlIG1lZGlhRWxlbWVudF0tPnNldEN1cnJlbnRUaW1lKChkb3VibGUpY3VycmVudFFUVGltZS50
aW1lVmFsdWUgLyAoZG91YmxlKWN1cnJlbnRRVFRpbWUudGltZVNjYWxlLCBlKTsKK30KKworLSAo
ZG91YmxlKWR1cmF0aW9uCit7CisgICAgcmV0dXJuIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSA/
IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+ZHVyYXRpb24oKSA6IDA7Cit9CisKKy0gKGRvdWJs
ZSltYXhWb2x1bWUKK3sKKyAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIgcmVzb2x1dGlvbgor
ICAgIHJldHVybiAxMDA7Cit9CisKKy0gKGRvdWJsZSl2b2x1bWUKK3sKKyAgICByZXR1cm4gW19k
ZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT52b2x1bWUo
KSAqIFtzZWxmIG1heFZvbHVtZV0gOiAwOworfQorCistICh2b2lkKXNldFZvbHVtZTooZG91Ymxl
KXZvbHVtZQoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICBy
ZXR1cm47CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlOworICAgIFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XS0+c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVtZV0sIGUpOworfQor
CisKKy0gKEJPT0wpcGxheWluZworeworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRd
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFbX2RlbGVnYXRlIG1lZGlhRWxl
bWVudF0tPmNhblBsYXkoKTsKK30KKworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcK
K3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYocGxheWluZykKKyAgICAgICAgW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5wbGF5
KCk7CisgICAgZWxzZQorICAgICAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnBhdXNlKCk7
Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqdGltZVRvU3RyaW5nKGRvdWJsZSB0aW1lKQoreworICAg
IGlmICghaXNmaW5pdGUodGltZSkpCisgICAgICAgIHRpbWUgPSAwOworICAgIGludCBzZWNvbmRz
ID0gKGludClmYWJzZih0aW1lKTsgCisgICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAqIDYw
KTsKKyAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7CisgICAgc2Vjb25kcyAl
PSA2MDsKKyAgICBpZiAoaG91cnMpIHsKKyAgICAgICAgaWYgKGhvdXJzID4gOSkKKyAgICAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJTAyZDolMDJkOiUwMmQi
LCAodGltZSA8IDAgPyAiLSIgOiAiIiksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzXTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JXMlMDFkOiUwMmQ6JTAyZCIsICh0aW1lIDwgMCA/ICItIiA6ICIiKSwgaG91cnMsIG1pbnV0ZXMs
IHNlY29uZHNdOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVzJTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBtaW51
dGVzLCBzZWNvbmRzXTsKKyAgICAKK30KKworc3RhdGljIE5TU3RyaW5nICpzdHJpbmdUb1RpbWVU
ZXh0QXR0cmlidXRlZChOU1N0cmluZyAqc3RyaW5nLCBOU1RleHRBbGlnbm1lbnQgYWxpZ24pCit7
CisgICAgTlNTaGFkb3cgKmJsYWNrU2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07Cisg
ICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd0NvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKKyAg
ICBbYmxhY2tTaGFkb3cgc2V0U2hhZG93Qmx1clJhZGl1czowXTsKKyAgICBbYmxhY2tTaGFkb3cg
c2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoMCwgLTEpXTsKKyAgICBOU011dGFibGVQYXJhZ3Jh
cGhTdHlsZSAqc3R5bGUgPSBbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0XTsK
KyAgICBbc3R5bGUgc2V0QWxpZ25tZW50OmFsaWduXTsKKyAgICBOU0RpY3Rpb25hcnkgKmRpY3Qg
PSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6YmxhY2tTaGFkb3cs
IE5TU2hhZG93QXR0cmlidXRlTmFtZSwgc3R5bGUsIE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVO
YW1lLCBuaWxdOworICAgIFtzdHlsZSByZWxlYXNlXTsKKworICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqIGF0dHJTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6c3RyaW5nIGF0dHJpYnV0ZXM6ZGljdF07CisgICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1dG9y
ZWxlYXNlXTsgICAgCit9CisKKy0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQKK3sKKyAg
ICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsKKwor
ICAgIC8vIE5lZ2F0aXZlIG51bWJlcgorICAgIHJldHVybiBzdHJpbmdUb1RpbWVUZXh0QXR0cmli
dXRlZCh0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jdXJyZW50VGltZSgp
IC0gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5kdXJhdGlvbigpKSwgTlNMZWZ0VGV4dEFsaWdu
bWVudCk7Cit9CisKKy0gKE5TU3RyaW5nICopZWxhcHNlZFRpbWVUZXh0Cit7CisgICAgaWYgKCFb
X2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVybiBAIiI7CisKKyAgICByZXR1
cm4gc3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQodGltZVRvU3RyaW5nKFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XS0+Y3VycmVudFRpbWUoKSksIE5TUmlnaHRUZXh0QWxpZ25tZW50KTsKK30KKwor
LyoKKyAqICBUcmFja2luZyBhcmVhIGNhbGxiYWNrcworICoKKyAqLworCistICh2b2lkKW1vdXNl
RW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBIVUQg
d29uJ3QgYmUgaGlkZGVuIGZyb20gbm93CisgICAgX21vdXNlSXNJbkhVRCA9IFlFUzsKKyAgICBb
c2VsZiBmYWRlV2luZG93SW5dOworfQorCistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICop
dGhlRXZlbnQKK3sKKyAgICBfbW91c2VJc0luSFVEID0gTk87CisgICAgW3NlbGYgZmFkZVdpbmRv
d0luXTsKK30KKworLyoKKyAqICBJbnRlcmZhY2UgY2FsbGJhY2tzCisgKgorICovCisKKy0gKHZv
aWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcgoreworICAgIFtfZGVsZWdhdGUgcmVxdWVzdEV4
aXRGdWxsc2NyZWVuXTsgCit9CisKKy8qCisgKiAgV2luZG93IGNhbGxiYWNrCisgKgorICovCisK
Ky0gKHZvaWQpd2luZG93RGlkRXhwb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgor
eworICAgIFtzZWxmIHNjaGVkdWxlVGltZVVwZGF0ZV07Cit9CisKKy0gKHZvaWQpd2luZG93RGlk
Q2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgW3NlbGYgdW5zY2hl
ZHVsZVRpbWVVcGRhdGVdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpp
bmRleCA4NTFkMDMxLi42MGRkMWE4IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtOTMsNiArOTMs
NyBAQAogI2ltcG9ydCAiV2ViVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRl
LmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlci5oIgogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTZXQuaD4K
ICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CkBAIC0yNDc2LDcgKzI0NzcsNyBAQCBzdGF0aWMg
Ym9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2Fyb3VuZCgpCiAgICAgCiAgICAgaWYgKFtz
ZWxmIF9uZWVkc0ZyYW1lTG9hZERlbGVnYXRlUmV0YWluUXVpcmtdKQogICAgICAgICBbX3ByaXZh
dGUtPmZyYW1lTG9hZERlbGVnYXRlIHJlbGVhc2VdOwotICAgICAgICAKKwogICAgIFtfcHJpdmF0
ZSByZWxlYXNlXTsKICAgICAvLyBbc3VwZXIgZGVhbGxvY10gY2FuIGVuZCB1cCBkaXNwYXRjaGlu
ZyBhZ2FpbnN0IF9wcml2YXRlICgzNDY2MDgyKQogICAgIF9wcml2YXRlID0gbmlsOwpAQCAtNTQ1
Myw2ICs1NDU0LDQ1IEBAIHN0YXRpYyB2b2lkIHZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXJDYWxs
QmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0CiAKICNlbmRpZgogCisjaWYg
RU5BQkxFKFZJREVPKQorCistICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJDb3Jl
OjpOb2RlKilub2RlCit7CisgICAgQVNTRVJUKG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRN
TE5hbWVzOjp2aWRlb1RhZykpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPiAobm9kZSk7CisKKyAgICBpZiAoX3ByaXZh
dGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CisgICAgICAgIGlmIChbX3ByaXZhdGUtPmZ1bGxz
Y3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0gPT0gdmlkZW9FbGVtZW50KSB7CisgICAgICAg
ICAgICAvLyBUaGUgYmFja2VuZCBtYXkganVzdCB3YXJuIHVzIHRoYXQgdGhlIHVuZGVybGF5aW5n
IHBsYWZ0b3JtTW92aWUoKQorICAgICAgICAgICAgLy8gaGFzIGNoYW5nZWQuIEp1c3QgZm9yY2Ug
YW4gdXBkYXRlLgorICAgICAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBz
ZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm8g
bW9yZSB0byBkby4KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IGV4aXQgRnVsbHNjcmVl
biBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgLy8g
VGhpcyBwcmV2aW91cyBjYWxsIGhhcyB0byB0cmlnZ2VyIF9leGl0RnVsbHNjcmVlbiwKKyAgICAg
ICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlci4K
KyAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpOworICAgIH0K
KyAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcikgeworICAgICAgICBfcHJp
dmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgYWxsb2NdIGluaXRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVy
IHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1bGxz
Y3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpbW3NlbGYgd2luZG93XSBzY3JlZW5dXTsg
ICAgICAgIAorICAgIH0KKyAgICBlbHNlCisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNv
bnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07Cit9CisKKy0gKHZvaWQpX2V4
aXRGdWxsc2NyZWVuCit7CisgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBleGl0
RnVsbHNjcmVlbl07CisgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciByZWxlYXNl
XTsKKyAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBuaWw7Cit9CisKKyNlbmRp
ZgorCiBAZW5kCiAKICNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
RGF0YS5oCmluZGV4IGIwNDNmMWUuLjUyNjc3NWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5o
CkBAIC00Myw2ICs0Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEBjbGFzcyBXZWJQcmVmZXJl
bmNlczsKIEBjbGFzcyBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXI7CiBAcHJvdG9jb2wgV2Vi
Rm9ybURlbGVnYXRlOworI2lmIEVOQUJMRShWSURFTykKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyOworI2VuZGlmCiAKIGV4dGVybiBCT09MIGFwcGxpY2F0aW9uSXNUZXJtaW5h
dGluZzsKIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKQEAgLTE1Nyw1ICsx
NjAsOCBAQCBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7CiAgICAgTlNFdmVu
dCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKIAogICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0
ZU1vdXNlb3ZlclRpbWVyOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyICpmdWxsc2NyZWVuQ29udHJvbGxlcjsKKyNlbmRpZgogfQogQGVuZApkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdEYXRhLm1tCmluZGV4IDQ4ZTdmNmMuLjdlMDcxMDUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0RhdGEubW0KQEAgLTgwLDYgKzgwLDcgQEAgaW50IHBsdWdpbkRhdGFiYXNlQ2xp
ZW50Q291bnQgPSAwOwogICAgIEFTU0VSVChhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgfHwgIXBh
Z2UpOwogICAgIEFTU0VSVChhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgfHwgIXByZWZlcmVuY2Vz
KTsKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQpOworICAgIEFTU0VSVCghZnVsbHNj
cmVlbkNvbnRyb2xsZXIpOwogCiAgICAgW2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCByZWxl
YXNlXTsKICAgICBbYmFja2dyb3VuZENvbG9yIHJlbGVhc2VdOwpAQCAtOTksNiArMTAwLDcgQEAg
aW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwOwogewogICAgIEFTU0VSVF9NQUlOX1RI
UkVBRCgpOwogICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFzdGVib2FyZCk7CisgICAgQVNTRVJUKCFm
dWxsc2NyZWVuQ29udHJvbGxlcik7CiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDcxNGRhODcuLjhiN2EyOTYgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAorKysgYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKICAgICBj
bGFzcyBQYWdlOworICAgIGNsYXNzIE5vZGU7CiB9CiAjZW5kaWYKIApAQCAtMTY4LDQgKzE2OSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLSAodm9pZClfc2V0SW5zZXJ0aW9uUGFzdGVib2Fy
ZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIAorI2lmIEVOQUJMRShWSURFTykgJiYgZGVm
aW5lZChfX2NwbHVzcGx1cykKKy0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNv
cmU6Ok5vZGUqKW5vZGU7CistICh2b2lkKV9leGl0RnVsbHNjcmVlbjsKKyNlbmRpZgorCiBAZW5k
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmggYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2M0ZThlZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworQGludGVyZmFjZSBXZWJXaW5kb3dTY2FsZUFuaW1h
dGlvbiA6IE5TQW5pbWF0aW9uIHsKKyAgICBOU1JlY3QgX2luaXRpYWxGcmFtZSwgX2ZpbmFsRnJh
bWUsIF9yZWFsRnJhbWU7CisgICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCisgICAg
TlNBbmltYXRpb24gKl9zdWJBbmltYXRpb247IC8vIChyZXRhaW4pCisgICAgTlNUaW1lSW50ZXJ2
YWwgX2hpbnRlZER1cmF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxGcmFt
ZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZTsKKwor
LSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uOworCistIChO
U1JlY3QpY3VycmVudEZyYW1lOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0
byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClz
ZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAorCisKK0BpbnRlcmZhY2UgV2ViV2lu
ZG93RmFkZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxw
aGEsIF9maW5hbEFscGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAocmV0YWluKQorICAg
IEJPT0wgX2lzU3RvcHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhh
OihDR0Zsb2F0KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7CisK
Ky0gKENHRmxvYXQpY3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93
Om5pbCB0byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAo
dm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tIGIvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE5ZDliMzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93
QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXZWJXaW5k
b3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGljIGNvbnN0IENHRmxvYXQgc2xvbW9GYWN0b3Ig
PSAxMC47CisKK3N0YXRpYyBOU1RpbWVJbnRlcnZhbCBXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlv
bkZyb21EdXJhdGlvbihOU1RpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gKFtO
U0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2spID8gZHVyYXRpb24gKiBzbG9t
b0ZhY3RvciA6IGR1cmF0aW9uOyAgICAgICAgCit9CisKK3N0YXRpYyBOU1JlY3Qgc2NhbGVkUmVj
dChOU1JlY3QgX2luaXRpYWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBkb3VibGUgZmFjdG9y
KQoreworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IF9pbml0aWFsRnJhbWU7CisgICAgY3VycmVu
dFJlY3Qub3JpZ2luLnggKz0gKE5TTWluWChfZmluYWxGcmFtZSkgLSBOU01pblgoX2luaXRpYWxG
cmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi55ICs9IChOU01pblkoX2Zp
bmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJyZW50
UmVjdC5zaXplLndpZHRoICs9IChOU1dpZHRoKF9maW5hbEZyYW1lKSAtIE5TV2lkdGgoX2luaXRp
YWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0LnNpemUuaGVpZ2h0ICs9IChOU0hl
aWdodChfZmluYWxGcmFtZSkgLSBOU0hlaWdodChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7Cisg
ICAgcmV0dXJuIGN1cnJlbnRSZWN0OworfQorCitzdGF0aWMgQ0dGbG9hdCBzcXVhcmVkRGlzdGFu
Y2UoTlNQb2ludCBwb2ludDEsIE5TUG9pbnQgcG9pbnQyKQoreworICAgIENHRmxvYXQgZGVsdGFY
ID0gcG9pbnQxLnggLSBwb2ludDIueDsKKyAgICBDR0Zsb2F0IGRlbHRhWSA9IHBvaW50MS55IC0g
cG9pbnQyLnk7CisgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWTsK
K30KKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uCistIChpZClpbml0
Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgICAgICBbc2VsZiBzZXRB
bmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsKKyAg
ICAgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwLl07CisgICAgfQorICAgIHJldHVybiBzZWxmOwor
fQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlv
biB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZy
YW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1lCit7CisgICAgaWYgKChzZWxmID0gW3Nl
bGYgaW5pdF0pKSB7CisgICAgICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgICAg
ICBfd2luZG93ID0gd2luZG93OworICAgICAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1l
OworICAgICAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgICAgIF9yZWFsRnJhbWUg
PSBbd2luZG93IGZyYW1lXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
IGRlYWxsb2MKK3sKKyAgICBbX3dpbmRvdyByZWxlYXNlXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBy
ZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldp
bmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKHZv
aWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdworeworICAgIF93aW5kb3cgPSB3aW5kb3c7
Cit9CisKKy0gKGZsb2F0KWN1cnJlbnRWYWx1ZQoreworICAgIHJldHVybiAwLjUgLSAwLjUgKiBj
b3MoTV9QSSAqICgxIC0gW3NlbGYgY3VycmVudFByb2dyZXNzXSkpOworfQorCistIChOU1JlY3Qp
Y3VycmVudEZyYW1lCit7CisgICAgcmV0dXJuIHNjYWxlZFJlY3QoX2ZpbmFsRnJhbWUsIF9pbml0
aWFsRnJhbWUsIFtzZWxmIGN1cnJlbnRWYWx1ZV0pOworfQorCistICh2b2lkKXNldEN1cnJlbnRQ
cm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmICghX3dpbmRv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9n
cmVzc107CisKKyAgICBOU1JlY3QgY3VycmVudFJlY3QgPSBbc2VsZiBjdXJyZW50RnJhbWVdOwor
ICAgIFdLV2luZG93U2V0U2NhbGVkRnJhbWUoX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJh
bWUpOworICAgIFtfc3ViQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9
CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgorewor
ICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9zdWJBbmltYXRpb247CisgICAgX3N1YkFuaW1hdGlvbiA9
IFthbmltYXRpb24gcmV0YWluXTsKKyAgICBbb2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQorCist
IChOU1RpbWVJbnRlcnZhbClhZGRpdGlvbmFsRHVyYXRpb24KK3sKKyAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBtYXhBZGRpdGlvbmFsRHVyYXRpb24gPSAxLjA7CisgICAgc3RhdGljIGNvbnN0IENH
RmxvYXQgc3BlZWRGYWN0b3IgPSAwLjAwMDE7CisgICAgCisgICAgQ0dGbG9hdCBtYXhEaXN0ID0g
c3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJhbWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmlnaW4p
OworICAgIENHRmxvYXQgZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5T
TWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwg
TlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOwor
ICAgIGlmKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAg
ICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZyYW1l
KSwgTlNNYXhZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZyYW1l
KSwgTlNNYXhZKF9maW5hbEZyYW1lKSkpOworICAgIGlmKGRpc3QgPiBtYXhEaXN0KQorICAgICAg
ICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFr
ZVBvaW50KE5TTWluWChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNN
YWtlUG9pbnQoTlNNaW5YKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAg
IGlmKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICBy
ZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkgKiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25hbER1cmF0
aW9uKTsgICAgCit9CisKKy0gKHZvaWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICAvLyBDb21wdXRl
IGV4dHJhIHRpbWUKKyAgICBpZiAoX2hpbnRlZER1cmF0aW9uKQorICAgICAgICBbc2VsZiBzZXRE
dXJhdGlvbjpfaGludGVkRHVyYXRpb24gKyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25dXTsKKyAg
ICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXN0b3BBbmltYXRpb24KK3sK
KyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3N1
YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YldpbmRvd0ZhZGVBbmltYXRpb24KKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKSB7CisgICAgICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0Fu
aW1hdGlvbk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgICAgICBbc2VsZiBzZXRGcmFtZVJhdGU6
NjAuXTsKKyAgICAgICAgW3NlbGYgc2V0QW5pbWF0aW9uQ3VydmU6TlNBbmltYXRpb25FYXNlSW5P
dXRdOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhEdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0
aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxB
bHBoYQoreworICAgIGlmICgoc2VsZiA9IFtzZWxmIGluaXRdKSkgeworICAgICAgICBbc2VsZiBz
ZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgICAgIF93aW5kb3cgPSB3aW5kb3c7CisgICAgICAg
IF9pbml0aWFsQWxwaGEgPSBpbml0aWFsQWxwaGE7CisgICAgICAgIF9maW5hbEFscGhhID0gZmlu
YWxBbHBoYTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldl
YldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0g
KENHRmxvYXQpY3VycmVudEFscGhhCit7CisgICAgcmV0dXJuIE1BWCgwLjAsIE1JTigxLjAsIF9p
bml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9maW5hbEFscGhhIC0gX2luaXRp
YWxBbHBoYSkpKTsKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9u
UHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBpZiAoX2lzU3RvcHBlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKF93aW5kb3cpOworICAgIFdLV2luZG93U2V0QWxwaGEoX3dpbmRvdywg
W3NlbGYgY3VycmVudEFscGhhXSk7CisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9n
cmVzc107Cit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93Cit7CisgICAg
X3dpbmRvdyA9IHdpbmRvdzsKK30KKworLSAodm9pZClzdG9wQW5pbWF0aW9uCit7CisgICAgLy8g
VGhpcyBpcyByZWxldmFudCB3aGVuIHdlIGFyZSBhIHN1YiBhbmltYXRpb24gb2YgYSBzY2FsZSBh
bmltYXRpb24uCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSBob3N0ZWQgaW4gdGhlIGFuaW1h
dGVkIHRocmVhZCBvZiB0aGUgcGFyZW50CisgICAgLy8gYW5kIGV2ZW4gYWZ0ZXIgW3N1cGVyIHN0
b3BBbmltYXRpb25dLCB0aGUgcGFyZW50IG1pZ2h0IGNhbGwKKyAgICAvLyBzZXRDdXJycmVudFBy
b2dyZXNzLgorICAgIF9pc1N0b3BwZWQgPSBZRVM7CisKKyAgICBbc3VwZXIgc3RvcEFuaW1hdGlv
bl07Cit9CisKK0BlbmQKKw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33903</attachid>
            <date>2009-07-31 15:02:30 -0700</date>
            <delta_ts>2009-07-31 17:52:18 -0700</delta_ts>
            <desc>Support Fullscreen for video element</desc>
            <filename>bug-26742-20090731150229.patch</filename>
            <type>text/plain</type>
            <size>70303</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCAyYzk0ZGYwLi5iY2RmZTM4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC03MzQsNiArNzM0LDEwIEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUExVR0lOX1BST1hZ
X0ZPUl9WSURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUExVCiAgICAgIFdFQkNPUkVf
RVhQT1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2Vi
Q29yZS5WaWRlb1Byb3h5LmV4cAogZW5kaWYKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9W
SURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfVklERU8pCisgICAgIFdFQkNPUkVfRVhQ
T1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2ViQ29y
ZS5WaWRlby5leHAKK2VuZGlmCisKIFdlYkNvcmUuZXhwIDogV2ViQ29yZS5iYXNlLmV4cCAkKFdF
QkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykKIAljYXQgJF4gPiAkQAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwIGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDA2MGY2Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApAQCAtMCwwICsxLDExIEBACitfX1pON1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ0cGxheUV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQ1cGF1c2VFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZ2b2x1bWVFdgorX19a
Tks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDdjYW5QbGF5RXYKK19fWk5LN1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb25FdgorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50
OXNldFZvbHVtZUVmUmkKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEwc2NyZWVuUmVj
dEV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTFjdXJyZW50VGltZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNwbGF0Zm9ybU1vdmllRXYKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDE0c2V0Q3VycmVudFRpbWVFZlJpCitfX1pON1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQxNGV4aXRGdWxsc2NyZWVuRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA4ZDM5NWI0Li4z
YjRlOGM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03MzIsNiArNzMyLDcgQEAgX19aTjdXZWJDb3JlOUhUTUxO
YW1lczdzcmNBdHRyRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczhmcmFtZVRhZ0UKIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGlucHV0VGFn
RQorX19aTjdXZWJDb3JlOUhUTUxOYW1lczh2aWRlb1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRUYWdFCiBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDY5MWQyZTcuLmE2MGRjNTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTMxLDYgKzU5MzEsNyBAQAogCQk2MzE4
OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRl
clN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVSZW5kZXJTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2M0YzNzFDRDEwMEU3OTAwMDBCQkE4
N0EgLyogV2ViQ29yZS5WaWRlby5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBh
dGggPSBXZWJDb3JlLlZpZGVvLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUwRkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGQkYyODBEOUFGMDQ3MDA4RkMyOTIgLyogU1ZH
SEtlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0hLZXJu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwMDAsNiArMTAwMDEs
NyBAQAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJz
LmV4cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9y
ZWlnbk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNv
cmUuVGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3Jl
LlZpZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5W
aWRlb1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCAyNTFlODVmLi5jYWZlODM2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgor
I2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTEwLDYgKzExMiw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChm
YWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNj
cmVlbihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1f
bmVlZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjM4LDYgKzI0MSwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1
bGVMb2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7Cisg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhU
TUxFbGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCkBAIC0xNjA4LDYgKzE2MTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK0ludFJlY3QgSFRNTE1l
ZGlhRWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVjdCgwLDAs
MCwwKTsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJl
cigpLT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAg
ICAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNjc4LDYgKzE2
OTUsMjYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQog
fQogI2VuZGlmCiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sK
KyAgICBBU1NFUlQoIW1faXNGdWxsc2NyZWVuKTsKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmVudGVyRnVsbHNjcmVl
bkZvck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSB0cnVlOworfQorCit2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9pc0Z1bGxz
Y3JlZW4pOworICAgIGlmIChkb2N1bWVudCgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworICAgIG1f
aXNGdWxsc2NyZWVuID0gZmFsc2U7Cit9CisKK3ZvaWQqIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRm
b3JtTW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllciA/IG1fcGxheWVyLT5wbGF0
Zm9ybU1vdmllKCkgOiAwOworfSAgICAgICAgCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKaW5kZXggMjdiNDhlYS4uNDE1YjU4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBA
IC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwpAQCAtNzIsNiAr
NzMsOCBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRl
b0VsZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH07CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2F2ZSgpIGNvbnN0Owor
ICAgIAorICAgIHZvaWQqIHBsYXRmb3JtTW92aWUoKSBjb25zdDsKIAogICAgIHZvaWQgc2NoZWR1
bGVMb2FkKCk7CiAgICAgCkBAIC0xNDAsNiArMTQzLDggQEAgcHVibGljOgogICAgIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKTsKICAgICB2b2lkIGVuZFNjcnViYmluZygpOwogCisgICAgSW50UmVjdCBz
Y3JlZW5SZWN0KCk7CisKICAgICBib29sIGNhblBsYXkoKSBjb25zdDsKIAogICAgIGZsb2F0IHBl
cmNlbnRMb2FkZWQoKSBjb25zdDsKQEAgLTE1Myw2ICsxNTgsOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiAhbV9w
bGF5ZXIgfHwgbV9wbGF5ZXItPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCk7IH0KKyAgICAKKyAg
ICB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAog
cHJvdGVjdGVkOgogICAgIGZsb2F0IGdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGZsb2F0IHZhbHVlT25FcnJvcikgY29uc3Q7CkBAIC0zMDQsNiArMzEyLDggQEAg
cHJvdGVjdGVkOgogICAgIC8vIHN1cHBvcnQgcHJvZ3Jlc3MgZXZlbnRzIHNvIHNldHRpbmcgbV9z
ZW5kUHJvZ3Jlc3NFdmVudHMgZGlzYWJsZXMgdGhlbSAKICAgICBib29sIG1fc2VuZFByb2dyZXNz
RXZlbnRzIDogMTsKIAorICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4gOiAxOworCiAjaWYgRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgYm9vbCBtX25lZWRXaWRnZXRVcGRhdGUgOiAx
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRleCBkYzk3MTRhLi4xYmRiMmY3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBFTkFCTEUoVklE
RU8pCiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw3ICs1Miw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCB7IHJldHVybiBwbGF5
ZXIoKSAmJiBwbGF5ZXIoKS0+aGFzVmlkZW8oKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBwbGF5ZXIoKSAmJiBwbGF5ZXIoKS0+c3VwcG9y
dHNGdWxsc2NyZWVuKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKaW5kZXggMmE5MDYxMS4uZWZkNzdmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAt
MTk0LDYgKzE5NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZVZpZXdVcGRhdGUoKSA9IDA7CiAjZW5kaWYKIAorICAgICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0K
KyAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICB2aXJ0dWFsIEtleWJvYXJkVUlN
b2RlIGtleWJvYXJkVUlNb2RlKCkgeyByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OyB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggZDdkOGNlZi4u
NWFlODczOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHBhdXNlKCkgeyB9ICAgIAogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkKiBw
bGF0Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBJbnRTaXpl
IG5hdHVyYWxTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQogCkBAIC0zMDMs
MTEgKzMwMyw2IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OnNlZWtpbmcoKSBjb25zdAogICAgIHJldHVy
biBtX3ByaXZhdGUtPnNlZWtpbmcoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c0Z1bGxz
Y3JlZW4oKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNTYXZlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c1NhdmUoKTsKQEAgLTMzMSw2ICszMjYsMTEg
QEAgYm9vbCBNZWRpYVBsYXllcjo6aW5NZWRpYURvY3VtZW50KCkKICAgICByZXR1cm4gZG9jdW1l
bnQgJiYgZG9jdW1lbnQtPmlzTWVkaWFEb2N1bWVudCgpOwogfQogCit2b2lkKiBNZWRpYVBsYXll
cjo6cGxhdGZvcm1Nb3ZpZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZv
cm1Nb3ZpZSgpOworfQorCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyOjpu
ZXR3b3JrU3RhdGUoKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm5ldHdvcmtTdGF0ZSgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDdmNWYyYTAuLmNlYTlk
YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTY4LDcgKzY4
LDcgQEAgcHVibGljOgogCiAgICAgLy8gdGltZSBoYXMganVtcGVkLCBlZy4gbm90IGFzIGEgcmVz
dWx0IG9mIG5vcm1hbCBwbGF5YmFjawogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclRpbWVD
aGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9Ci0gICAgCisKICAgICAvLyB0aGUgbWVkaWEgZmlsZSBk
dXJhdGlvbiBoYXMgY2hhbmdlZCwgb3IgaXMgbm93IGtub3duCiAgICAgdmlydHVhbCB2b2lkIG1l
ZGlhUGxheWVyRHVyYXRpb25DaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9CiAgICAgCkBAIC0xMDcs
MTUgKzEwNywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmc+Jik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotICAg
IGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1NhdmUo
KSBjb25zdDsKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7CisKICAgICBJbnRTaXpl
IG5hdHVyYWxTaXplKCk7CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0
RnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3
OyB9CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQog
ICAgIGJvb2wgaW5NZWRpYURvY3VtZW50KCk7Ci0gICAgCisKICAgICBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclBy
aXZhdGUuaAppbmRleCA2ZDEzNTliLi44YjYxZmUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTQyLDExICs0MiwxMiBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOwotICAgIAorCisgICAgdmlydHVhbCB2b2lkKiBw
bGF0Zm9ybU1vdmllKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBs
YXkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAKIAotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NhdmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgK
aW5kZXggNTRlZWEwMC4uNjExMGFmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCkBAIC03Nyw2ICs3Nyw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOwogICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CiAKKyAgICB2b2lkKiBwbGF0Zm9ybU1vdmllKCkgY29uc3Q7
CisKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQppbmRleCBjMWQ3ZmNiLi43MjI4NmQzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVR
VEtpdC5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbQpAQCAtNTYyLDYgKzU2MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0
RGVsYXlDYWxsYmFja3M6Tk9dOwogfQogCit2b2lkKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRm
b3JtTW92aWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3F0TW92aWUuZ2V0KCk7Cit9CisKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKIHsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxh
YmxlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXgg
ZDBhZjk4MS4uN2Y0ZDUyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtNTI1LDYgKzUyNSw3IEBAIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVuCiB2b2lk
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgeworICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKCk7
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ODk0OTg5Li5jZGYzOTZkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIsNiArMTAyLDEyIEBACiAJCTVERTgz
QTdDMEQwRjdGOTQwMENBRDEyQSAvKiBXZWJWaWV3RWRpdGluZ0NvbnRleHRNZW51T2xkLm5pYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFODNBNzgw
RDBGN0Y5NDAwQ0FEMTJBIC8qIFdlYlZpZXdFZGl0aW5nQ29udGV4dE1lbnVPbGQubmliICovOyB9
OwogCQk1REU4M0E3RjBEMEY3RkFEMDBDQUQxMkEgLyogTG9jYWxpemFibGUuc3RyaW5ncyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFODNBN0QwRDBG
N0ZBRDAwQ0FEMTJBIC8qIExvY2FsaXphYmxlLnN0cmluZ3MgKi87IH07CiAJCTVERTkyRkVGMEJE
NzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU5MkZFRTBCRDcwMTdFMDA1OUE1RkQgLyogV2ViQXNz
ZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTYzM0ZGRkFFMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzM0ZGRkFDMTAxMEYy
RTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLzsgfTsKKwkJNjMzRkZGQUYxMDEw
RjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5tICovOyB9OworCQk2MzUyQUY5QjEwMUEyOTJFMDBGMjkwNkUgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjM1MkFGOTkxMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJNjM1MkFGOUMxMDFBMjkyRTAwRjI5MDZF
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJNjM4MzU5RDIxMDBDMzk2NDAw
MUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzODM1OUQwMTAwQzM5NjQw
MDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi87IH07
CisJCTYzODM1OUQzMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCTY1NDg4REExMDg0RkJDQ0IwMDgzMUFEMCAvKiBX
ZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NDg4RDlGMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlF
eHRyYXMuaCAqLzsgfTsKIAkJNjU0ODhEQTIwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlv
bmFyeUV4dHJhcy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU0ODhEQTAwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICov
OyB9OwogCQk2NTZEMzMzRTBBRjIxQUU5MDAyMTIxNjkgLyogV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTZEMzMzRDBBRjIxQUU5MDAyMTIxNjkgLyogV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3Niw2ICs0ODIsMTIgQEAKIAkJNURFODNBNzkwRDBGN0Y5NDAwQ0FEMTJBIC8qIEVuZ2xpc2gg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
Lm5pYjsgbmFtZSA9IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL1dlYlZpZXdFZGl0aW5n
Q29udGV4dE1lbnVPbGQubmliOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTVERTgz
QTdFMEQwRjdGQUQwMENBRDEyQSAvKiBFbmdsaXNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDEwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Quc3Ry
aW5nczsgbmFtZSA9IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0
cmluZ3M7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNURFOTJGRUUwQkQ3MDE3RTAw
NTlBNUZEIC8qIFdlYkFzc2VydGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkFzc2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjMzRkZG
QUMxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1h
dGlvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJXaW5kb3dBbmlt
YXRpb24ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM1MkFGOTkxMDFBMjkyRTAw
RjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyog
V2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjU0ODhEQTAwODRG
QkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJOU0RpY3Rpb25hcnlFeHRy
YXMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTY1NkQzMzNEMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0
ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZERlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5
NCw2ICsxMTA2LDEyIEBACiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdE
YXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJWaWV3SW50ZXJu
YWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmlld1ByaXZhdGUu
aCAqLywKKwkJCQk2MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5oICovLAorCQkJCTYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovLAorCQkJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFD
RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCisJCQkJNjM4
MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIubW0gKi8sCisJCQkJNjMzRkZGQUMxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0Fu
aW1hdGlvbi5oICovLAorCQkJCTYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dB
bmltYXRpb24ubSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBtYWMv
V2ViVmlldzsKQEAgLTE0NDQsNiArMTQ2Miw5IEBACiAJCQkJOTM5ODEwNDYwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5QjA4MjRC
RjAxMDA4REYwMzggLyogV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA3MTA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTYzODM1OUQyMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzNGRkZBRTEwMTBGMkU4MDBDNEU4
ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzUyQUY5QjEw
MUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xNzc0LDYgKzE3OTUsOSBAQAogCQkJCTkzOTgxMTA3MDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRTQ2NEUwRkQ4QTk2ODAwQTlE
OURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRTgwODI0QkYw
MTAwOERGMDM4IC8qIFdlYlZpZXdGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjM4MzU5
RDMxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk2MzNGRkZBRjEwMTBGMkU4MDBDNEU4ODEgLyogV2Vi
V2luZG93QW5pbWF0aW9uLm0gaW4gU291cmNlcyAqLywKKwkJCQk2MzUyQUY5QzEwMUEyOTJFMDBG
MjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggODUxZGVk
Zi4uZTNlNTc5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCkBAIC0xNDksNiArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVWaWV3VXBkYXRlKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisKICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R2VvbG9jYXRpb24qKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTYyYTljNS4uZTk3OTg1NCAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTU1LDYgKzU1LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HZW9sb2NhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4u
aD4KQEAgLTcxNSw2ICs3MTYsMjkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlVmll
d1VwZGF0ZSgpCiAKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKQorCitib29sIFdlYkNocm9t
ZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQorewor
ICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcp
OworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2Rl
KiBub2RlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbbV93ZWJW
aWV3IF9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOm5vZGVdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNjcmVlbkZvck5v
ZGUoTm9kZSopCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFttX3dl
YlZpZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAg
ICAKK30KKworI2VuZGlmCisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0R2VvbG9jYXRp
b25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRp
b24pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+
CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1l
bnQuaD4KKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsK
K0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdl
YldpbmRvd0ZhZGVBbmltYXRpb247CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlcgoreworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OyAvLyAocmV0YWluKQorICAgIGlkPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOyAvLyAoYXNzaWduKQorCisg
ICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFpbikKKyAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyKiBfaHVkQ29udHJvbGxlcjsg
Ly8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gKl9mYWRlQW5pbWF0aW9u
OyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxsc2NyZWVuOworICAgIEJPT0wg
X2lzV2luZG93TG9hZGVkOworICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworfQor
CistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwor
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudDsKKworLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2Ny
ZWVuOworLSAodm9pZClleGl0RnVsbHNjcmVlbjsKKworQGVuZAorCisjZW5kaWYKKwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0g
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZjZmZmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KQEAg
LTAsMCArMSw0MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0IDxR
VEtpdC9RVEtpdC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPEhJ
VG9vbGJveC9ISVRvb2xib3guaD4KKworI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4K
KworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKKworU09GVF9M
SU5LX0ZSQU1FV09SSyhRVEtpdCkKKworCitTT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUTW92aWVW
aWV3KQorCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93IDogTlNXaW5kb3cg
PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAgU0VMIF9jb250cm9sbGVyQWN0aW9uT25Bbmlt
YXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVBbmltYXRpb24gKl9mdWxsc2NyZWVuQW5pbWF0
aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFy
dFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlv
biAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJvbGxlckFjdGlvbjsK
K0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyICgpIDxXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyk7CisgICAgQVNTRVJU
KCFfZmFkZUFuaW1hdGlvbik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmlu
ZyAqKXdpbmRvd05pYk5hbWUKK3sKKyAgICByZXR1cm4gQCJObyBuaWIiOyAvLyBSZXF1aXJlZCB0
byBnZXQgLWxvYWRXaW5kb3cgdG8gYmUgY2FsbGVkLgorfQorCistICh2b2lkKWxvYWRXaW5kb3cK
K3sKKyAgICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1cmUgLXdp
bmRvd051bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmltYXRpb24p
LgorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyBhbGxv
Y10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NX
aW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAg
W3NlbGYgc2V0V2luZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKK30KKworLSAo
dm9pZCl3aW5kb3dEaWRMb2FkCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107CisgICAgUVRNb3ZpZVZpZXcgKnZpZXcgPSBbW2dldFFUTW92aWVWaWV3Q2xhc3MoKSBhbGxv
Y10gaW5pdF07CisgICAgW3ZpZXcgc2V0RmlsbENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsK
KyAgICBbd2luZG93IHNldENvbnRlbnRWaWV3OnZpZXddOworICAgIFt2aWV3IHNldENvbnRyb2xs
ZXJWaXNpYmxlOk5PXTsKKyAgICBbdmlldyBzZXRQcmVzZXJ2ZXNBc3BlY3RSYXRpbzpZRVNdOwor
ICAgIFt2aWV3IHNldE1vdmllOihRVE1vdmllICopX21lZGlhRWxlbWVudC0+cGxhdGZvcm1Nb3Zp
ZSgpXTsKKyAgICBbd2luZG93IHNldEhhc1NoYWRvdzpZRVNdOworICAgIFt3aW5kb3cgc2V0TGV2
ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbC0xXTsKKyAgICBbdmlldyByZWxlYXNlXTsKK30KKwor
LSAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJl
dHVybiAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0g
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sKKyAgICByZXR1cm4g
X21lZGlhRWxlbWVudC5nZXQoKTsKK30KKworLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sKKyAgICBfbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50OworICAgIGlmIChbc2VsZiBpc1dpbmRvd0xvYWRlZF0pIHsKKyAgICAg
ICAgUVRNb3ZpZVZpZXcgKm1vdmllVmlldyA9IChRVE1vdmllVmlldyAqKVtbc2VsZiB3aW5kb3dd
IGNvbnRlbnRWaWV3XTsKKyAgICAgICAgW21vdmllVmlldyBzZXRNb3ZpZTooUVRNb3ZpZSAqKV9t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTW92aWUoKV07CisgICAgfQorfQorCistIChpZDxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgcmV0dXJuIF9k
ZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKK30KKworLSAodm9pZCljbGVhckZhZGVBbmltYXRpb24KK3sKKyAgICBbX2ZhZGVBbmltYXRp
b24gc3RvcEFuaW1hdGlvbl07CisgICAgW19mYWRlQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOwor
ICAgIFtfZmFkZUFuaW1hdGlvbiBhdXRvcmVsZWFzZV07CisgICAgX2ZhZGVBbmltYXRpb24gPSBu
aWw7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBj
bGVhckZhZGVBbmltYXRpb25dOworICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKKyAgICBbc2Vs
ZiBzZXRXaW5kb3c6bmlsXTsKKyAgICBTZXRTeXN0ZW1VSU1vZGUoa1VJTW9kZU5vcm1hbCwgMCk7
CisgICAgW19odWRDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19odWRDb250cm9s
bGVyIHJlbGVhc2VdOworICAgIF9odWRDb250cm9sbGVyID0gbmlsOworICAgIFtfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2VdOworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgcmVsZWFzZV07CisgICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOworICAg
IAorICAgIFtzZWxmIGF1dG9yZWxlYXNlXTsgIC8vIEZyb20gaW4gZXhpdEZ1bGxzY3JlZW4KKyAg
ICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJG
dWxsc2NyZWVuCit7CisgICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKworICAgIEFTU0VS
VCghX2h1ZENvbnRyb2xsZXIpOworICAgIF9odWRDb250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBfaHVkQ29udHJvbGxl
ci5kZWxlZ2F0ZSA9IHNlbGY7CisgICAgaWYgKF9tZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgewor
ICAgICAgICAvLyBPbmx5IGZhZGUgdGhlIGh1ZCB3aW5kb3cgaWYgd2UgYXJlIHBhdXNlZC4KKyAg
ICAgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5kb3dJbl07CisgICAgfQorICAgIFNldFN5c3Rl
bVVJTW9kZShrVUlNb2RlQWxsU3VwcHJlc3NlZCAsIDApOworICAgIFtOU0N1cnNvciBzZXRIaWRk
ZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKK30KKworLSAoTlNSZWN0KW1lZGlhRWxlbWVudFJlY3QK
K3sKKyAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+c2NyZWVuUmVjdCgpOworfQorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50ZXJmYWNlCisKKy0gKHZvaWQpZW50ZXJG
dWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAg
ICAgc2NyZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGZyYW1lID0g
W3NlbGYgbWVkaWFFbGVtZW50UmVjdF07CisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NjcmVlbiBm
cmFtZV07CisKKyAgICAvLyBLZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUg
ZGVzdGluYXRpb24gd2luZG93CisgICAgZG91YmxlIG9yaWdpbmFsUmF0aW8gPSBmcmFtZS5zaXpl
LndpZHRoIC8gZnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAgZG91YmxlIG5ld1JhdGlvID0gZW5kRnJh
bWUuc2l6ZS53aWR0aCAvIGVuZEZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+
IG9yaWdpbmFsUmF0aW8pCisgICAgeworICAgICAgICBkb3VibGUgbmV3V2lkdGggPSBvcmlnaW5h
bFJhdGlvICogZW5kRnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAgICAgIGRvdWJsZSBkaWZmID0gZW5k
RnJhbWUuc2l6ZS53aWR0aCAtIG5ld1dpZHRoOworICAgICAgICBlbmRGcmFtZS5zaXplLndpZHRo
ID0gbmV3V2lkdGg7CisgICAgICAgIGVuZEZyYW1lLm9yaWdpbi54ICs9IGRpZmYgLyAyOworICAg
ICAgICAKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBuZXdIZWlnaHQgPSBlbmRG
cmFtZS5zaXplLndpZHRoIC8gb3JpZ2luYWxSYXRpbzsKKyAgICAgICAgZG91YmxlIGRpZmYgPSBl
bmRGcmFtZS5zaXplLmhlaWdodCAtIG5ld0hlaWdodDsKKyAgICAgICAgZW5kRnJhbWUuc2l6ZS5o
ZWlnaHQgPSBuZXdIZWlnaHQ7CisgICAgICAgIGVuZEZyYW1lLm9yaWdpbi55ICs9IGRpZmYgLyAy
OworICAgIH0gICAgCisKKyAgICAvLyBDcmVhdGUgYSBibGFjayB3aW5kb3cgaWYgbmVlZGVkCisg
ICAgaWYgKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cpIHsKKyAgICAgICAgX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVj
dDpbc2NyZWVuIGZyYW1lXSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5n
Ok5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgICAgICBbX2JhY2tncm91bmRG
dWxsc2NyZWVuV2luZG93IHNldE9wYXF1ZTpZRVNdOworICAgICAgICBbX2JhY2tncm91bmRGdWxs
c2NyZWVuV2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBibGFja0NvbG9yXV07Cisg
ICAgICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgc2V0TGV2ZWw6W1tzZWxmIHdpbmRv
d10gbGV2ZWxdLTFdOworICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNldEhp
ZGVzT25EZWFjdGl2YXRlOllFU107CisgICAgICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgc2V0RnJhbWU6W3NjcmVlbiBmcmFtZV0gZGlz
cGxheTpOT107CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdlIHN1cHBvcnQgcXVldWluZyBh
bmltYXRpb24gaWYgdGhlIHByZXZpb3VzIG9uZSBpc24ndCBvdmVyIHlldAorICAgIENHRmxvYXQg
aW5pdGlhbEFscGhhID0gMDsKKyAgICBpZiAoX2ZhZGVBbmltYXRpb24pIHsKKyAgICAgICAgW19m
YWRlQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgICAgICBpbml0aWFsQWxwaGEgPSBbX2Zh
ZGVBbmltYXRpb24gY3VycmVudEFscGhhXTsKKyAgICAgICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0
aW9uXTsKKyAgICB9CisgICAgaWYgKCFfZm9yY2VEaXNhYmxlQW5pbWF0aW9uKQorICAgICAgICBf
ZmFkZUFuaW1hdGlvbiA9IFtbV2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhE
dXJhdGlvbjowLjIgd2luZG93Ol9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxw
aGE6aW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6MV07CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBkaXNhYmxlIGFuaW1hdGlvbgorICAgICAgICBmcmFtZSA9IE5TWmVyb1JlY3Q7Cisg
ICAgfQorICAgIFtbc2VsZiBmdWxsc2NyZWVuV2luZG93XSBhbmltYXRlRnJvbVJlY3Q6ZnJhbWUg
dG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24gY29udHJvbGxl
ckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRW50ZXJGdWxsc2NyZWVuKV07CisKKyAgICBbX2Jh
Y2tncm91bmRGdWxsc2NyZWVuV2luZG93IG9yZGVyV2luZG93Ok5TV2luZG93QmVsb3cgcmVsYXRp
dmVUbzpbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gd2luZG93TnVtYmVyXV07Cit9CisKKy0gKHZv
aWQpZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVlbikKKyAgICAg
ICAgcmV0dXJuOworICAgIF9pc0VuZGluZ0Z1bGxzY3JlZW4gPSBZRVM7CisgICAgW19odWRDb250
cm9sbGVyIGNsb3NlV2luZG93XTsKKworICAgIENHRmxvYXQgaW5pdGlhbEFscGhhID0gMTsKKyAg
ICBpZiAoX2ZhZGVBbmltYXRpb24pIHsKKyAgICAgICAgaW5pdGlhbEFscGhhID0gW19mYWRlQW5p
bWF0aW9uIGN1cnJlbnRBbHBoYV07CisgICAgICAgIFtzZWxmIGNsZWFyRmFkZUFuaW1hdGlvbl07
CisgICAgfQorICAgIAorICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtzZWxmIG1lZGlhRWxlbWVudFJl
Y3RdOworCisgICAgaWYgKCFfZm9yY2VEaXNhYmxlQW5pbWF0aW9uICYmIFtbc2VsZiBmdWxsc2Ny
ZWVuV2luZG93XSBpc0tleVdpbmRvd10pCisgICAgICAgIF9mYWRlQW5pbWF0aW9uID0gX2JhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93ID8gW1tXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIGFsbG9jXSBp
bml0V2l0aER1cmF0aW9uOjAuMiB3aW5kb3c6X2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IGlu
aXRpYWxBbHBoYTppbml0aWFsQWxwaGEgZmluYWxBbHBoYTowXSA6IG5pbDsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgYW5pbWF0aW9uCisgICAgICAgIGVuZEZyYW1l
ID0gTlNaZXJvUmVjdDsKKyAgICB9CisKKyAgICBbc2VsZiByZXRhaW5dOyAvLyBCYWxhbmNlZCBp
biB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbgorICAgIFtbc2VsZiBmdWxsc2NyZWVuV2luZG93XSBh
bmltYXRlRnJvbVJlY3Q6W1tzZWxmIHdpbmRvd10gZnJhbWVdIHRvUmVjdDplbmRGcmFtZSB3aXRo
U3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuKV07Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1h
cmsgV2luZG93IGNhbGxiYWNrCisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFu
aW1hdGlvbjooQk9PTClhbmltYXRpb24KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVlbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmltYXRp
b247CisgICAgX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuCit7
CisgICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOworfQor
CistICh2b2lkKWZhZGVIVURJbgoreworICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5d
OworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93CisK
Ky0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6
KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdU
eXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKKyAgICBp
ZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1h
c2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6Zmxh
Z10pKSB7CisgICAgICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgICAgIFtzZWxmIHNldEJh
Y2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07CisgICAgICAgIFtzZWxmIHNldEhp
ZGVzT25EZWFjdGl2YXRlOllFU107CisgICAgICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50
czpOT107CisgICAgICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107Cisg
ICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NF
UlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJP
T0wpY2FuQmVjb21lS2V5V2luZG93Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClt
b3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVu
dCk7Cit9CisKKy0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0oc2VuZGVyKTsKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcmVxdWVzdEV4
aXRGdWxsc2NyZWVuXTsKK30KKworLSAodm9pZClhbmltYXRlZFJlc2l6ZURpZEVuZAoreworICAg
IC8vIENhbGwgb3VyIHdpbmRvd0NvbnRyb2xsZXIuCisgICAgaWYgKF9jb250cm9sbGVyQWN0aW9u
T25BbmltYXRpb25FbmQpCisgICAgICAgIG9iamNfbXNnU2VuZChbc2VsZiB3aW5kb3dDb250cm9s
bGVyXSwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCk7CisgICAgX2NvbnRyb2xsZXJB
Y3Rpb25PbkFuaW1hdGlvbkVuZCA9IE5VTEw7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHdp
bGwgYW5pbWF0ZSBhIGNoYW5nZSBvZiBmcmFtZSByZWN0YW5nbGUKKy8vIFdlIHN1cHBvcnQgcXVl
dWluZyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdsbCBjb3JyZWN0bHkKKy8vIGludGVy
cnVwdCB0aGUgcnVubmluZyBhbmltYXRpb24sIGFuZCBxdWV1ZSB0aGUgbmV4dCBvbmUuCisvLwor
LSAodm9pZClhbmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3Qp
ZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250
cm9sbGVyQWN0aW9uOihTRUwpY29udHJvbGxlckFjdGlvbgoreworICAgIF9jb250cm9sbGVyQWN0
aW9uT25BbmltYXRpb25FbmQgPSBjb250cm9sbGVyQWN0aW9uOworCisgICAgQk9PTCB3YXNBbmlt
YXRpbmcgPSBOTzsKKyAgICBpZiAoX2Z1bGxzY3JlZW5BbmltYXRpb24pIHsKKyAgICAgICAgd2Fz
QW5pbWF0aW5nID0gWUVTOworCisgICAgICAgIC8vIEludGVycnVwdCBhbnkgcnVubmluZyBhbmlt
YXRpb24uCisgICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKwor
ICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlY3QgdG8gZW5zdXJlIGEgc21vb3RoIHRyYW5z
aXRpb24uCisgICAgICAgIHN0YXJ0UmVjdCA9IFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBjdXJyZW50
RnJhbWVdOworICAgICAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gcmVsZWFzZV07CisgICAgICAg
IF9mdWxsc2NyZWVuQW5pbWF0aW9uID0gbmlsOworICAgIH0KKyAgICAKKyAgICBpZiAoTlNJc0Vt
cHR5UmVjdChzdGFydFJlY3QpIHx8IE5TSXNFbXB0eVJlY3QoZW5kUmVjdCkpIHsKKyAgICAgICAg
Ly8gRmFrZWx5IGVuZCB0aGUgc3ViYW5pbWF0aW9uLgorICAgICAgICBbc3ViQW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczoxLjBdOworICAgICAgICAvLyBBbmQgcmVtb3ZlIHRoZSB3ZWFrIGxp
bmsgdG8gdGhlIHdpbmRvdy4KKyAgICAgICAgW3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsK
KworICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0IGRpc3BsYXk6Tk9dOworICAgICAgICBb
c2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKKyAgICAgICAgW3NlbGYgYW5pbWF0ZWRS
ZXNpemVEaWRFbmRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF3YXNBbmlt
YXRpbmcpIHsKKyAgICAgICAgLy8gV2UnbGwgZG93bnNjYWxlIHRoZSB3aW5kb3cgZHVyaW5nIHRo
ZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciByZXNvbHV0aW9uIHJlY3QKKyAgICAgICAg
Qk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0gc3RhcnRSZWN0LnNpemUud2lkdGggPCBl
bmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNpemUuaGVpZ2h0IDwgZW5kUmVjdC5zaXpl
LmhlaWdodDsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6aGlnaGVyUmVzb2x1dGlvbklzRW5kUmVj
dCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpOT107ICAgICAgICAKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKCFfZnVsbHNjcmVlbkFuaW1hdGlvbik7CisgICAgX2Z1bGxzY3JlZW5Bbmlt
YXRpb24gPSBbW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1
cmF0aW9uOjAuMiB3aW5kb3c6c2VsZiBpbml0YWxGcmFtZTpzdGFydFJlY3QgZmluYWxGcmFtZTpl
bmRSZWN0XTsKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0U3ViQW5pbWF0aW9uOnN1YkFu
aW1hdGlvbl07CisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOwor
ICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRv
dyBiZWZvcmUgc2hvd2luZyBpdC4KKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0Q3VycmVu
dFByb2dyZXNzOjBdOworICAgIFtzZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworCisg
ICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClh
bmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWYgKCFbTlNU
aHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1h
aW5UaHJlYWQ6QHNlbGVjdG9yKGFuaW1hdGlvbkRpZEVuZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9u
IHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmlt
YXRpb24gIT0gX2Z1bGxzY3JlZW5BbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoZSBhbmltYXRpb24gaXMgbm90IHJlYWxseSBvdmVyIGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAg
ICAvLyBEb24ndCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICAgIGlmIChbYW5pbWF0aW9uIGN1
cnJlbnRQcm9ncmVzc10gPCAxLjApCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0
aGF0IGFuaW1hdGlvbiAoYW5kIHN1YmFuaW1hdGlvbikgZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3
ZWFrIHJlZmVyZW5jZSB0byB0aGUgd2luZG93IGl2YXIgdGhhdCBtYXkgYmUgZGVzdHJveWVkIGZy
b20KKyAgICAvLyBub3cgb24uCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpu
aWxdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVs
bHNjcmVlbkFuaW1hdGlvbiA9IG5pbDsKKworICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5k
XTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBb
W3NlbGYgd2luZG93Q29udHJvbGxlcl0gZmFkZUhVREluXTsKK30KKworLSAodm9pZClyZXNpZ25L
ZXlXaW5kb3cKK3sKKyAgICBbc3VwZXIgcmVzaWduS2V5V2luZG93XTsKKyAgICBbW3NlbGYgd2lu
ZG93Q29udHJvbGxlcl0gcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9
CitAZW5kCisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGVjMjlhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmIEVOQUJMRShWSURFTykKKwor
I2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVu
dC5oPgorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRl
bGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgeworICAgIGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOworICAgIE5TVGltZXIgKl90aW1lbGlu
ZVVwZGF0ZVRpbWVyOworICAgIE5TVHJhY2tpbmdBcmVhICpfYXJlYTsKKyAgICBCT09MIF9tb3Vz
ZUlzSW5IVUQ7Cit9CistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKy0gKHZvaWQpZmFk
ZVdpbmRvd0luOworLSAodm9pZClmYWRlV2luZG93T3V0OworLSAodm9pZCljbG9zZVdpbmRvdzsK
K0BlbmQKKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJE
ZWxlZ2F0ZSA8TlNPYmplY3Q+CistICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKKy0gKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK0BlbmQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJk
N2MxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpAQCAtMCwwICsxLDQ1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQg
PFFUS2l0L1FUS2l0Lmg+CisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKworQGludGVyZmFj
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIChQcml2YXRlKQorLSAodm9p
ZCl1cGRhdGVUaW1lOworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvdyA6IE5TV2luZG93CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3cKKy0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVj
dCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlw
ZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICAodm9pZClhU3R5bGU7Cisg
ICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5
bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVy
OmZsYWddKSkKKyAgICB7CisgICAgICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgICAgIFtz
ZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07CisgICAgICAgIFtz
ZWxmIHNldExldmVsOk5TUG9wVXBNZW51V2luZG93TGV2ZWxdOworICAgICAgICBbc2VsZiBzZXRB
Y2NlcHRzTW91c2VNb3ZlZEV2ZW50czpZRVNdOworICAgICAgICBbc2VsZiBzZXRJZ25vcmVzTW91
c2VFdmVudHM6Tk9dOworICAgICAgICBbc2VsZiBzZXRNb3ZhYmxlQnlXaW5kb3dCYWNrZ3JvdW5k
OllFU107CisgICAgICAgIFtzZWxmIHNldEhpZGVzT25EZWFjdGl2YXRlOllFU107CisgICAgfQor
ICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKWNhbkJlY29tZUtleVdpbmRvdworeworICAg
IHJldHVybiBOTzsKK30KKworLSAodm9pZCljZW50ZXIKK3sKKyAgICBOU1JlY3QgaHVkRnJhbWUg
PSBbc2VsZiBmcmFtZV07CisgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW1tOU1NjcmVlbiBtYWlu
U2NyZWVuXSBmcmFtZV07CisgICAgW3NlbGYgc2V0RnJhbWVUb3BMZWZ0UG9pbnQ6TlNNYWtlUG9p
bnQoKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIgKyBz
Y3JlZW5GcmFtZS5vcmlnaW4ueCwgaHVkRnJhbWUuc2l6ZS5oZWlnaHQgKiAyICsgc2NyZWVuRnJh
bWUub3JpZ2luLngpXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIgKCkgPE5TV2luZG93RGVsZWdhdGU+CitAZW5kCisgCisKK0Bp
bXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyCisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOworICAg
IEFTU0VSVCghX2FyZWEpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQ8V2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAg
IHJldHVybiBfZGVsZWdhdGU7Cit9CistICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7Cisg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih1bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOwor
CisgICAgLy8gRmlyc3QsIHVwZGF0ZSByaWdodCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1
cGRhdGUKKyAgICBbc2VsZiB1cGRhdGVUaW1lXTsKKworICAgIF90aW1lbGluZVVwZGF0ZVRpbWVy
ID0gW1tOU1RpbWVyIHRpbWVyV2l0aFRpbWVJbnRlcnZhbDowLjI1MCB0YXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRh
aW5dOworICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVV
cGRhdGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKKyAgICBbX3RpbWVsaW5l
VXBkYXRlVGltZXIgZmlyZV07Cit9CisKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRhdGUKK3sK
KyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6bmlsXTsK
KworICAgIGlmIChbX3RpbWVsaW5lVXBkYXRlVGltZXIgaXNWYWxpZF0pCisgICAgICAgIFtfdGlt
ZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIg
cmVsZWFzZV07CisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBuaWw7Cit9CisKKy0gKHZvaWQp
ZmFkZVdpbmRvd0luCit7CisgICAgaWYgKCFbW3NlbGYgd2luZG93XSBpc1Zpc2libGVdKSB7Cisg
ICAgICAgIFtbc2VsZiB3aW5kb3ddIHNldEFscGhhVmFsdWU6MF07CisgICAgfQorICAgIFtbc2Vs
ZiB3aW5kb3ddIG9yZGVyRnJvbnQ6c2VsZl07CisgICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9y
XSBzZXRBbHBoYVZhbHVlOjFdOworICAgIFtzZWxmIHNjaGVkdWxlVGltZVVwZGF0ZV07CisKKyAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAgIGlmICgh
X21vdXNlSXNJbkhVRCkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcihm
YWRlV2luZG93T3V0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjEuMF07Cit9CisKKy0gKHZv
aWQpZmFkZVdpbmRvd091dAoreworICAgIFtOU0N1cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92
ZXM6WUVTXTsKKyAgICBbW1tzZWxmIHdpbmRvd10gYW5pbWF0b3JdIHNldEFscGhhVmFsdWU6MF07
CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih1bnNjaGVkdWxlVGltZVVwZGF0
ZSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheToxXTsKK30KKworLSAodm9pZCljbG9zZVdpbmRv
dworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07Cisg
ICAgW3NlbGYgdW5zY2hlZHVsZVRpbWVVcGRhdGVdOworICAgIFtzZWxmLndpbmRvdy5jb250ZW50
VmlldyByZW1vdmVUcmFja2luZ0FyZWE6X2FyZWFdOworICAgIFtfYXJlYSByZWxlYXNlXTs7Cisg
ICAgX2FyZWEgPSBuaWw7CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNl
dFdpbmRvdzpuaWxdOworfQorCitzdGF0aWMgTlNDb250cm9sICpjcmVhdGVDb250cm9sV2l0aE1l
ZGlhVUlDb250cm9sVHlwZShpbnQgY29udHJvbFR5cGUsIENHUmVjdCBmcmFtZSkKK3sKKyAgICBO
U0NvbnRyb2wgKmNvbnRyb2wgPSBXS0NyZWF0ZU1lZGlhVUlDb250cm9sKGNvbnRyb2xUeXBlKTsK
KyAgICBbY29udHJvbCBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1lKV07CisgICAgcmV0
dXJuIGNvbnRyb2w7Cit9CisKK3N0YXRpYyBOU1RleHRGaWVsZCAqY3JlYXRlVGltZVRleHRGaWVs
ZChDR1JlY3QgZnJhbWUpCit7CisgICAgTlNUZXh0RmllbGQgKnRleHRGaWVsZCA9IFtbTlNUZXh0
RmllbGQgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWVdOworICAgIFt0ZXh0RmllbGQgc2V0VGV4
dENvbG9yOltOU0NvbG9yIHdoaXRlQ29sb3JdXTsKKyAgICBbdGV4dEZpZWxkIHNldEJvcmRlcmVk
Ok5PXTsKKyAgICBbdGV4dEZpZWxkIHNldEZvbnQ6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEw
XV07CisgICAgW3RleHRGaWVsZCBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOworICAgIFt0ZXh0Rmll
bGQgc2V0QmV6ZWxlZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRFZGl0YWJsZTpOT107CisgICAg
W3RleHRGaWVsZCBzZXRTZWxlY3RhYmxlOk5PXTsKKyAgICByZXR1cm4gdGV4dEZpZWxkOworfQor
CitzdGF0aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dIZWlnaHQgPSA1OTsKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IHdpbmRvd1dpZHRoID0gNDM4OworCistIChOU1N0cmluZyAqKXdpbmRvd05pYk5hbWUK
K3sKKyAgICByZXR1cm4gQCJObyBOaWIiOyAvLyBTbyB0aGF0IC13aW5kb3dEaWRMb2FkIGdldHMg
Y2FsbGVkLgorfQorCisKKy0gKHZvaWQpbG9hZFdpbmRvdworeworICAgIE5TV2luZG93KiB3aW5k
b3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50
UmVjdDpOU01ha2VSZWN0KDAsIDAsIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQpIHN0eWxlTWFz
azpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBk
ZWZlcjpOT107CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBzZXRX
aW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOworfQorCistICh2b2lkKXdpbmRv
d0RpZExvYWQKK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luID0gOTsKKyAgICBz
dGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luVG9wID0gOTsKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBrQnV0dG9uU2l6ZSA9IDI1OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGtCdXR0b25N
aW5pU2l6ZSA9IDE2OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Cisg
ICAgTlNBc3NlcnQod2luZG93LCBAIk5vIHdpbmRvdyB3YXMgY3JlYXRlZCIpOworCisgICAgTlNW
aWV3ICpiYWNrZ3JvdW5kID0gV0tDcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKyAgICBb
d2luZG93IHNldENvbnRlbnRWaWV3OmJhY2tncm91bmRdOworICAgIF9hcmVhID0gW1tOU1RyYWNr
aW5nQXJlYSBhbGxvY10gaW5pdFdpdGhSZWN0OltiYWNrZ3JvdW5kIGJvdW5kc10gb3B0aW9uczpO
U1RyYWNraW5nTW91c2VFbnRlcmVkQW5kRXhpdGVkfE5TVHJhY2tpbmdBY3RpdmVBbHdheXMgb3du
ZXI6c2VsZiB1c2VySW5mbzpuaWxdOworICAgIFtiYWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJlYTpf
YXJlYV07CisgICAgW2JhY2tncm91bmQgcmVsZWFzZV07ICAgIAorCisgICAgTlNWaWV3ICpjb250
ZW50VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKKworICAgIENHRmxvYXQgdG9w
ID0gd2luZG93SGVpZ2h0IC0ga01hcmdpblRvcDsKKyAgICBDR0Zsb2F0IGNlbnRlciA9ICh3aW5k
b3dXaWR0aCAtIGtCdXR0b25TaXplKSAvIDI7CisgICAgTlNDb250cm9sICpwbGF5QnV0dG9uID0g
Y3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFBsYXlQ
YXVzZUJ1dHRvbiwgQ0dSZWN0TWFrZShjZW50ZXIsIHRvcCAtIGtCdXR0b25TaXplLCBrQnV0dG9u
U2l6ZSwga0J1dHRvblNpemUpKTsKKyAgICBbcGxheUJ1dHRvbiBiaW5kOkAidmFsdWUiIHRvT2Jq
ZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJwbGF5aW5nIiBvcHRpb25zOm5pbF07CisgICAgW2NvbnRl
bnRWaWV3IGFkZFN1YnZpZXc6cGxheUJ1dHRvbl07CisgICAgW3BsYXlCdXR0b24gcmVsZWFzZV07
CisKKyAgICBDR0Zsb2F0IGxlZnRPZkNlbnRlciA9ICh3aW5kb3dXaWR0aCAtIGtCdXR0b25TaXpl
ICogMyAtIGtCdXR0b25TaXplIC0ga0J1dHRvblNpemUpIC8gMjsKKyAgICBOU0NvbnRyb2wgKnJl
d2luZEJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFV
SUNvbnRyb2xSZXdpbmRCdXR0b24sIENHUmVjdE1ha2UobGVmdE9mQ2VudGVyLCB0b3AgLSBrQnV0
dG9uU2l6ZSwga0J1dHRvblNpemUsIGtCdXR0b25TaXplKSk7CisgICAgW3Jld2luZEJ1dHRvbiBz
ZXRBY3Rpb246QHNlbGVjdG9yKHJld2luZDopXTsKKyAgICBbcmV3aW5kQnV0dG9uIHNldFRhcmdl
dDpzZWxmXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpyZXdpbmRCdXR0b25dOworICAg
IFtyZXdpbmRCdXR0b24gcmVsZWFzZV07CisKKyAgICBDR0Zsb2F0IHJpZ2h0T2ZDZW50ZXIgPSAo
d2luZG93V2lkdGggKyBrQnV0dG9uU2l6ZSAqIDMpIC8gMjsKKyAgICBOU0NvbnRyb2wgKmZhc3RG
b3J3YXJkQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRp
YVVJQ29udHJvbEZhc3RGb3J3YXJkQnV0dG9uLCBDR1JlY3RNYWtlKHJpZ2h0T2ZDZW50ZXIsIHRv
cCAtIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSwga0J1dHRvblNpemUpKTsKKyAgICBbcmV3aW5k
QnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IoZmFzdEZvcndhcmQ6KV07CisgICAgW3Jld2luZEJ1
dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZmFzdEZv
cndhcmRCdXR0b25dOworICAgIFtmYXN0Rm9yd2FyZEJ1dHRvbiByZWxlYXNlXTsKKworICAgIENH
RmxvYXQgY2xvc2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSAyICoga01hcmdpbiAtIGtCdXR0b25N
aW5pU2l6ZTsKKyAgICBOU0NvbnRyb2wgKmV4aXRGdWxsc2NyZWVuQnV0dG9uID0gY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbEV4aXRGdWxsc2NyZWVu
QnV0dG9uLCBDR1JlY3RNYWtlKGNsb3NlVG9SaWdodCwgdG9wIC0ga0J1dHRvblNpemUgLyAyIC0g
a0J1dHRvbk1pbmlTaXplIC8gMiwga0J1dHRvbk1pbmlTaXplLCBrQnV0dG9uTWluaVNpemUpKTsK
KyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihleGl0RnVsbHNj
cmVlbjopXTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmV4aXRGdWxsc2NyZWVuQnV0dG9uXTsKKyAgICBbZXhp
dEZ1bGxzY3JlZW5CdXR0b24gcmVsZWFzZV07CisgICAgCisgICAgQ0dGbG9hdCBsZWZ0ID0ga01h
cmdpbjsKKyAgICBOU0NvbnRyb2wgKnZvbHVtZURvd25CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0
aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sVm9sdW1lRG93bkJ1dHRvbiwgQ0dS
ZWN0TWFrZShsZWZ0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAy
LCBrQnV0dG9uTWluaVNpemUsIGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtjb250ZW50VmlldyBh
ZGRTdWJ2aWV3OnZvbHVtZURvd25CdXR0b25dOworICAgIFt2b2x1bWVEb3duQnV0dG9uIHJlbGVh
c2VdOworCisgICAgc3RhdGljIGNvbnN0IGludCB2b2x1bWVTbGlkZXJXaWR0aCA9IDUwOworCisg
ICAgbGVmdCA9IGtNYXJnaW4gKyBrQnV0dG9uTWluaVNpemU7CisgICAgTlNDb250cm9sICp2b2x1
bWVTbGlkZXIgPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlD
b250cm9sU2xpZGVyLCBDR1JlY3RNYWtlKGxlZnQsIHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtC
dXR0b25NaW5pU2l6ZSAvIDIsIHZvbHVtZVNsaWRlcldpZHRoLCBrQnV0dG9uTWluaVNpemUpKTsK
KyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVTbGlkZXJdOworICAgIFt2b2x1bWVT
bGlkZXIgYmluZDpAIm1heFZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAibWF4Vm9s
dW1lIiBvcHRpb25zOm5pbF07CisgICAgW3ZvbHVtZVNsaWRlciBiaW5kOkAidmFsdWUiIHRvT2Jq
ZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJ2b2x1bWUiIG9wdGlvbnM6bmlsXTsKKyAgICBbdm9sdW1l
U2xpZGVyIHJlbGVhc2VdOworCisgICAgbGVmdCA9IGtNYXJnaW4gKyBrQnV0dG9uTWluaVNpemUg
KyB2b2x1bWVTbGlkZXJXaWR0aCArIGtCdXR0b25NaW5pU2l6ZSAvIDI7CisgICAgTlNDb250cm9s
ICpidXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlD
b250cm9sVm9sdW1lVXBCdXR0b24sIENHUmVjdE1ha2UobGVmdCwgdG9wIC0ga0J1dHRvblNpemUg
LyAyIC0ga0J1dHRvbk1pbmlTaXplIC8gMiwga0J1dHRvbk1pbmlTaXplLCBrQnV0dG9uTWluaVNp
emUpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpidXR0b25dOworICAgIFtidXR0b24g
cmVsZWFzZV07CisgICAgCisgICAgc3RhdGljIGNvbnN0IGludCB0aW1lVGV4dFdpZHRoID0gNTA7
CisgICAgc3RhdGljIGNvbnN0IGludCBzbGlkZXJIZWlnaHQgPSAxMzsKKyAgICBzdGF0aWMgY29u
c3QgaW50IHNsaWRlck1hcmdpbkZpeHVwID0gNDsKKworICAgIE5TQ29udHJvbCAqc2xpZGVyID0g
V0tDcmVhdGVNZWRpYVVJQ29udHJvbChXS01lZGlhVUlDb250cm9sVGltZWxpbmUpOworICAgIFtz
bGlkZXIgc2V0RnJhbWU6TlNNYWtlUmVjdChrTWFyZ2luICsgdGltZVRleHRXaWR0aCArIGtNYXJn
aW4vMiwga01hcmdpbiAtIHNsaWRlck1hcmdpbkZpeHVwLCB3aW5kb3dXaWR0aCAtIDIgKiAoa01h
cmdpbiAtIHNsaWRlck1hcmdpbkZpeHVwKSAtIGtNYXJnaW4gKiAyIC0gMiAqIHRpbWVUZXh0V2lk
dGgsIHNsaWRlckhlaWdodCldOworICAgIFtzbGlkZXIgYmluZDpAInZhbHVlIiB0b09iamVjdDpz
ZWxmIHdpdGhLZXlQYXRoOkAiY3VycmVudFFUVGltZSIgb3B0aW9uczpuaWxdOworICAgIFtzbGlk
ZXIgYmluZDpAIm1heFZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAiZHVyYXRpb24i
IG9wdGlvbnM6bmlsXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpzbGlkZXJdOworICAg
IFtzbGlkZXIgcmVsZWFzZV07CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVUZXh0SGVpZ2h0
ID0gMTE7CisKKyAgICBOU1RleHRGaWVsZCAqZWxhcHNlZFRpbWVUZXh0ID0gY3JlYXRlVGltZVRl
eHRGaWVsZChOU01ha2VSZWN0KGtNYXJnaW4sIGtNYXJnaW4sIHRpbWVUZXh0V2lkdGgsIHRpbWVU
ZXh0SGVpZ2h0KSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZWxhcHNlZFRpbWVUZXh0
XTsKKyAgICBbZWxhcHNlZFRpbWVUZXh0IGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRo
S2V5UGF0aDpAImVsYXBzZWRUaW1lVGV4dCIgb3B0aW9uczpuaWxdOworICAgIFtlbGFwc2VkVGlt
ZVRleHQgcmVsZWFzZV07CisKKyAgICBOU1RleHRGaWVsZCAqcmVtYWluaW5nVGltZVRleHQgPSBj
cmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFrZVJlY3Qod2luZG93V2lkdGggLSBrTWFyZ2luIC0gdGlt
ZVRleHRXaWR0aCwga01hcmdpbiwgdGltZVRleHRXaWR0aCwgdGltZVRleHRIZWlnaHQpKTsKKyAg
ICBbY29udGVudFZpZXcgYWRkU3VidmlldzpyZW1haW5pbmdUaW1lVGV4dF07CisgICAgW3JlbWFp
bmluZ1RpbWVUZXh0IGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAInJl
bWFpbmluZ1RpbWVUZXh0IiBvcHRpb25zOm5pbF07CisgICAgW3JlbWFpbmluZ1RpbWVUZXh0IHJl
bGVhc2VdOworICAgIAorICAgIFt3aW5kb3cgY2VudGVyXTsKK30KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisvKgorICogIEJpbmRpbmdzCisgKgorICovCisKKy0gKHZvaWQpdXBk
YXRlVm9sdW1lCit7CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAidm9sdW1lIl07
CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ2b2x1bWUiXTsKK30KKworLSAodm9p
ZCl1cGRhdGVUaW1lCit7CisgICAgW3NlbGYgdXBkYXRlVm9sdW1lXTsKKworICAgIFtzZWxmIHdp
bGxDaGFuZ2VWYWx1ZUZvcktleTpAImN1cnJlbnRRVFRpbWUiXTsKKyAgICBbc2VsZiBkaWRDaGFu
Z2VWYWx1ZUZvcktleTpAImN1cnJlbnRRVFRpbWUiXTsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFs
dWVGb3JLZXk6QCJkdXJhdGlvbiJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAi
ZHVyYXRpb24iXTsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJyZW1haW5pbmdU
aW1lVGV4dCJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAicmVtYWluaW5nVGlt
ZVRleHQiXTsKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJlbGFwc2VkVGltZVRl
eHQiXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAImVsYXBzZWRUaW1lVGV4dCJd
OworfQorCistIChRVFRpbWUpY3VycmVudFFUVGltZQoreworICAgIFFUVGltZSByZXQ7CisgICAg
cmV0LnRpbWVWYWx1ZSA9IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XS0+Y3VycmVudFRpbWUoKSAqIDMwIDogMDsKKyAgICByZXQudGltZVNjYWxlID0g
MzA7CisgICAgcmV0dXJuIHJldDsKK30KKworLSAodm9pZClzZXRDdXJyZW50UVRUaW1lOihRVFRp
bWUpY3VycmVudFFUVGltZQoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlOworICAgIFtfZGVs
ZWdhdGUgbWVkaWFFbGVtZW50XS0+c2V0Q3VycmVudFRpbWUoKGRvdWJsZSljdXJyZW50UVRUaW1l
LnRpbWVWYWx1ZSAvIChkb3VibGUpY3VycmVudFFUVGltZS50aW1lU2NhbGUsIGUpOworfQorCist
IChkb3VibGUpZHVyYXRpb24KK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRd
ID8gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5kdXJhdGlvbigpIDogMDsKK30KKworLSAoZG91
YmxlKW1heFZvbHVtZQoreworICAgIC8vIFNldCB0aGUgdm9sdW1lIHNsaWRlciByZXNvbHV0aW9u
CisgICAgcmV0dXJuIDEwMDsKK30KKworLSAoZG91YmxlKXZvbHVtZQoreworICAgIHJldHVybiBb
X2RlbGVnYXRlIG1lZGlhRWxlbWVudF0gPyBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnZvbHVt
ZSgpICogW3NlbGYgbWF4Vm9sdW1lXSA6IDA7Cit9CisKKy0gKHZvaWQpc2V0Vm9sdW1lOihkb3Vi
bGUpdm9sdW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAg
IHJldHVybjsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGU7CisgICAgW19kZWxlZ2F0ZSBt
ZWRpYUVsZW1lbnRdLT5zZXRWb2x1bWUodm9sdW1lIC8gW3NlbGYgbWF4Vm9sdW1lXSwgZSk7Cit9
CisKKworLSAoQk9PTClwbGF5aW5nCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVu
dF0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIVtfZGVsZWdhdGUgbWVkaWFF
bGVtZW50XS0+Y2FuUGxheSgpOworfQorCistICh2b2lkKXNldFBsYXlpbmc6KEJPT0wpcGxheWlu
ZworeworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocGxheWluZykKKyAgICAgICAgW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5w
bGF5KCk7CisgICAgZWxzZQorICAgICAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnBhdXNl
KCk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqdGltZVRvU3RyaW5nKGRvdWJsZSB0aW1lKQorewor
ICAgIGlmICghaXNmaW5pdGUodGltZSkpCisgICAgICAgIHRpbWUgPSAwOworICAgIGludCBzZWNv
bmRzID0gKGludClmYWJzZih0aW1lKTsgCisgICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAq
IDYwKTsKKyAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7CisgICAgc2Vjb25k
cyAlPSA2MDsKKyAgICBpZiAoaG91cnMpIHsKKyAgICAgICAgaWYgKGhvdXJzID4gOSkKKyAgICAg
ICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJTAyZDolMDJkOiUw
MmQiLCAodGltZSA8IDAgPyAiLSIgOiAiIiksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzXTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJXMlMDFkOiUwMmQ6JTAyZCIsICh0aW1lIDwgMCA/ICItIiA6ICIiKSwgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHNdOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVzJTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBt
aW51dGVzLCBzZWNvbmRzXTsKKyAgICAKK30KKworc3RhdGljIE5TU3RyaW5nICpzdHJpbmdUb1Rp
bWVUZXh0QXR0cmlidXRlZChOU1N0cmluZyAqc3RyaW5nLCBOU1RleHRBbGlnbm1lbnQgYWxpZ24p
Cit7CisgICAgTlNTaGFkb3cgKmJsYWNrU2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07
CisgICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd0NvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsK
KyAgICBbYmxhY2tTaGFkb3cgc2V0U2hhZG93Qmx1clJhZGl1czowXTsKKyAgICBbYmxhY2tTaGFk
b3cgc2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoMCwgLTEpXTsKKyAgICBOU011dGFibGVQYXJh
Z3JhcGhTdHlsZSAqc3R5bGUgPSBbW05TTXV0YWJsZVBhcmFncmFwaFN0eWxlIGFsbG9jXSBpbml0
XTsKKyAgICBbc3R5bGUgc2V0QWxpZ25tZW50OmFsaWduXTsKKyAgICBOU0RpY3Rpb25hcnkgKmRp
Y3QgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6YmxhY2tTaGFk
b3csIE5TU2hhZG93QXR0cmlidXRlTmFtZSwgc3R5bGUsIE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1
dGVOYW1lLCBuaWxdOworICAgIFtzdHlsZSByZWxlYXNlXTsKKworICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqIGF0dHJTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6c3RyaW5nIGF0dHJpYnV0ZXM6ZGljdF07CisgICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1
dG9yZWxlYXNlXTsgICAgCit9CisKKy0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQKK3sK
KyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsK
KworICAgIC8vIE5lZ2F0aXZlIG51bWJlcgorICAgIHJldHVybiBzdHJpbmdUb1RpbWVUZXh0QXR0
cmlidXRlZCh0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5jdXJyZW50VGlt
ZSgpIC0gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdLT5kdXJhdGlvbigpKSwgTlNMZWZ0VGV4dEFs
aWdubWVudCk7Cit9CisKKy0gKE5TU3RyaW5nICopZWxhcHNlZFRpbWVUZXh0Cit7CisgICAgaWYg
KCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVybiBAIiI7CisKKyAgICBy
ZXR1cm4gc3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQodGltZVRvU3RyaW5nKFtfZGVsZWdhdGUg
bWVkaWFFbGVtZW50XS0+Y3VycmVudFRpbWUoKSksIE5TUmlnaHRUZXh0QWxpZ25tZW50KTsKK30K
KworLyoKKyAqICBUcmFja2luZyBhcmVhIGNhbGxiYWNrcworICoKKyAqLworCistICh2b2lkKW1v
dXNlRW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBI
VUQgd29uJ3QgYmUgaGlkZGVuIGZyb20gbm93CisgICAgX21vdXNlSXNJbkhVRCA9IFlFUzsKKyAg
ICBbc2VsZiBmYWRlV2luZG93SW5dOworfQorCistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50
ICopdGhlRXZlbnQKK3sKKyAgICBfbW91c2VJc0luSFVEID0gTk87CisgICAgW3NlbGYgZmFkZVdp
bmRvd0luXTsKK30KKworLyoKKyAqICBJbnRlcmZhY2UgY2FsbGJhY2tzCisgKgorICovCisKKy0g
KHZvaWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcgoreworICAgIFtfZGVsZWdhdGUgcmVxdWVz
dEV4aXRGdWxsc2NyZWVuXTsgCit9CisKKy8qCisgKiAgV2luZG93IGNhbGxiYWNrCisgKgorICov
CisKKy0gKHZvaWQpd2luZG93RGlkRXhwb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIFtzZWxmIHNjaGVkdWxlVGltZVVwZGF0ZV07Cit9CisKKy0gKHZvaWQpd2luZG93
RGlkQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgW3NlbGYgdW5z
Y2hlZHVsZVRpbWVVcGRhdGVdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQppbmRleCA4NTFkMDMxLi42MGRkMWE4IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtOTMsNiAr
OTMsNyBAQAogI2ltcG9ydCAiV2ViVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVn
YXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIgogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTZXQu
aD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CkBAIC0yNDc2LDcgKzI0NzcsNyBAQCBzdGF0
aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2Fyb3VuZCgpCiAgICAgCiAgICAgaWYg
KFtzZWxmIF9uZWVkc0ZyYW1lTG9hZERlbGVnYXRlUmV0YWluUXVpcmtdKQogICAgICAgICBbX3By
aXZhdGUtPmZyYW1lTG9hZERlbGVnYXRlIHJlbGVhc2VdOwotICAgICAgICAKKwogICAgIFtfcHJp
dmF0ZSByZWxlYXNlXTsKICAgICAvLyBbc3VwZXIgZGVhbGxvY10gY2FuIGVuZCB1cCBkaXNwYXRj
aGluZyBhZ2FpbnN0IF9wcml2YXRlICgzNDY2MDgyKQogICAgIF9wcml2YXRlID0gbmlsOwpAQCAt
NTQ1Myw2ICs1NDU0LDQ1IEBAIHN0YXRpYyB2b2lkIHZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXJD
YWxsQmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0CiAKICNlbmRpZgogCisj
aWYgRU5BQkxFKFZJREVPKQorCistICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJD
b3JlOjpOb2RlKilub2RlCit7CisgICAgQVNTRVJUKG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6
SFRNTE5hbWVzOjp2aWRlb1RhZykpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPiAobm9kZSk7CisKKyAgICBpZiAoX3By
aXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CisgICAgICAgIGlmIChbX3ByaXZhdGUtPmZ1
bGxzY3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0gPT0gdmlkZW9FbGVtZW50KSB7CisgICAg
ICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkganVzdCB3YXJuIHVzIHRoYXQgdGhlIHVuZGVybGF5
aW5nIHBsYWZ0b3JtTW92aWUoKQorICAgICAgICAgICAgLy8gaGFzIGNoYW5nZWQuIEp1c3QgZm9y
Y2UgYW4gdXBkYXRlLgorICAgICAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxl
ciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAgICAgICAgIHJldHVybjsgLy8g
Tm8gbW9yZSB0byBkby4KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IGV4aXQgRnVsbHNj
cmVlbiBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNj
cmVlbkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAg
Ly8gVGhpcyBwcmV2aW91cyBjYWxsIGhhcyB0byB0cmlnZ2VyIF9leGl0RnVsbHNjcmVlbiwKKyAg
ICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxl
ci4KKyAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpOworICAg
IH0KKyAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcikgeworICAgICAgICBf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgYWxsb2NdIGluaXRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9s
bGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1
bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpbW3NlbGYgd2luZG93XSBzY3JlZW5d
XTsgICAgICAgIAorICAgIH0KKyAgICBlbHNlCisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07Cit9CisKKy0gKHZvaWQp
X2V4aXRGdWxsc2NyZWVuCit7CisgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBl
eGl0RnVsbHNjcmVlbl07CisgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciByZWxl
YXNlXTsKKyAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBuaWw7Cit9CisKKyNl
bmRpZgorCiBAZW5kCiAKICNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECmRpZmYgLS1naXQgYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3RGF0YS5oCmluZGV4IGIwNDNmMWUuLjUyNjc3NWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0
YS5oCkBAIC00Myw2ICs0Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEBjbGFzcyBXZWJQcmVm
ZXJlbmNlczsKIEBjbGFzcyBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXI7CiBAcHJvdG9jb2wg
V2ViRm9ybURlbGVnYXRlOworI2lmIEVOQUJMRShWSURFTykKK0BjbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyOworI2VuZGlmCiAKIGV4dGVybiBCT09MIGFwcGxpY2F0aW9uSXNUZXJt
aW5hdGluZzsKIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKQEAgLTE1Nyw1
ICsxNjAsOCBAQCBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7CiAgICAgTlNF
dmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKIAogICAgIENGUnVuTG9vcFRpbWVyUmVmIHVw
ZGF0ZU1vdXNlb3ZlclRpbWVyOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyICpmdWxsc2NyZWVuQ29udHJvbGxlcjsKKyNlbmRpZgogfQogQGVuZApk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tIGIvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCmluZGV4IDQ4ZTdmNmMuLjdlMDcxMDUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQorKysgYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTgwLDYgKzgwLDcgQEAgaW50IHBsdWdpbkRhdGFiYXNl
Q2xpZW50Q291bnQgPSAwOwogICAgIEFTU0VSVChhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgfHwg
IXBhZ2UpOwogICAgIEFTU0VSVChhcHBsaWNhdGlvbklzVGVybWluYXRpbmcgfHwgIXByZWZlcmVu
Y2VzKTsKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQpOworICAgIEFTU0VSVCghZnVs
bHNjcmVlbkNvbnRyb2xsZXIpOwogCiAgICAgW2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCBy
ZWxlYXNlXTsKICAgICBbYmFja2dyb3VuZENvbG9yIHJlbGVhc2VdOwpAQCAtOTksNiArMTAwLDcg
QEAgaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwOwogewogICAgIEFTU0VSVF9NQUlO
X1RIUkVBRCgpOwogICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFzdGVib2FyZCk7CisgICAgQVNTRVJU
KCFmdWxsc2NyZWVuQ29udHJvbGxlcik7CiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oIGIvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDcxNGRhODcuLjhiN2EyOTYgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAorKysgYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKICAg
ICBjbGFzcyBQYWdlOworICAgIGNsYXNzIE5vZGU7CiB9CiAjZW5kaWYKIApAQCAtMTY4LDQgKzE2
OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLSAodm9pZClfc2V0SW5zZXJ0aW9uUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIAorI2lmIEVOQUJMRShWSURFTykgJiYg
ZGVmaW5lZChfX2NwbHVzcGx1cykKKy0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdl
YkNvcmU6Ok5vZGUqKW5vZGU7CistICh2b2lkKV9leGl0RnVsbHNjcmVlbjsKKyNlbmRpZgorCiBA
ZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0ZThlZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworQGludGVyZmFjZSBXZWJXaW5kb3dTY2FsZUFu
aW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKKyAgICBOU1JlY3QgX2luaXRpYWxGcmFtZSwgX2ZpbmFs
RnJhbWUsIF9yZWFsRnJhbWU7CisgICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCisg
ICAgTlNBbmltYXRpb24gKl9zdWJBbmltYXRpb247IC8vIChyZXRhaW4pCisgICAgTlNUaW1lSW50
ZXJ2YWwgX2hpbnRlZER1cmF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxG
cmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZTsK
KworLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uOworCist
IChOU1JlY3QpY3VycmVudEZyYW1lOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5p
bCB0byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9p
ZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAorCisKK0BpbnRlcmZhY2UgV2Vi
V2luZG93RmFkZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKKyAgICBDR0Zsb2F0IF9pbml0aWFs
QWxwaGEsIF9maW5hbEFscGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAocmV0YWluKQor
ICAgIEJPT0wgX2lzU3RvcHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5T
VGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFs
cGhhOihDR0Zsb2F0KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7
CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2lu
ZG93Om5pbCB0byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQor
LSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZApkaWZmIC0tZ2l0IGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI3ZjI2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2lu
ZG93QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXZWJX
aW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGljIGNvbnN0IENHRmxvYXQgc2xvbW9GYWN0
b3IgPSAxMC47CisKK3N0YXRpYyBOU1RpbWVJbnRlcnZhbCBXZWJXaW5kb3dBbmltYXRpb25EdXJh
dGlvbkZyb21EdXJhdGlvbihOU1RpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4g
KFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2spID8gZHVyYXRpb24gKiBz
bG9tb0ZhY3RvciA6IGR1cmF0aW9uOyAgICAgICAgCit9CisKK3N0YXRpYyBOU1JlY3Qgc2NhbGVk
UmVjdChOU1JlY3QgX2luaXRpYWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBkb3VibGUgZmFj
dG9yKQoreworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IF9pbml0aWFsRnJhbWU7CisgICAgY3Vy
cmVudFJlY3Qub3JpZ2luLnggKz0gKE5TTWluWChfZmluYWxGcmFtZSkgLSBOU01pblgoX2luaXRp
YWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi55ICs9IChOU01pblko
X2ZpbmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJy
ZW50UmVjdC5zaXplLndpZHRoICs9IChOU1dpZHRoKF9maW5hbEZyYW1lKSAtIE5TV2lkdGgoX2lu
aXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0LnNpemUuaGVpZ2h0ICs9IChO
U0hlaWdodChfZmluYWxGcmFtZSkgLSBOU0hlaWdodChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7
CisgICAgcmV0dXJuIGN1cnJlbnRSZWN0OworfQorCitzdGF0aWMgQ0dGbG9hdCBzcXVhcmVkRGlz
dGFuY2UoTlNQb2ludCBwb2ludDEsIE5TUG9pbnQgcG9pbnQyKQoreworICAgIENHRmxvYXQgZGVs
dGFYID0gcG9pbnQxLnggLSBwb2ludDIueDsKKyAgICBDR0Zsb2F0IGRlbHRhWSA9IHBvaW50MS55
IC0gcG9pbnQyLnk7CisgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRh
WTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uCistIChpZClp
bml0Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgICAgICBbc2VsZiBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsK
KyAgICAgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwLl07CisgICAgfQorICAgIHJldHVybiBzZWxm
OworfQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJh
dGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlh
bEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1lCit7CisgICAgaWYgKChzZWxmID0g
W3NlbGYgaW5pdF0pKSB7CisgICAgICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAg
ICAgICBfd2luZG93ID0gd2luZG93OworICAgICAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZy
YW1lOworICAgICAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgICAgIF9yZWFsRnJh
bWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpIGRlYWxsb2MKK3sKKyAgICBbX3dpbmRvdyByZWxlYXNlXTsKKyAgICBbX3N1YkFuaW1hdGlv
biByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRp
b246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldl
YldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0g
KHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdworeworICAgIF93aW5kb3cgPSB3aW5k
b3c7Cit9CisKKy0gKGZsb2F0KWN1cnJlbnRWYWx1ZQoreworICAgIHJldHVybiAwLjUgLSAwLjUg
KiBjb3MoTV9QSSAqICgxIC0gW3NlbGYgY3VycmVudFByb2dyZXNzXSkpOworfQorCistIChOU1Jl
Y3QpY3VycmVudEZyYW1lCit7CisgICAgcmV0dXJuIHNjYWxlZFJlY3QoX2ZpbmFsRnJhbWUsIF9p
bml0aWFsRnJhbWUsIFtzZWxmIGN1cnJlbnRWYWx1ZV0pOworfQorCistICh2b2lkKXNldEN1cnJl
bnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmICghX3dp
bmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpw
cm9ncmVzc107CisKKyAgICBOU1JlY3QgY3VycmVudFJlY3QgPSBbc2VsZiBjdXJyZW50RnJhbWVd
OworICAgIFdLV2luZG93U2V0U2NhbGVkRnJhbWUoX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFs
RnJhbWUpOworICAgIFtfc3ViQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107
Cit9CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgor
eworICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9zdWJBbmltYXRpb247CisgICAgX3N1YkFuaW1hdGlv
biA9IFthbmltYXRpb24gcmV0YWluXTsKKyAgICBbb2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQor
CistIChOU1RpbWVJbnRlcnZhbClhZGRpdGlvbmFsRHVyYXRpb24KK3sKKyAgICBzdGF0aWMgY29u
c3QgQ0dGbG9hdCBtYXhBZGRpdGlvbmFsRHVyYXRpb24gPSAxLjA7CisgICAgc3RhdGljIGNvbnN0
IENHRmxvYXQgc3BlZWRGYWN0b3IgPSAwLjAwMDE7CisgICAgCisgICAgQ0dGbG9hdCBtYXhEaXN0
ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJhbWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmln
aW4pOworICAgIENHRmxvYXQgZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNl
KE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUp
KSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkp
OworICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAg
CisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01ha2VQb2ludChOU01heFgoX2luaXRpYWxG
cmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSksIE5TTWFrZVBvaW50KE5TTWF4WChfZmluYWxG
cmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsKKyAgICBpZiAoZGlzdCA+IG1heERpc3QpCisg
ICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2Uo
TlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkp
LCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7
CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0ID0gZGlzdDsKKyAgICAK
KyAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkgKiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25h
bER1cmF0aW9uKTsgICAgCit9CisKKy0gKHZvaWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICAvLyBD
b21wdXRlIGV4dHJhIHRpbWUKKyAgICBpZiAoX2hpbnRlZER1cmF0aW9uKQorICAgICAgICBbc2Vs
ZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24gKyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25d
XTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXN0b3BBbmltYXRp
b24KK3sKKyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKKyAg
ICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYldpbmRvd0ZhZGVBbmltYXRpb24KKy0gKGlkKWluaXQKK3sKKyAgICBpZiAoKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKSB7CisgICAgICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9k
ZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgICAgICBbc2VsZiBzZXRGcmFt
ZVJhdGU6NjAuXTsKKyAgICAgICAgW3NlbGYgc2V0QW5pbWF0aW9uQ3VydmU6TlNBbmltYXRpb25F
YXNlSW5PdXRdOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhE
dXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQp
ZmluYWxBbHBoYQoreworICAgIGlmICgoc2VsZiA9IFtzZWxmIGluaXRdKSkgeworICAgICAgICBb
c2VsZiBzZXREdXJhdGlvbjpkdXJhdGlvbl07CisgICAgICAgIF93aW5kb3cgPSB3aW5kb3c7Cisg
ICAgICAgIF9pbml0aWFsQWxwaGEgPSBpbml0aWFsQWxwaGE7CisgICAgICAgIF9maW5hbEFscGhh
ID0gZmluYWxBbHBoYTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0
RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0
aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9
CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhhCit7CisgICAgcmV0dXJuIE1BWCgwLjAsIE1JTigx
LjAsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9maW5hbEFscGhhIC0g
X2luaXRpYWxBbHBoYSkpKTsKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5p
bWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBpZiAoX2lzU3RvcHBlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKF93aW5kb3cpOworICAgIFdLV2luZG93U2V0QWxwaGEoX3dp
bmRvdywgW3NlbGYgY3VycmVudEFscGhhXSk7CisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVz
czpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93Cit7
CisgICAgX3dpbmRvdyA9IHdpbmRvdzsKK30KKworLSAodm9pZClzdG9wQW5pbWF0aW9uCit7Cisg
ICAgLy8gVGhpcyBpcyByZWxldmFudCB3aGVuIHdlIGFyZSBhIHN1YiBhbmltYXRpb24gb2YgYSBz
Y2FsZSBhbmltYXRpb24uCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSBob3N0ZWQgaW4gdGhl
IGFuaW1hdGVkIHRocmVhZCBvZiB0aGUgcGFyZW50CisgICAgLy8gYW5kIGV2ZW4gYWZ0ZXIgW3N1
cGVyIHN0b3BBbmltYXRpb25dLCB0aGUgcGFyZW50IG1pZ2h0IGNhbGwKKyAgICAvLyBzZXRDdXJy
cmVudFByb2dyZXNzLgorICAgIF9pc1N0b3BwZWQgPSBZRVM7CisKKyAgICBbc3VwZXIgc3RvcEFu
aW1hdGlvbl07Cit9CisKK0BlbmQKKw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33914</attachid>
            <date>2009-07-31 17:52:20 -0700</date>
            <delta_ts>2009-08-16 15:03:55 -0700</delta_ts>
            <desc>Support Fullscreen for video element</desc>
            <filename>bug-26742-20090731175220.patch</filename>
            <type>text/plain</type>
            <size>71701</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCAyYzk0ZGYwLi5iY2RmZTM4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC03MzQsNiArNzM0LDEwIEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUExVR0lOX1BST1hZ
X0ZPUl9WSURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUExVCiAgICAgIFdFQkNPUkVf
RVhQT1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2Vi
Q29yZS5WaWRlb1Byb3h5LmV4cAogZW5kaWYKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9W
SURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfVklERU8pCisgICAgIFdFQkNPUkVfRVhQ
T1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2ViQ29y
ZS5WaWRlby5leHAKK2VuZGlmCisKIFdlYkNvcmUuZXhwIDogV2ViQ29yZS5iYXNlLmV4cCAkKFdF
QkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykKIAljYXQgJF4gPiAkQAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwIGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQwYzgyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApAQCAtMCwwICsxLDExIEBACitfX1pON1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ0cGxheUV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQ1cGF1c2VFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZ2b2x1bWVFdgorX19a
Tks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDdjYW5QbGF5RXYKK19fWk5LN1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb25FdgorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50
OXNldFZvbHVtZUVmUmkKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEwc2NyZWVuUmVj
dEV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTFjdXJyZW50VGltZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNwbGF0Zm9ybU1lZGlhRXYKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDE0c2V0Q3VycmVudFRpbWVFZlJpCitfX1pON1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQxNGV4aXRGdWxsc2NyZWVuRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA4ZDM5NWI0Li4z
YjRlOGM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03MzIsNiArNzMyLDcgQEAgX19aTjdXZWJDb3JlOUhUTUxO
YW1lczdzcmNBdHRyRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczhmcmFtZVRhZ0UKIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGlucHV0VGFn
RQorX19aTjdXZWJDb3JlOUhUTUxOYW1lczh2aWRlb1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRUYWdFCiBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDY5MWQyZTcuLmE2MGRjNTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01OTMxLDYgKzU5MzEsNyBAQAogCQk2MzE4
OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRl
clN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVSZW5kZXJTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2M0YzNzFDRDEwMEU3OTAwMDBCQkE4
N0EgLyogV2ViQ29yZS5WaWRlby5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBh
dGggPSBXZWJDb3JlLlZpZGVvLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUwRkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGQkYyODBEOUFGMDQ3MDA4RkMyOTIgLyogU1ZH
SEtlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0hLZXJu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwMDAsNiArMTAwMDEs
NyBAQAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJz
LmV4cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9y
ZWlnbk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNv
cmUuVGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3Jl
LlZpZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5W
aWRlb1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCAyNTFlODVmLi5lODU1NWQ4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgor
I2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTEwLDYgKzExMiw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChm
YWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNj
cmVlbihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1f
bmVlZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjM4LDYgKzI0MSwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1
bGVMb2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7Cisg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhU
TUxFbGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCkBAIC0xNjA4LDYgKzE2MTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK2NvbnN0IEludFJlY3Qg
SFRNTE1lZGlhRWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVj
dDsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJlcigp
LT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAgICAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNjc4LDYgKzE2OTUs
MjYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogfQog
I2VuZGlmCiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAg
ICBBU1NFUlQoIW1faXNGdWxsc2NyZWVuKTsKKyAgICBpZiAoZG9jdW1lbnQoKSAmJiBkb2N1bWVu
dCgpLT5wYWdlKCkpCisgICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVu
dCgpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworICAgIG1faXNGdWxsc2NyZWVuID0g
dHJ1ZTsKK30KKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCit7Cisg
ICAgQVNTRVJUKG1faXNGdWxsc2NyZWVuKTsKKyAgICBpZiAoZG9jdW1lbnQoKSAmJiBkb2N1bWVu
dCgpLT5wYWdlKCkpCisgICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVu
dCgpLT5leGl0RnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSBm
YWxzZTsKK30KKworUGxhdGZvcm1NZWRpYSBIVE1MTWVkaWFFbGVtZW50OjpwbGF0Zm9ybU1lZGlh
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXIgPyBtX3BsYXllci0+cGxhdGZvcm1NZWRp
YSgpIDogMDsKK30gICAgICAgIAogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmlu
ZGV4IDI3YjQ4ZWEuLmZkMDU1NTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtMzgsMTIg
KzM4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bU1lZGlhOworCiBjbGFzcyBFdmVudDsKIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50OwogY2xhc3Mg
TWVkaWFFcnJvcjsKIGNsYXNzIEtVUkw7CiBjbGFzcyBUaW1lUmFuZ2VzOwotICAgIAorCiBjbGFz
cyBIVE1MTWVkaWFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5
ZXJDbGllbnQgewogcHVibGljOgogICAgIEhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CkBAIC01Nyw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHdp
bGxSZW1vdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UpOwpAQCAtNzIsNiArNzUsOCBAQCBwdWJsaWM6CiAgICAgLy8gRXZlbnR1YWxseSBv
dmVybG9hZGVkIGluIEhUTUxWaWRlb0VsZW1lbnQKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzU2F2ZSgpIGNvbnN0OworICAgIAorICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRp
YSgpIGNvbnN0OwogCiAgICAgdm9pZCBzY2hlZHVsZUxvYWQoKTsKICAgICAKQEAgLTE0MCw2ICsx
NDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpblNjcnViYmluZygpOwogICAgIHZvaWQgZW5k
U2NydWJiaW5nKCk7CiAKKyAgICBjb25zdCBJbnRSZWN0IHNjcmVlblJlY3QoKTsKKwogICAgIGJv
b2wgY2FuUGxheSgpIGNvbnN0OwogCiAgICAgZmxvYXQgcGVyY2VudExvYWRlZCgpIGNvbnN0OwpA
QCAtMTUzLDYgKzE2MCw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuICFtX3BsYXllciB8fCBtX3BsYXllci0+aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKTsgfQorICAgIAorICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVu
KCk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQg
Z2V0VGltZU9mZnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgZmxvYXQgdmFsdWVP
bkVycm9yKSBjb25zdDsKQEAgLTMwNCw2ICszMTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gc3Vw
cG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVzc0V2ZW50cyBkaXNh
YmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAxOwogCisgICAgYm9v
bCBtX2lzRnVsbHNjcmVlbiA6IDE7CisKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURF
TykKICAgICBib29sIG1fbmVlZFdpZGdldFVwZGF0ZSA6IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmNwcAppbmRleCBlY2Q3NGU3Li42ZjU1YWFiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwCkBAIC0xMTIsNiArMTEyLDE0IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogICAgICAgICBIVE1MTWVk
aWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorYm9vbCBIVE1MVmlk
ZW9FbGVtZW50OjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAoreworICAgIFBhZ2UqIHBhZ2Ug
PSBkb2N1bWVudCgpID8gZG9jdW1lbnQoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpIAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKK30KKwogdW5zaWduZWQgSFRNTFZp
ZGVvRWxlbWVudDo6dmlkZW9XaWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsYXllcikKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5oCmluZGV4IGRjOTcxNGEuLmY5N2UxYTggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuaApAQCAtMjksNiArMjksOSBAQAogI2lmIEVOQUJMRShWSURFTykKIAogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDcgKzUyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIp
OwogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHBsYXllcigpICYmIHBsYXll
cigpLT5oYXNWaWRlbygpOyB9Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigp
IGNvbnN0IHsgcmV0dXJuIHBsYXllcigpICYmIHBsYXllcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4o
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAgICAgdmlydHVh
bCBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCmluZGV4IDJhOTA2MTEuLmVmZDc3ZjAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
QEAgLTE5NCw2ICsxOTQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVWaWV3VXBkYXRlKCkgPSAwOwogI2VuZGlmCiAKKyAgICAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikg
eyB9CisgICAgICAgIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCBLZXlib2Fy
ZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIHsgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsg
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGQ3ZDhj
ZWYuLjRkZmU3NGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIHsgfSAgICAKIAotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCogcGxhdGZvcm1NZWRpYSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgSW50
U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoMCwgMCk7IH0KIApAQCAt
MzAzLDExICszMDMsNiBAQCBib29sIE1lZGlhUGxheWVyOjpzZWVraW5nKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9wcml2YXRlLT5zZWVraW5nKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OnN1cHBv
cnRzRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3VwcG9ydHNG
dWxsc2NyZWVuKCk7Ci19Ci0KIGJvb2wgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzU2F2ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3VwcG9ydHNTYXZlKCk7CkBAIC0zMzEsNiArMzI2
LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXI6OmluTWVkaWFEb2N1bWVudCgpCiAgICAgcmV0dXJuIGRv
Y3VtZW50ICYmIGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKTsKIH0KIAordm9pZCogTWVkaWFQ
bGF5ZXI6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBs
YXRmb3JtTWVkaWEoKTsKK30KKwogTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXll
cjo6bmV0d29ya1N0YXRlKCkKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5uZXR3b3JrU3RhdGUo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA3ZjVmMmEwLi44
N2NhYzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIHRpbWUgaGFzIGp1bXBlZCwgZWcuIG5vdCBhcyBh
IHJlc3VsdCBvZiBub3JtYWwgcGxheWJhY2sKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJU
aW1lQ2hhbmdlZChNZWRpYVBsYXllciopIHsgfQotICAgIAorCiAgICAgLy8gdGhlIG1lZGlhIGZp
bGUgZHVyYXRpb24gaGFzIGNoYW5nZWQsIG9yIGlzIG5vdyBrbm93bgogICAgIHZpcnR1YWwgdm9p
ZCBtZWRpYVBsYXllckR1cmF0aW9uQ2hhbmdlZChNZWRpYVBsYXllciopIHsgfQogICAgIApAQCAt
MTA3LDE1ICsxMDcsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAK
LSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNT
YXZlKCkgY29uc3Q7CisgICAgdm9pZCogcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCiAgICAgSW50
U2l6ZSBuYXR1cmFsU2l6ZSgpOwogICAgIGJvb2wgaGFzVmlkZW8oKTsKICAgICAKICAgICB2b2lk
IHNldEZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykgeyBtX2ZyYW1lVmlldyA9IGZyYW1l
VmlldzsgfQogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgeyByZXR1cm4gbV9mcmFtZVZpZXc7
IH0KICAgICBib29sIGluTWVkaWFEb2N1bWVudCgpOwotICAgIAorCiAgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNp
emUmIHNpemUpOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKaW5kZXggNmQxMzU5Yi4uN2VhOWVmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC00MiwxMSArNDIsMTIgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgpID0gMDsKLSAgICAKKworICAgIHZpcnR1YWwgdm9p
ZCogcGxhdGZvcm1NZWRpYSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCiAKLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTYXZlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtp
dC5oCmluZGV4IDU0ZWVhMDAuLmVkODUwMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaApAQCAtNzcsNiArNzcs
OCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKICAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCisgICAgdm9pZCogcGxhdGZvcm1NZWRpYSgpIGNv
bnN0OworCiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlk
ZW8oKSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KaW5kZXggYzFkN2ZjYi4uM2M2MjdjMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQubW0KQEAgLTU2Miw2ICs1NjIsMTEgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgW21fb2JqY09ic2VydmVyLmdldCgp
IHNldERlbGF5Q2FsbGJhY2tzOk5PXTsKIH0KIAordm9pZCogTWVkaWFQbGF5ZXJQcml2YXRlOjpw
bGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9xdE1vdmllLmdldCgpOworfQor
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCiB7CiAgICAgaWYgKCFtZXRhRGF0YUF2
YWlsYWJsZSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmlu
ZGV4IGQwYWY5ODEuLjdmNGQ1MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKQEAgLTUyNSw2ICs1MjUsNyBAQCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0
dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbgog
dm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQpIHsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVudGVyRnVsbHNjcmVl
bigpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTg5NDk4OS4uY2RmMzk2ZCAxMDA2NDQKLS0t
IGEvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAyLDYgKzEwMiwxMiBAQAogCQk1
REU4M0E3QzBEMEY3Rjk0MDBDQUQxMkEgLyogV2ViVmlld0VkaXRpbmdDb250ZXh0TWVudU9sZC5u
aWIgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTgz
QTc4MEQwRjdGOTQwMENBRDEyQSAvKiBXZWJWaWV3RWRpdGluZ0NvbnRleHRNZW51T2xkLm5pYiAq
LzsgfTsKIAkJNURFODNBN0YwRDBGN0ZBRDAwQ0FEMTJBIC8qIExvY2FsaXphYmxlLnN0cmluZ3Mg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTgzQTdE
MEQwRjdGQUQwMENBRDEyQSAvKiBMb2NhbGl6YWJsZS5zdHJpbmdzICovOyB9OwogCQk1REU5MkZF
RjBCRDcwMTdFMDA1OUE1RkQgLyogV2ViQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFOTJGRUUwQkQ3MDE3RTAwNTlBNUZEIC8qIFdl
YkFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk2MzNGRkZBRTEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzNGRkZBQzEw
MTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi87IH07CisJCTYzM0ZGRkFG
MTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAv
KiBXZWJXaW5kb3dBbmltYXRpb24ubSAqLzsgfTsKKwkJNjM1MkFGOUIxMDFBMjkyRTAwRjI5MDZF
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzNTJBRjk5MTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi87IH07CisJCTYzNTJBRjlDMTAxQTI5MkUwMEYy
OTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM1MkFGOUExMDFBMjkyRTAwRjI5MDZFIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi87IH07CisJCTYzODM1OUQyMTAwQzM5
NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzgzNTlEMDEwMEMz
OTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oICov
OyB9OworCQk2MzgzNTlEMzEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYzODM1OUQxMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovOyB9OwogCQk2NTQ4OERBMTA4NEZCQ0NCMDA4MzFBRDAg
LyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9u
YXJ5RXh0cmFzLmggKi87IH07CiAJCTY1NDg4REEyMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0Rp
Y3Rpb25hcnlFeHRyYXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NDg4REEwMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMu
bSAqLzsgfTsKIAkJNjU2RDMzM0UwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERl
bGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU2RDMzM0QwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRl
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC00NzYsNiArNDgyLDEyIEBACiAJCTVERTgzQTc5MEQwRjdGOTQwMENBRDEyQSAvKiBFbmds
aXNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3Jh
cHBlci5uaWI7IG5hbWUgPSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9XZWJWaWV3RWRp
dGluZ0NvbnRleHRNZW51T2xkLm5pYjsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk1
REU4M0E3RTBEMEY3RkFEMDBDQUQxMkEgLyogRW5nbGlzaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAxMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LnN0cmluZ3M7IG5hbWUgPSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJs
ZS5zdHJpbmdzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTVERTkyRkVFMEJENzAx
N0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJBc3NlcnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYz
M0ZGRkFDMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dB
bmltYXRpb24ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViV2luZG93
QW5pbWF0aW9uLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzNTJBRjk5MTAxQTI5
MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM1MkFGOUExMDFBMjkyRTAwRjI5MDZFIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2MzgzNTlEMDEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzODM1OUQxMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0ODhEOUYwODRGQkNDQjAwODMxQUQw
IC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1NDg4REEw
MDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViTlNEaWN0aW9uYXJ5
RXh0cmFzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQk2NTZEMzMzRDBBRjIxQUU5MDAyMTIxNjkgLyogV2ViUmVzb3VyY2VMb2FkRGVs
ZWdhdGVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNv
dXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwOTQsNiArMTEwNiwxMiBAQAogCQkJCUJDMkU0NjRDMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJW
aWV3RGF0YS5tbSAqLywKIAkJCQk5MzBEMDJCQjA2Mjc1RjY0MDA3NjcwMUUgLyogV2ViVmlld0lu
dGVybmFsLmggKi8sCiAJCQkJNTFBOEI1N0QwNDI4MzUzQTAwQ0EyRDNBIC8qIFdlYlZpZXdQcml2
YXRlLmggKi8sCisJCQkJNjM1MkFGOTkxMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJCQk2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKKwkJCQk2MzgzNTlEMDEwMEMzOTY0MDAx
RjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovLAorCQkJ
CTYzODM1OUQxMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLm1tICovLAorCQkJCTYzM0ZGRkFDMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5k
b3dBbmltYXRpb24uaCAqLywKKwkJCQk2MzNGRkZBRDEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFdlYlZpZXc7CiAJCQlwYXRoID0g
bWFjL1dlYlZpZXc7CkBAIC0xNDQ0LDYgKzE0NjIsOSBAQAogCQkJCTkzOTgxMDQ2MDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJWaWV3RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwOUIw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwNzEwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2MzgzNTlEMjEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjMzRkZGQUUxMDEwRjJFODAw
QzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjM1MkFG
OUIxMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMTc3NCw2ICsxNzk1LDkgQEAKIAkJCQk5Mzk4MTEwNzA4MjRCRjAxMDA4
REYwMzggLyogV2ViVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU0NjRFMEZEOEE5Njgw
MEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEU4MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTYz
ODM1OUQzMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjMzRkZGQUYxMDEwRjJFODAwQzRFODgxIC8q
IFdlYldpbmRvd0FuaW1hdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJNjM1MkFGOUMxMDFBMjky
RTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmggYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDg1
MWRlZGYuLmUzZTU3OTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaApAQCAtMTQ5LDYgKzE0OSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlVmlld1VwZGF0ZSgpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lk
IGVudGVyRnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOworCiAgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFtZSos
IFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IGU2MmE5YzUuLmU5Nzk4NTQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBi
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC01NSw2ICs1
NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KICNpbXBvcnQgPFdl
YkNvcmUvR2VvbG9jYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2Ny
ZWVuLmg+CkBAIC03MTUsNiArNzE2LDI5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVs
ZVZpZXdVcGRhdGUoKQogCiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKworYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZpZGVv
VGFnKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUo
Tm9kZSogbm9kZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW21f
d2ViVmlldyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxzY3JlZW5G
b3JOb2RlKE5vZGUqKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBb
bV93ZWJWaWV3IF9leGl0RnVsbHNjcmVlbl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsgICAgCit9CisKKyNlbmRpZgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggYi9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmEwODMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0IDxDb2NvYS9Db2Nv
YS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFF
bGVtZW50Lmg+CisKK0Bwcm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdh
dGU7CitAY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlcjsKK0BjbGFz
cyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKK3sKK0Bwcml2YXRlCisgICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ+IF9tZWRpYUVsZW1lbnQ7IC8vIChyZXRhaW4pCisg
ICAgaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7IC8v
IChhc3NpZ24pCisKKyAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93OyAv
LyAocmV0YWluKQorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIqIF9o
dWRDb250cm9sbGVyOyAvLyAocmV0YWluKQorCisgICAgV2ViV2luZG93RmFkZUFuaW1hdGlvbiAq
X2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCisKKyAgICBCT09MIF9pc0VuZGluZ0Z1bGxzY3Jl
ZW47CisgICAgQk9PTCBfaXNXaW5kb3dMb2FkZWQ7CisgICAgQk9PTCBfZm9yY2VEaXNhYmxlQW5p
bWF0aW9uOworfQorCistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+
KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKworLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5T
U2NyZWVuICopc2NyZWVuOworLSAodm9pZClleGl0RnVsbHNjcmVlbjsKKworQGVuZAorCisjZW5k
aWYKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTRmZGQxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIubW0KQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW1wb3J0IDxRVEtpdC9RVEtpdC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4K
KyNpbXBvcnQgPEhJVG9vbGJveC9ISVRvb2xib3guaD4KKworI2ltcG9ydCA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ludFJlY3QuaD4KKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIgor
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2ltcG9y
dCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24u
aCIKKworU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKKworCitTT0ZUX0xJTktfQ0xBU1MoUVRL
aXQsIFFUTW92aWVWaWV3KQorCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93
IDogTlNXaW5kb3cgPE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAgU0VMIF9jb250cm9sbGVy
QWN0aW9uT25BbmltYXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVBbmltYXRpb24gKl9mdWxs
c2NyZWVuQW5pbWF0aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6
KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9u
OihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJv
bGxlckFjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyICgpIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+CitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyk7
CisgICAgQVNTRVJUKCFfZmFkZUFuaW1hdGlvbik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistIChOU1N0cmluZyAqKXdpbmRvd05pYk5hbWUKK3sKKyAgICByZXR1cm4gQCJObyBuaWIiOyAv
LyBSZXF1aXJlZCB0byBnZXQgLWxvYWRXaW5kb3cgdG8gYmUgY2FsbGVkLgorfQorCistICh2b2lk
KWxvYWRXaW5kb3cKK3sKKyAgICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBt
YWtlIHN1cmUgLXdpbmRvd051bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2Nh
bGVBbmltYXRpb24pLgorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVl
bldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpO
U0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpOT107CisgICAgW3NlbGYgc2V0V2luZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNl
XTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRMb2FkCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9
IFtzZWxmIHdpbmRvd107CisgICAgUVRNb3ZpZVZpZXcgKnZpZXcgPSBbW2dldFFUTW92aWVWaWV3
Q2xhc3MoKSBhbGxvY10gaW5pdF07CisgICAgW3ZpZXcgc2V0RmlsbENvbG9yOltOU0NvbG9yIGNs
ZWFyQ29sb3JdXTsKKyAgICBbd2luZG93IHNldENvbnRlbnRWaWV3OnZpZXddOworICAgIFt2aWV3
IHNldENvbnRyb2xsZXJWaXNpYmxlOk5PXTsKKyAgICBbdmlldyBzZXRQcmVzZXJ2ZXNBc3BlY3RS
YXRpbzpZRVNdOworICAgIFt2aWV3IHNldE1vdmllOihRVE1vdmllICopX21lZGlhRWxlbWVudC0+
cGxhdGZvcm1NZWRpYSgpXTsKKyAgICBbd2luZG93IHNldEhhc1NoYWRvdzpZRVNdOworICAgIFt3
aW5kb3cgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbC0xXTsKKyAgICBbdmlldyByZWxl
YXNlXTsKK30KKworLSAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRv
dworeworICAgIHJldHVybiAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRv
d107Cit9CisKKy0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sK
KyAgICByZXR1cm4gX21lZGlhRWxlbWVudC5nZXQoKTsKK30KKworLSAodm9pZClzZXRNZWRpYUVs
ZW1lbnQ6KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKK3sKKyAgICBf
bWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIGlmIChbc2VsZiBpc1dpbmRvd0xvYWRl
ZF0pIHsKKyAgICAgICAgUVRNb3ZpZVZpZXcgKm1vdmllVmlldyA9IChRVE1vdmllVmlldyAqKVtb
c2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKKyAgICAgICAgW21vdmllVmlldyBzZXRNb3ZpZToo
UVRNb3ZpZSAqKV9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKV07CisgICAgfQorfQorCist
IChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7Cisg
ICAgcmV0dXJuIF9kZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKK3sKKyAgICBfZGVsZWdh
dGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZCljbGVhckZhZGVBbmltYXRpb24KK3sKKyAgICBb
X2ZhZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgW19mYWRlQW5pbWF0aW9uIHNldFdp
bmRvdzpuaWxdOworICAgIFtfZmFkZUFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICBfZmFkZUFuaW1h
dGlvbiA9IG5pbDsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbgoreworICAg
IFtzZWxmIGNsZWFyRmFkZUFuaW1hdGlvbl07CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOwor
ICAgIFtzZWxmIHNldFdpbmRvdzpuaWxdOworICAgIFNldFN5c3RlbVVJTW9kZShrVUlNb2RlTm9y
bWFsLCAwKTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2h1
ZENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgX2h1ZENvbnRyb2xsZXIgPSBuaWw7CisgICAgW19i
YWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBjbG9zZV07CisgICAgW19iYWNrZ3JvdW5kRnVsbHNj
cmVlbldpbmRvdyByZWxlYXNlXTsKKyAgICBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgPSBu
aWw7CisgICAgCisgICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAvLyBBc3NvY2lhdGVkIC1yZXRhaW4g
aXMgaW4gLWV4aXRGdWxsc2NyZWVuLgorICAgIF9pc0VuZGluZ0Z1bGxzY3JlZW4gPSBOTzsKK30K
KworLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBjbGVhckZh
ZGVBbmltYXRpb25dOworCisgICAgQVNTRVJUKCFfaHVkQ29udHJvbGxlcik7CisgICAgX2h1ZENv
bnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdOworICAgIF9odWRDb250cm9sbGVyLmRlbGVnYXRlID0gc2VsZjsKKyAgICBpZiAoX21l
ZGlhRWxlbWVudC0+Y2FuUGxheSgpKSB7CisgICAgICAgIC8vIE9ubHkgZmFkZSB0aGUgaHVkIHdp
bmRvdyBpZiB3ZSBhcmUgcGF1c2VkLgorICAgICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRv
d0luXTsKKyAgICB9CisgICAgU2V0U3lzdGVtVUlNb2RlKGtVSU1vZGVBbGxTdXBwcmVzc2VkICwg
MCk7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworfQorCist
IChOU1JlY3QpbWVkaWFFbGVtZW50UmVjdAoreworICAgIHJldHVybiBfbWVkaWFFbGVtZW50LT5z
Y3JlZW5SZWN0KCk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgRXhwb3NlZCBJ
bnRlcmZhY2UKKworc3RhdGljIHZvaWQgY29uc3RyYWluRnJhbWVUb1JhdGlvT2ZGcmFtZShOU1Jl
Y3QgKmZyYW1lVG9Db25zdHJhaW4sIGNvbnN0IE5TUmVjdCAqZnJhbWUpCit7CisgICAgLy8gS2Vl
cCBhIGNvbnN0cmFpbmVkIGFzcGVjdCByYXRpbyBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdwor
ICAgIGRvdWJsZSBvcmlnaW5hbFJhdGlvID0gZnJhbWUtPnNpemUud2lkdGggLyBmcmFtZS0+c2l6
ZS5oZWlnaHQ7CisgICAgZG91YmxlIG5ld1JhdGlvID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS53
aWR0aCAvIGZyYW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+
IG9yaWdpbmFsUmF0aW8pIHsKKyAgICAgICAgZG91YmxlIG5ld1dpZHRoID0gb3JpZ2luYWxSYXRp
byAqIGZyYW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0OworICAgICAgICBkb3VibGUgZGlmZiA9
IGZyYW1lVG9Db25zdHJhaW4tPnNpemUud2lkdGggLSBuZXdXaWR0aDsKKyAgICAgICAgZnJhbWVU
b0NvbnN0cmFpbi0+c2l6ZS53aWR0aCA9IG5ld1dpZHRoOworICAgICAgICBmcmFtZVRvQ29uc3Ry
YWluLT5vcmlnaW4ueCArPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAgICAgICBkb3VibGUg
bmV3SGVpZ2h0ID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS53aWR0aCAvIG9yaWdpbmFsUmF0aW87
CisgICAgICAgIGRvdWJsZSBkaWZmID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS5oZWlnaHQgLSBu
ZXdIZWlnaHQ7CisgICAgICAgIGZyYW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0ID0gbmV3SGVp
Z2h0OworICAgICAgICBmcmFtZVRvQ29uc3RyYWluLT5vcmlnaW4ueSArPSBkaWZmIC8gMjsKKyAg
ICB9ICAgIAorfQorCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47
Cit7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2Ny
ZWVuXTsKKworICAgIE5TUmVjdCBmcmFtZSA9IFtzZWxmIG1lZGlhRWxlbWVudFJlY3RdOworICAg
IE5TUmVjdCBlbmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOworICAgIGNvbnN0cmFpbkZyYW1lVG9S
YXRpb09mRnJhbWUoJmVuZEZyYW1lLCAmZnJhbWUpOworCisgICAgLy8gQ3JlYXRlIGEgYmxhY2sg
d2luZG93IGlmIG5lZWRlZAorICAgIGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KSB7
CisgICAgICAgIF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2Nd
IGluaXRXaXRoQ29udGVudFJlY3Q6W3NjcmVlbiBmcmFtZV0gc3R5bGVNYXNrOk5TQm9yZGVybGVz
c1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKKyAg
ICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRPcGFxdWU6WUVTXTsKKyAgICAg
ICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29s
b3IgYmxhY2tDb2xvcl1dOworICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNl
dExldmVsOltbc2VsZiB3aW5kb3ddIGxldmVsXS0xXTsKKyAgICAgICAgW19iYWNrZ3JvdW5kRnVs
bHNjcmVlbldpbmRvdyBzZXRIaWRlc09uRGVhY3RpdmF0ZTpZRVNdOworICAgICAgICBbX2JhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisgICAgfSBl
bHNlIHsKKyAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFtZTpbc2Ny
ZWVuIGZyYW1lXSBkaXNwbGF5Ok5PXTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2Ugc3Vw
cG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUgcHJldmlvdXMgb25lIGlzbid0IG92ZXIgeWV0
CisgICAgQ0dGbG9hdCBpbml0aWFsQWxwaGEgPSAwOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikg
eworICAgICAgICBbX2ZhZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgICAgIGluaXRp
YWxBbHBoYSA9IFtfZmFkZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdOworICAgICAgICBbc2VsZiBj
bGVhckZhZGVBbmltYXRpb25dOworICAgIH0KKyAgICBpZiAoIV9mb3JjZURpc2FibGVBbmltYXRp
b24pCisgICAgICAgIF9mYWRlQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIGFs
bG9jXSBpbml0V2l0aER1cmF0aW9uOjAuMiB3aW5kb3c6X2JhY2tncm91bmRGdWxsc2NyZWVuV2lu
ZG93IGluaXRpYWxBbHBoYTppbml0aWFsQWxwaGEgZmluYWxBbHBoYToxXTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgYW5pbWF0aW9uCisgICAgICAgIGZyYW1lID0g
TlNaZXJvUmVjdDsKKyAgICB9CisgICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVG
cm9tUmVjdDpmcmFtZSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1h
dGlvbiBjb250cm9sbGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4p
XTsKKworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5k
b3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJd
XTsKK30KKworLSAodm9pZClleGl0RnVsbHNjcmVlbgoreworICAgIGlmIChfaXNFbmRpbmdGdWxs
c2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsK
KyAgICBbX2h1ZENvbnRyb2xsZXIgY2xvc2VXaW5kb3ddOworCisgICAgQ0dGbG9hdCBpbml0aWFs
QWxwaGEgPSAxOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikgeworICAgICAgICBpbml0aWFsQWxw
aGEgPSBbX2ZhZGVBbmltYXRpb24gY3VycmVudEFscGhhXTsKKyAgICAgICAgW3NlbGYgY2xlYXJG
YWRlQW5pbWF0aW9uXTsKKyAgICB9CisgICAgCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYg
bWVkaWFFbGVtZW50UmVjdF07CisKKyAgICBpZiAoIV9mb3JjZURpc2FibGVBbmltYXRpb24gJiYg
W1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGlzS2V5V2luZG93XSkKKyAgICAgICAgX2ZhZGVBbmlt
YXRpb24gPSBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgPyBbW1dlYldpbmRvd0ZhZGVBbmlt
YXRpb24gYWxsb2NdIGluaXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxz
Y3JlZW5XaW5kb3cgaW5pdGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOjBdIDogbmls
OworICAgIGVsc2UgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBhbmltYXRpb24KKyAg
ICAgICAgZW5kRnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKworICAgIFtbc2VsZiBmdWxsc2Ny
ZWVuV2luZG93XSBhbmltYXRlRnJvbVJlY3Q6W1tzZWxmIHdpbmRvd10gZnJhbWVdIHRvUmVjdDpl
bmRGcmFtZSB3aXRoU3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246
QHNlbGVjdG9yKHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuKV07CisKKyAgICAvLyBXZSBoYXZlIHRv
IHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFsaXZlIGZvciB0aGUgZW5k
IG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJlbGVhc2VzIHVzIHdlIGNv
dWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8vIEJhbGFuY2VkIGluIHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsgICAgCit9CisKKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgV2luZG93IGNhbGxiYWNrCisKKy0gKHZvaWQpcmVxdWVz
dEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KK3sKKyAgICBpZiAo
X2lzRW5kaW5nRnVsbHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZvcmNlRGlzYWJs
ZUFuaW1hdGlvbiA9ICFhbmltYXRpb247CisgICAgX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpcmVx
dWVzdEV4aXRGdWxsc2NyZWVuCit7CisgICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjpZRVNdOworfQorCistICh2b2lkKWZhZGVIVURJbgoreworICAgIFtfaHVkQ29u
dHJvbGxlciBmYWRlV2luZG93SW5dOworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93CisKKy0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdClj
b250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2lu
Z1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURf
UEFSQU0oYVN0eWxlKTsKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVj
dDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1
ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ10pKSB7CisgICAgICAgIFtzZWxmIHNldE9wYXF1ZTpOT107
CisgICAgICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07
CisgICAgICAgIFtzZWxmIHNldEhpZGVzT25EZWFjdGl2YXRlOllFU107CisgICAgICAgIFtzZWxm
IHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAgICAgIFtzZWxmIHNldEFjY2VwdHNNb3Vz
ZU1vdmVkRXZlbnRzOllFU107CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICBy
ZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Cit7CisgICAgcmV0dXJu
IFlFUzsKK30KKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAoreworICAg
IFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihp
ZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbW3NlbGYgd2luZG93
Q29udHJvbGxlcl0gcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsKK30KKworLSAodm9pZClhbmltYXRl
ZFJlc2l6ZURpZEVuZAoreworICAgIC8vIENhbGwgb3VyIHdpbmRvd0NvbnRyb2xsZXIuCisgICAg
aWYgKF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQpCisgICAgICAgIFtbc2VsZiB3aW5k
b3dDb250cm9sbGVyXSBwZXJmb3JtU2VsZWN0b3I6X2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlv
bkVuZF07CisgICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IE5VTEw7Cit9CisK
Ky8vCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYW5pbWF0ZSBhIGNoYW5nZSBvZiBmcmFtZSByZWN0
YW5nbGUKKy8vIFdlIHN1cHBvcnQgcXVldWluZyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3
ZSdsbCBjb3JyZWN0bHkKKy8vIGludGVycnVwdCB0aGUgcnVubmluZyBhbmltYXRpb24sIGFuZCBx
dWV1ZSB0aGUgbmV4dCBvbmUuCisvLworLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6KE5TUmVjdClz
dGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1h
dGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJvbGxlckFjdGlv
bgoreworICAgIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQgPSBjb250cm9sbGVyQWN0
aW9uOworCisgICAgQk9PTCB3YXNBbmltYXRpbmcgPSBOTzsKKyAgICBpZiAoX2Z1bGxzY3JlZW5B
bmltYXRpb24pIHsKKyAgICAgICAgd2FzQW5pbWF0aW5nID0gWUVTOworCisgICAgICAgIC8vIElu
dGVycnVwdCBhbnkgcnVubmluZyBhbmltYXRpb24uCisgICAgICAgIFtfZnVsbHNjcmVlbkFuaW1h
dGlvbiBzdG9wQW5pbWF0aW9uXTsKKworICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlY3Qg
dG8gZW5zdXJlIGEgc21vb3RoIHRyYW5zaXRpb24uCisgICAgICAgIHN0YXJ0UmVjdCA9IFtfZnVs
bHNjcmVlbkFuaW1hdGlvbiBjdXJyZW50RnJhbWVdOworICAgICAgICBbX2Z1bGxzY3JlZW5Bbmlt
YXRpb24gcmVsZWFzZV07CisgICAgICAgIF9mdWxsc2NyZWVuQW5pbWF0aW9uID0gbmlsOworICAg
IH0KKyAgICAKKyAgICBpZiAoTlNJc0VtcHR5UmVjdChzdGFydFJlY3QpIHx8IE5TSXNFbXB0eVJl
Y3QoZW5kUmVjdCkpIHsKKyAgICAgICAgLy8gRmFrZWx5IGVuZCB0aGUgc3ViYW5pbWF0aW9uLgor
ICAgICAgICBbc3ViQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczoxLjBdOworICAgICAgICAv
LyBBbmQgcmVtb3ZlIHRoZSB3ZWFrIGxpbmsgdG8gdGhlIHdpbmRvdy4KKyAgICAgICAgW3N1YkFu
aW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKworICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0
IGRpc3BsYXk6Tk9dOworICAgICAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsK
KyAgICAgICAgW3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRdOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCF3YXNBbmltYXRpbmcpIHsKKyAgICAgICAgLy8gV2UnbGwgZG93bnNj
YWxlIHRoZSB3aW5kb3cgZHVyaW5nIHRoZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciBy
ZXNvbHV0aW9uIHJlY3QKKyAgICAgICAgQk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0g
c3RhcnRSZWN0LnNpemUud2lkdGggPCBlbmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNp
emUuaGVpZ2h0IDwgZW5kUmVjdC5zaXplLmhlaWdodDsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6
aGlnaGVyUmVzb2x1dGlvbklzRW5kUmVjdCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpO
T107ICAgICAgICAKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNjcmVlbkFuaW1hdGlv
bik7CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9u
IGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2VsZiBpbml0YWxGcmFt
ZTpzdGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRp
b24gc2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxsc2NyZWVuQW5pbWF0
aW9uIHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0
aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4KKyAgICBbX2Z1bGxz
Y3JlZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtzZWxmIG1ha2VLZXlB
bmRPcmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0YXJ0QW5p
bWF0aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uICopYW5p
bWF0aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAgICBb
c2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFuaW1hdGlvbkRpZEVu
ZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5BbmltYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90IHJlYWxseSBvdmVy
IGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBsZXRpb24gZXZlbnRz
LgorICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjApCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1YmFuaW1hdGlvbikg
ZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgd2luZG93IGl2YXIg
dGhhdCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisgICAgW19mdWxsc2Ny
ZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9u
IGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5pbDsKKworICAgIFtz
ZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2
ZW50ICopdGhlRXZlbnQKK3sKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZmFkZUhVRElu
XTsKK30KKworLSAodm9pZClyZXNpZ25LZXlXaW5kb3cKK3sKKyAgICBbc3VwZXIgcmVzaWduS2V5
V2luZG93XTsKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcmVxdWVzdEV4aXRGdWxsc2Ny
ZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CitAZW5kCisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8p
ICovCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYTJhODI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgeworQHByaXZh
dGUKKyAgICBpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+
IF9kZWxlZ2F0ZTsKKyAgICBOU1RpbWVyICpfdGltZWxpbmVVcGRhdGVUaW1lcjsKKyAgICBOU1Ry
YWNraW5nQXJlYSAqX2FyZWE7CisgICAgQk9PTCBfbW91c2VJc0luSFVEOworfQorLSAoaWQ8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKy0g
KHZvaWQpc2V0RGVsZWdhdGU6KGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKWZhZGVXaW5kb3dJbjsKKy0gKHZvaWQpZmFk
ZVdpbmRvd091dDsKKy0gKHZvaWQpY2xvc2VXaW5kb3c7CitAZW5kCisKK0Bwcm90b2NvbCBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorLSAo
dm9pZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW47CistIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
KiltZWRpYUVsZW1lbnQ7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjkxODM4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0KQEAgLTAsMCArMSw0NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDxRVEtpdC9RVEtpdC5oPgorI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmgiCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlciAoUHJpdmF0ZSkKKy0gKHZvaWQpdXBkYXRlVGltZTsKK0BlbmQKKwor
QGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgOiBOU1dpbmRvdworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93CistIChpZClpbml0
V2l0aENvbnRlbnRSZWN0OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2Vy
KWFTdHlsZSBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjoo
Qk9PTClmbGFnCit7CisgICAgKHZvaWQpYVN0eWxlOworICAgIGlmICgoc2VsZiA9IFtzdXBlciBp
bml0V2l0aENvbnRlbnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5k
b3dNYXNrIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXSkpCisgICAgeworICAgICAg
ICBbc2VsZiBzZXRPcGFxdWU6Tk9dOworICAgICAgICBbc2VsZiBzZXRCYWNrZ3JvdW5kQ29sb3I6
W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgICAgICBbc2VsZiBzZXRMZXZlbDpOU1BvcFVwTWVu
dVdpbmRvd0xldmVsXTsKKyAgICAgICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6
WUVTXTsKKyAgICAgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKKyAgICAgICAg
W3NlbGYgc2V0TW92YWJsZUJ5V2luZG93QmFja2dyb3VuZDpZRVNdOworICAgICAgICBbc2VsZiBz
ZXRIaWRlc09uRGVhY3RpdmF0ZTpZRVNdOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZv
aWQpY2VudGVyCit7CisgICAgTlNSZWN0IGh1ZEZyYW1lID0gW3NlbGYgZnJhbWVdOworICAgIE5T
UmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gZnJhbWVdOworICAgIFtz
ZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBvaW50KChzY3JlZW5GcmFtZS5zaXplLndp
ZHRoIC0gaHVkRnJhbWUuc2l6ZS53aWR0aCkgLyAyICsgc2NyZWVuRnJhbWUub3JpZ2luLngsIGh1
ZEZyYW1lLnNpemUuaGVpZ2h0ICogMiArIHNjcmVlbkZyYW1lLm9yaWdpbi54KV07Cit9CisKK0Bl
bmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyICgp
IDxOU1dpbmRvd0RlbGVnYXRlPgorQGVuZAorIAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBB
U1NFUlQoIV90aW1lbGluZVVwZGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIV9hcmVhKTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQor
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQor
CistICh2b2lkKXNjaGVkdWxlVGltZVVwZGF0ZQoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2
aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5z
Y2hlZHVsZVRpbWVVcGRhdGUpIG9iamVjdDpzZWxmXTsKKworICAgIC8vIEZpcnN0LCB1cGRhdGUg
cmlnaHQgYXdheSwgdGhlbiBzY2hlZHVsZSBmdXR1cmUgdXBkYXRlCisgICAgW3NlbGYgdXBkYXRl
VGltZV07CisKKyAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IFtbTlNUaW1lciB0aW1lcldpdGhU
aW1lSW50ZXJ2YWw6MC4yNTAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVwZGF0ZVRp
bWUpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKKyAgICBbW05TUnVuTG9vcCBj
dXJyZW50UnVuTG9vcF0gYWRkVGltZXI6X3RpbWVsaW5lVXBkYXRlVGltZXIgZm9yTW9kZTpOU1J1
bkxvb3BDb21tb25Nb2Rlc107CisgICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGZpcmVdOworfQor
CistICh2b2lkKXVuc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1
bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0Om5pbF07CisKKyAgICBpZiAoW190aW1lbGluZVVw
ZGF0ZVRpbWVyIGlzVmFsaWRdKQorICAgICAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgaW52YWxp
ZGF0ZV07CisgICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIHJlbGVhc2VdOworICAgIF90aW1lbGlu
ZVVwZGF0ZVRpbWVyID0gbmlsOworfQorCistICh2b2lkKWZhZGVXaW5kb3dJbgoreworICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICghW3dpbmRvdyBpc1Zpc2li
bGVdKQorICAgICAgICBbd2luZG93IHNldEFscGhhVmFsdWU6MF07CisKKyAgICBbd2luZG93IG9y
ZGVyRnJvbnQ6c2VsZl07CisgICAgW1t3aW5kb3cgYW5pbWF0b3JdIHNldEFscGhhVmFsdWU6MV07
CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtOU09iamVjdCBjYW5jZWxQ
cmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
ZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91c2VJc0luSFVEKQorICAg
ICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhP
YmplY3Q6bmlsIGFmdGVyRGVsYXk6MS4wXTsKK30KKworLSAodm9pZClmYWRlV2luZG93T3V0Cit7
CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAgIFtbW3Nl
bGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTowXTsKKyAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSB3aXRoT2JqZWN0Om5pbCBh
ZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2luZG93Cit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiB1bnNjaGVkdWxl
VGltZVVwZGF0ZV07CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAg
W1t3aW5kb3cgY29udGVudFZpZXddIHJlbW92ZVRyYWNraW5nQXJlYTpfYXJlYV07CisgICAgW19h
cmVhIHJlbGVhc2VdOzsKKyAgICBfYXJlYSA9IG5pbDsKKyAgICBbd2luZG93IGNsb3NlXTsKKyAg
ICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKK30KKworc3RhdGljIE5TQ29udHJvbCAqY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoaW50IGNvbnRyb2xUeXBlLCBDR1JlY3QgZnJhbWUp
Cit7CisgICAgTlNDb250cm9sICpjb250cm9sID0gV0tDcmVhdGVNZWRpYVVJQ29udHJvbChjb250
cm9sVHlwZSk7CisgICAgW2NvbnRyb2wgc2V0RnJhbWU6TlNSZWN0RnJvbUNHUmVjdChmcmFtZSld
OworICAgIHJldHVybiBjb250cm9sOworfQorCitzdGF0aWMgTlNUZXh0RmllbGQgKmNyZWF0ZVRp
bWVUZXh0RmllbGQoQ0dSZWN0IGZyYW1lKQoreworICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQg
PSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBbdGV4dEZp
ZWxkIHNldFRleHRDb2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07CisgICAgW3RleHRGaWVsZCBz
ZXRCb3JkZXJlZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRGb250OltOU0ZvbnQgc3lzdGVtRm9u
dE9mU2l6ZToxMF1dOworICAgIFt0ZXh0RmllbGQgc2V0RHJhd3NCYWNrZ3JvdW5kOk5PXTsKKyAg
ICBbdGV4dEZpZWxkIHNldEJlemVsZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0RWRpdGFibGU6
Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0U2VsZWN0YWJsZTpOT107CisgICAgcmV0dXJuIHRleHRG
aWVsZDsKK30KKworc3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7CitzdGF0
aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKKworLSAoTlNTdHJpbmcgKil3aW5k
b3dOaWJOYW1lCit7CisgICAgcmV0dXJuIEAiTm8gTmliIjsgLy8gU28gdGhhdCAtd2luZG93RGlk
TG9hZCBnZXRzIGNhbGxlZC4KK30KKworCistICh2b2lkKWxvYWRXaW5kb3cKK3sKKyAgICBOU1dp
bmRvdyogd2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRX
aXRoQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0
KSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3Jl
QnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
W3NlbGYgc2V0V2luZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKK30KKworLSAo
dm9pZCl3aW5kb3dEaWRMb2FkCit7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQga01hcmdpbiA9
IDk7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQga01hcmdpblRvcCA9IDk7CisgICAgc3RhdGlj
IGNvbnN0IENHRmxvYXQga0J1dHRvblNpemUgPSAyNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9h
dCBrQnV0dG9uTWluaVNpemUgPSAxNjsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3
aW5kb3ddOworICAgIE5TQXNzZXJ0KHdpbmRvdywgQCJObyB3aW5kb3cgd2FzIGNyZWF0ZWQiKTsK
KworICAgIE5TVmlldyAqYmFja2dyb3VuZCA9IFdLQ3JlYXRlTWVkaWFVSUJhY2tncm91bmRWaWV3
KCk7CisgICAgW3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJlYSA9
IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNd
IG9wdGlvbnM6TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0aXZl
QWx3YXlzIG93bmVyOnNlbGYgdXNlckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFj
a2luZ0FyZWE6X2FyZWFdOworICAgIFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5T
VmlldyAqY29udGVudFZpZXcgPSBbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107CisKKyAgICBD
R0Zsb2F0IHRvcCA9IHdpbmRvd0hlaWdodCAtIGtNYXJnaW5Ub3A7CisgICAgQ0dGbG9hdCBjZW50
ZXIgPSAod2luZG93V2lkdGggLSBrQnV0dG9uU2l6ZSkgLyAyOworICAgIE5TQ29udHJvbCAqcGxh
eUJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNv
bnRyb2xQbGF5UGF1c2VCdXR0b24sIENHUmVjdE1ha2UoY2VudGVyLCB0b3AgLSBrQnV0dG9uU2l6
ZSwga0J1dHRvblNpemUsIGtCdXR0b25TaXplKSk7CisgICAgW3BsYXlCdXR0b24gYmluZDpAInZh
bHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAicGxheWluZyIgb3B0aW9uczpuaWxdOwor
ICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnBsYXlCdXR0b25dOworICAgIFtwbGF5QnV0dG9u
IHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCBsZWZ0T2ZDZW50ZXIgPSAod2luZG93V2lkdGggLSBr
QnV0dG9uU2l6ZSAqIDMgLSBrQnV0dG9uU2l6ZSAtIGtCdXR0b25TaXplKSAvIDI7CisgICAgTlND
b250cm9sICpyZXdpbmRCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShXS01lZGlhVUlDb250cm9sUmV3aW5kQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnRPZkNlbnRlciwg
dG9wIC0ga0J1dHRvblNpemUsIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSkpOworICAgIFtyZXdp
bmRCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihyZXdpbmQ6KV07CisgICAgW3Jld2luZEJ1dHRv
biBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6cmV3aW5kQnV0
dG9uXTsKKyAgICBbcmV3aW5kQnV0dG9uIHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCByaWdodE9m
Q2VudGVyID0gKHdpbmRvd1dpZHRoICsga0J1dHRvblNpemUgKiAzKSAvIDI7CisgICAgTlNDb250
cm9sICpmYXN0Rm9yd2FyZEJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xU
eXBlKFdLTWVkaWFVSUNvbnRyb2xGYXN0Rm9yd2FyZEJ1dHRvbiwgQ0dSZWN0TWFrZShyaWdodE9m
Q2VudGVyLCB0b3AgLSBrQnV0dG9uU2l6ZSwga0J1dHRvblNpemUsIGtCdXR0b25TaXplKSk7Cisg
ICAgW3Jld2luZEJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKGZhc3RGb3J3YXJkOildOworICAg
IFtyZXdpbmRCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3OmZhc3RGb3J3YXJkQnV0dG9uXTsKKyAgICBbZmFzdEZvcndhcmRCdXR0b24gcmVsZWFzZV07
CisKKyAgICBDR0Zsb2F0IGNsb3NlVG9SaWdodCA9IHdpbmRvd1dpZHRoIC0gMiAqIGtNYXJnaW4g
LSBrQnV0dG9uTWluaVNpemU7CisgICAgTlNDb250cm9sICpleGl0RnVsbHNjcmVlbkJ1dHRvbiA9
IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xFeGl0
RnVsbHNjcmVlbkJ1dHRvbiwgQ0dSZWN0TWFrZShjbG9zZVRvUmlnaHQsIHRvcCAtIGtCdXR0b25T
aXplIC8gMiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1p
bmlTaXplKSk7CisgICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3Io
ZXhpdEZ1bGxzY3JlZW46KV07CisgICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHNldFRhcmdldDpz
ZWxmXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpleGl0RnVsbHNjcmVlbkJ1dHRvbl07
CisgICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHJlbGVhc2VdOworICAgIAorICAgIENHRmxvYXQg
bGVmdCA9IGtNYXJnaW47CisgICAgTlNDb250cm9sICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRl
Q29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFZvbHVtZURvd25C
dXR0b24sIENHUmVjdE1ha2UobGVmdCwgdG9wIC0ga0J1dHRvblNpemUgLyAyIC0ga0J1dHRvbk1p
bmlTaXplIC8gMiwga0J1dHRvbk1pbmlTaXplLCBrQnV0dG9uTWluaVNpemUpKTsKKyAgICBbY29u
dGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVEb3duQnV0dG9uXTsKKyAgICBbdm9sdW1lRG93bkJ1
dHRvbiByZWxlYXNlXTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgdm9sdW1lU2xpZGVyV2lkdGgg
PSA1MDsKKworICAgIGxlZnQgPSBrTWFyZ2luICsga0J1dHRvbk1pbmlTaXplOworICAgIE5TQ29u
dHJvbCAqdm9sdW1lU2xpZGVyID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUo
V0tNZWRpYVVJQ29udHJvbFNsaWRlciwgQ0dSZWN0TWFrZShsZWZ0LCB0b3AgLSBrQnV0dG9uU2l6
ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCB2b2x1bWVTbGlkZXJXaWR0aCwga0J1dHRvbk1p
bmlTaXplKSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lU2xpZGVyXTsKKyAg
ICBbdm9sdW1lU2xpZGVyIGJpbmQ6QCJtYXhWYWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0
aDpAIm1heFZvbHVtZSIgb3B0aW9uczpuaWxdOworICAgIFt2b2x1bWVTbGlkZXIgYmluZDpAInZh
bHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRoOkAidm9sdW1lIiBvcHRpb25zOm5pbF07Cisg
ICAgW3ZvbHVtZVNsaWRlciByZWxlYXNlXTsKKworICAgIGxlZnQgPSBrTWFyZ2luICsga0J1dHRv
bk1pbmlTaXplICsgdm9sdW1lU2xpZGVyV2lkdGggKyBrQnV0dG9uTWluaVNpemUgLyAyOworICAg
IE5TQ29udHJvbCAqYnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUo
V0tNZWRpYVVJQ29udHJvbFZvbHVtZVVwQnV0dG9uLCBDR1JlY3RNYWtlKGxlZnQsIHRvcCAtIGtC
dXR0b25TaXplIC8gMiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1
dHRvbk1pbmlTaXplKSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6YnV0dG9uXTsKKyAg
ICBbYnV0dG9uIHJlbGVhc2VdOworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZVRleHRX
aWR0aCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVySGVpZ2h0ID0gMTM7CisgICAg
c3RhdGljIGNvbnN0IGludCBzbGlkZXJNYXJnaW5GaXh1cCA9IDQ7CisKKyAgICBOU0NvbnRyb2wg
KnNsaWRlciA9IFdLQ3JlYXRlTWVkaWFVSUNvbnRyb2woV0tNZWRpYVVJQ29udHJvbFRpbWVsaW5l
KTsKKyAgICBbc2xpZGVyIHNldEZyYW1lOk5TTWFrZVJlY3Qoa01hcmdpbiArIHRpbWVUZXh0V2lk
dGggKyBrTWFyZ2luLzIsIGtNYXJnaW4gLSBzbGlkZXJNYXJnaW5GaXh1cCwgd2luZG93V2lkdGgg
LSAyICogKGtNYXJnaW4gLSBzbGlkZXJNYXJnaW5GaXh1cCkgLSBrTWFyZ2luICogMiAtIDIgKiB0
aW1lVGV4dFdpZHRoLCBzbGlkZXJIZWlnaHQpXTsKKyAgICBbc2xpZGVyIGJpbmQ6QCJ2YWx1ZSIg
dG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAImN1cnJlbnRRVFRpbWUiIG9wdGlvbnM6bmlsXTsK
KyAgICBbc2xpZGVyIGJpbmQ6QCJtYXhWYWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpA
ImR1cmF0aW9uIiBvcHRpb25zOm5pbF07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6c2xp
ZGVyXTsKKyAgICBbc2xpZGVyIHJlbGVhc2VdOworCisgICAgc3RhdGljIGNvbnN0IGludCB0aW1l
VGV4dEhlaWdodCA9IDExOworCisgICAgTlNUZXh0RmllbGQgKmVsYXBzZWRUaW1lVGV4dCA9IGNy
ZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdChrTWFyZ2luLCBrTWFyZ2luLCB0aW1lVGV4dFdp
ZHRoLCB0aW1lVGV4dEhlaWdodCkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmVsYXBz
ZWRUaW1lVGV4dF07CisgICAgW2VsYXBzZWRUaW1lVGV4dCBiaW5kOkAidmFsdWUiIHRvT2JqZWN0
OnNlbGYgd2l0aEtleVBhdGg6QCJlbGFwc2VkVGltZVRleHQiIG9wdGlvbnM6bmlsXTsKKyAgICBb
ZWxhcHNlZFRpbWVUZXh0IHJlbGVhc2VdOworCisgICAgTlNUZXh0RmllbGQgKnJlbWFpbmluZ1Rp
bWVUZXh0ID0gY3JlYXRlVGltZVRleHRGaWVsZChOU01ha2VSZWN0KHdpbmRvd1dpZHRoIC0ga01h
cmdpbiAtIHRpbWVUZXh0V2lkdGgsIGtNYXJnaW4sIHRpbWVUZXh0V2lkdGgsIHRpbWVUZXh0SGVp
Z2h0KSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6cmVtYWluaW5nVGltZVRleHRdOwor
ICAgIFtyZW1haW5pbmdUaW1lVGV4dCBiaW5kOkAidmFsdWUiIHRvT2JqZWN0OnNlbGYgd2l0aEtl
eVBhdGg6QCJyZW1haW5pbmdUaW1lVGV4dCIgb3B0aW9uczpuaWxdOworICAgIFtyZW1haW5pbmdU
aW1lVGV4dCByZWxlYXNlXTsKKyAgICAKKyAgICBbd2luZG93IGNlbnRlcl07Cit9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqICBCaW5kaW5ncworICoKKyAqLworCist
ICh2b2lkKXVwZGF0ZVZvbHVtZQoreworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpA
InZvbHVtZSJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidm9sdW1lIl07Cit9
CisKKy0gKHZvaWQpdXBkYXRlVGltZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07CisKKyAg
ICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07CisgICAgW3Nl
bGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07CisgICAgW3NlbGYgd2ls
bENoYW5nZVZhbHVlRm9yS2V5OkAiZHVyYXRpb24iXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1
ZUZvcktleTpAImR1cmF0aW9uIl07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAi
cmVtYWluaW5nVGltZVRleHQiXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpAInJl
bWFpbmluZ1RpbWVUZXh0Il07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAiZWxh
cHNlZFRpbWVUZXh0Il07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJlbGFwc2Vk
VGltZVRleHQiXTsKK30KKworLSAoUVRUaW1lKWN1cnJlbnRRVFRpbWUKK3sKKyAgICBRVFRpbWUg
cmV0OworICAgIHJldC50aW1lVmFsdWUgPSBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0gPyBbX2Rl
bGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgKiAzMCA6IDA7CisgICAgcmV0LnRp
bWVTY2FsZSA9IDMwOworICAgIHJldHVybiByZXQ7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFFU
VGltZTooUVRUaW1lKWN1cnJlbnRRVFRpbWUKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFF
bGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZTsK
KyAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnNldEN1cnJlbnRUaW1lKChkb3VibGUpY3Vy
cmVudFFUVGltZS50aW1lVmFsdWUgLyAoZG91YmxlKWN1cnJlbnRRVFRpbWUudGltZVNjYWxlLCBl
KTsKK30KKworLSAoZG91YmxlKWR1cmF0aW9uCit7CisgICAgcmV0dXJuIFtfZGVsZWdhdGUgbWVk
aWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+ZHVyYXRpb24oKSA6IDA7Cit9
CisKKy0gKGRvdWJsZSltYXhWb2x1bWUKK3sKKyAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIg
cmVzb2x1dGlvbgorICAgIHJldHVybiAxMDA7Cit9CisKKy0gKGRvdWJsZSl2b2x1bWUKK3sKKyAg
ICByZXR1cm4gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8gW19kZWxlZ2F0ZSBtZWRpYUVsZW1l
bnRdLT52b2x1bWUoKSAqIFtzZWxmIG1heFZvbHVtZV0gOiAwOworfQorCistICh2b2lkKXNldFZv
bHVtZTooZG91YmxlKXZvbHVtZQoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRd
KQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlOworICAgIFtf
ZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVt
ZV0sIGUpOworfQorCisKKy0gKEJPT0wpcGxheWluZworeworICAgIGlmICghW19kZWxlZ2F0ZSBt
ZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFbX2RlbGVn
YXRlIG1lZGlhRWxlbWVudF0tPmNhblBsYXkoKTsKK30KKworLSAodm9pZClzZXRQbGF5aW5nOihC
T09MKXBsYXlpbmcKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHBsYXlpbmcpCisgICAgICAgIFtfZGVsZWdhdGUgbWVkaWFF
bGVtZW50XS0+cGxheSgpOworICAgIGVsc2UKKyAgICAgICAgW19kZWxlZ2F0ZSBtZWRpYUVsZW1l
bnRdLT5wYXVzZSgpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnRpbWVUb1N0cmluZyhkb3VibGUg
dGltZSkKK3sKKyAgICBpZiAoIWlzZmluaXRlKHRpbWUpKQorICAgICAgICB0aW1lID0gMDsKKyAg
ICBpbnQgc2Vjb25kcyA9IChpbnQpZmFic2YodGltZSk7IAorICAgIGludCBob3VycyA9IHNlY29u
ZHMgLyAoNjAgKiA2MCk7CisgICAgaW50IG1pbnV0ZXMgPSAoc2Vjb25kcyAvIDYwKSAlIDYwOwor
ICAgIHNlY29uZHMgJT0gNjA7CisgICAgaWYgKGhvdXJzKSB7CisgICAgICAgIGlmIChob3VycyA+
IDkpCisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyUw
MmQ6JTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBob3VycywgbWludXRlcywgc2Vj
b25kc107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVzJTAxZDolMDJkOiUwMmQiLCAodGltZSA8IDAgPyAiLSIgOiAiIiksIGhv
dXJzLCBtaW51dGVzLCBzZWNvbmRzXTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyUwMmQ6JTAyZCIsICh0aW1lIDwgMCA/ICIt
IiA6ICIiKSwgbWludXRlcywgc2Vjb25kc107CisgICAgCit9CisKK3N0YXRpYyBOU1N0cmluZyAq
c3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQoTlNTdHJpbmcgKnN0cmluZywgTlNUZXh0QWxpZ25t
ZW50IGFsaWduKQoreworICAgIE5TU2hhZG93ICpibGFja1NoYWRvdyA9IFtbTlNTaGFkb3cgYWxs
b2NdIGluaXRdOworICAgIFtibGFja1NoYWRvdyBzZXRTaGFkb3dDb2xvcjpbTlNDb2xvciBibGFj
a0NvbG9yXV07CisgICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd0JsdXJSYWRpdXM6MF07CisgICAg
W2JsYWNrU2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDAsIC0xKV07CisgICAgTlNN
dXRhYmxlUGFyYWdyYXBoU3R5bGUgKnN0eWxlID0gW1tOU011dGFibGVQYXJhZ3JhcGhTdHlsZSBh
bGxvY10gaW5pdF07CisgICAgW3N0eWxlIHNldEFsaWdubWVudDphbGlnbl07CisgICAgTlNEaWN0
aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OmJsYWNrU2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsIHN0eWxlLCBOU1BhcmFncmFwaFN0
eWxlQXR0cmlidXRlTmFtZSwgbmlsXTsKKyAgICBbc3R5bGUgcmVsZWFzZV07CisKKyAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKiBhdHRyU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOnN0cmluZyBhdHRyaWJ1dGVzOmRpY3RdOworICAgIHJldHVybiBbYXR0
clN0cmluZyBhdXRvcmVsZWFzZV07ICAgIAorfQorCistIChOU1N0cmluZyAqKXJlbWFpbmluZ1Rp
bWVUZXh0Cit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJl
dHVybiBAIiI7CisKKyAgICAvLyBOZWdhdGl2ZSBudW1iZXIKKyAgICByZXR1cm4gc3RyaW5nVG9U
aW1lVGV4dEF0dHJpYnV0ZWQodGltZVRvU3RyaW5nKFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+
Y3VycmVudFRpbWUoKSAtIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+ZHVyYXRpb24oKSksIE5T
TGVmdFRleHRBbGlnbm1lbnQpOworfQorCistIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dAor
eworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gQCIi
OworCisgICAgcmV0dXJuIHN0cmluZ1RvVGltZVRleHRBdHRyaWJ1dGVkKHRpbWVUb1N0cmluZyhb
X2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpLCBOU1JpZ2h0VGV4dEFsaWdu
bWVudCk7Cit9CisKKy8qCisgKiAgVHJhY2tpbmcgYXJlYSBjYWxsYmFja3MKKyAqCisgKi8KKwor
LSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgSFVEIHdvbid0IGJlIGhpZGRlbiBmcm9tIG5vdworICAgIF9tb3VzZUlzSW5IVUQg
PSBZRVM7CisgICAgW3NlbGYgZmFkZVdpbmRvd0luXTsKK30KKworLSAodm9pZCltb3VzZUV4aXRl
ZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgX21vdXNlSXNJbkhVRCA9IE5POworICAgIFtz
ZWxmIGZhZGVXaW5kb3dJbl07Cit9CisKKy8qCisgKiAgSW50ZXJmYWNlIGNhbGxiYWNrcworICoK
KyAqLworCistICh2b2lkKWV4aXRGdWxsc2NyZWVuOihpZClzZW5kZXIKK3sKKyAgICBbX2RlbGVn
YXRlIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07IAorfQorCisvKgorICogIFdpbmRvdyBjYWxsYmFj
aworICoKKyAqLworCistICh2b2lkKXdpbmRvd0RpZEV4cG9zZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOworfQorCistICh2
b2lkKXdpbmRvd0RpZENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KaW5kZXggODUxZDAzMS4uNjBkZDFhOCAxMDA2NDQKLS0tIGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
QEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgIldlYlRleHRJdGVyYXRvci5oIgogI2ltcG9ydCAi
V2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgPENvcmVGb3VuZGF0
aW9uL0NGU2V0Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvbi5oPgogI2lt
cG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtMjQ3Niw3ICsyNDc3
LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcm91bmQoKQogICAg
IAogICAgIGlmIChbc2VsZiBfbmVlZHNGcmFtZUxvYWREZWxlZ2F0ZVJldGFpblF1aXJrXSkKICAg
ICAgICAgW19wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZSByZWxlYXNlXTsKLSAgICAgICAgCisK
ICAgICBbX3ByaXZhdGUgcmVsZWFzZV07CiAgICAgLy8gW3N1cGVyIGRlYWxsb2NdIGNhbiBlbmQg
dXAgZGlzcGF0Y2hpbmcgYWdhaW5zdCBfcHJpdmF0ZSAoMzQ2NjA4MikKICAgICBfcHJpdmF0ZSA9
IG5pbDsKQEAgLTU0NTMsNiArNTQ1NCw0NSBAQCBzdGF0aWMgdm9pZCB2aWV3VXBkYXRlUnVuTG9v
cE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdAogCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKworLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9y
Tm9kZTooV2ViQ29yZTo6Tm9kZSopbm9kZQoreworICAgIEFTU0VSVChub2RlLT5oYXNUYWdOYW1l
KFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiB2
aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4gKG5vZGUpOworCisg
ICAgaWYgKF9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcikgeworICAgICAgICBpZiAoW19w
cml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBtZWRpYUVsZW1lbnRdID09IHZpZGVvRWxlbWVu
dCkgeworICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0aGF0IHRo
ZSB1bmRlcmxheWluZyBwbGFmdG9ybU1vdmllKCkKKyAgICAgICAgICAgIC8vIGhhcyBjaGFuZ2Vk
LiBKdXN0IGZvcmNlIGFuIHVwZGF0ZS4KKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgICAgICBy
ZXR1cm47IC8vIE5vIG1vcmUgdG8gZG8uCisgICAgICAgIH0KKworICAgICAgICAvLyBGaXJzdCBl
eGl0IEZ1bGxzY3JlZW4gZm9yIHRoZSBvbGQgbWVkaWFFbGVtZW50LgorICAgICAgICBbX3ByaXZh
dGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0tPmV4aXRGdWxsc2NyZWVuKCk7
CisgICAgICAgIC8vIFRoaXMgcHJldmlvdXMgY2FsbCBoYXMgdG8gdHJpZ2dlciBfZXhpdEZ1bGxz
Y3JlZW4sCisgICAgICAgIC8vIHdoaWNoIGhhcyB0byBjbGVhciBfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIuCisgICAgICAgIEFTU0VSVCghX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9s
bGVyKTsKKyAgICB9CisgICAgaWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpIHsK
KyAgICAgICAgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAgICAgW19w
cml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxzY3JlZW46W1tzZWxmIHdpbmRv
d10gc2NyZWVuXV07ICAgICAgICAKKyAgICB9CisgICAgZWxzZQorICAgICAgICBbX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworfQor
CistICh2b2lkKV9leGl0RnVsbHNjcmVlbgoreworICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNv
bnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dOworICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyID0gbmls
OworfQorCisjZW5kaWYKKwogQGVuZAogCiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRApkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEuaAppbmRleCBiMDQzZjFlLi41MjY3NzVkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEuaApAQCAtNDMsNiArNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBAY2xh
c3MgV2ViUHJlZmVyZW5jZXM7CiBAY2xhc3MgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyOwog
QHByb3RvY29sIFdlYkZvcm1EZWxlZ2F0ZTsKKyNpZiBFTkFCTEUoVklERU8pCitAY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcjsKKyNlbmRpZgogCiBleHRlcm4gQk9PTCBhcHBsaWNh
dGlvbklzVGVybWluYXRpbmc7CiBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7
CkBAIC0xNTcsNSArMTYwLDggQEAgZXh0ZXJuIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50
OwogICAgIE5TRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7CiAKICAgICBDRlJ1bkxvb3BU
aW1lclJlZiB1cGRhdGVNb3VzZW92ZXJUaW1lcjsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAqZnVsbHNjcmVlbkNvbnRyb2xsZXI7CisjZW5kaWYK
IH0KIEBlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBi
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQppbmRleCA0OGU3ZjZjLi43ZTA3MTA1
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KKysrIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCkBAIC04MCw2ICs4MCw3IEBAIGludCBwbHVn
aW5EYXRhYmFzZUNsaWVudENvdW50ID0gMDsKICAgICBBU1NFUlQoYXBwbGljYXRpb25Jc1Rlcm1p
bmF0aW5nIHx8ICFwYWdlKTsKICAgICBBU1NFUlQoYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nIHx8
ICFwcmVmZXJlbmNlcyk7CiAgICAgQVNTRVJUKCFpbnNlcnRpb25QYXN0ZWJvYXJkKTsKKyAgICBB
U1NFUlQoIWZ1bGxzY3JlZW5Db250cm9sbGVyKTsKIAogICAgIFthcHBsaWNhdGlvbk5hbWVGb3JV
c2VyQWdlbnQgcmVsZWFzZV07CiAgICAgW2JhY2tncm91bmRDb2xvciByZWxlYXNlXTsKQEAgLTk5
LDYgKzEwMCw3IEBAIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0gMDsKIHsKICAgICBB
U1NFUlRfTUFJTl9USFJFQUQoKTsKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQpOwor
ICAgIEFTU0VSVCghZnVsbHNjcmVlbkNvbnRyb2xsZXIpOwogCiAgICAgW3N1cGVyIGZpbmFsaXpl
XTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaCBi
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAppbmRleCA3MTRkYTg3Li44Yjdh
Mjk2IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCkBAIC00MSw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIEtleWJvYXJk
RXZlbnQ7CiAgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBOb2RlOwogfQogI2VuZGlmCiAKQEAg
LTE2OCw0ICsxNjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC0gKHZvaWQpX3NldEluc2Vy
dGlvblBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CiAKKyNpZiBFTkFCTEUo
VklERU8pICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCistICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5G
b3JOb2RlOihXZWJDb3JlOjpOb2RlKilub2RlOworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW47Cisj
ZW5kaWYKKwogQGVuZApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0Fu
aW1hdGlvbi5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2RjY2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKQEAgLTAsMCArMSw1OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisKK0BpbnRlcmZhY2UgV2ViV2lu
ZG93U2NhbGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7CitAcHJpdmF0ZQorICAgIE5TUmVjdCBf
aW5pdGlhbEZyYW1lLCBfZmluYWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dp
bmRvdzsgLy8gKGFzc2lnbikKKyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJl
dGFpbikKKyAgICBOU1RpbWVJbnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0
V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2lu
ZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6
KE5TUmVjdClmaW5hbEZyYW1lOworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRp
b24gKilhbmltYXRpb247CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUg
dG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVu
IGFwcHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5k
CisKKworQGludGVyZmFjZSBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIDogTlNBbmltYXRpb24gewor
QHByaXZhdGUKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGEsIF9maW5hbEFscGhhOworICAgIE5T
V2luZG93ICpfd2luZG93OyAvLyAocmV0YWluKQorICAgIEJPT0wgX2lzU3RvcHBlZDsKKyAgICAK
K30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRv
dzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWluaXRpYWxBbHBoYSBm
aW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhh
OworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0byBjbGVhciB0aGUgd2VhayBs
aW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93
ICopd2luZG93OworQGVuZApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRv
d0FuaW1hdGlvbi5tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjI2NmEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwy
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQg
IldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
c3RhdGljIGNvbnN0IENHRmxvYXQgc2xvbW9GYWN0b3IgPSAxMC47CisKK3N0YXRpYyBOU1RpbWVJ
bnRlcnZhbCBXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihOU1RpbWVJbnRl
cnZhbCBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gKFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYg
TlNTaGlmdEtleU1hc2spID8gZHVyYXRpb24gKiBzbG9tb0ZhY3RvciA6IGR1cmF0aW9uOyAgICAg
ICAgCit9CisKK3N0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRpYWxGcmFtZSwg
TlNSZWN0IF9maW5hbEZyYW1lLCBkb3VibGUgZmFjdG9yKQoreworICAgIE5TUmVjdCBjdXJyZW50
UmVjdCA9IF9pbml0aWFsRnJhbWU7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnggKz0gKE5TTWlu
WChfZmluYWxGcmFtZSkgLSBOU01pblgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1
cnJlbnRSZWN0Lm9yaWdpbi55ICs9IChOU01pblkoX2ZpbmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0
aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJyZW50UmVjdC5zaXplLndpZHRoICs9IChOU1dp
ZHRoKF9maW5hbEZyYW1lKSAtIE5TV2lkdGgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAg
IGN1cnJlbnRSZWN0LnNpemUuaGVpZ2h0ICs9IChOU0hlaWdodChfZmluYWxGcmFtZSkgLSBOU0hl
aWdodChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgcmV0dXJuIGN1cnJlbnRSZWN0Owor
fQorCitzdGF0aWMgQ0dGbG9hdCBzcXVhcmVkRGlzdGFuY2UoTlNQb2ludCBwb2ludDEsIE5TUG9p
bnQgcG9pbnQyKQoreworICAgIENHRmxvYXQgZGVsdGFYID0gcG9pbnQxLnggLSBwb2ludDIueDsK
KyAgICBDR0Zsb2F0IGRlbHRhWSA9IHBvaW50MS55IC0gcG9pbnQyLnk7CisgICAgcmV0dXJuIGRl
bHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWTsKK30KKworQGltcGxlbWVudGF0aW9uIFdl
YldpbmRvd1NjYWxlQW5pbWF0aW9uCistIChpZClpbml0Cit7CisgICAgaWYgKChzZWxmID0gW3N1
cGVyIGluaXRdKSkgeworICAgICAgICBbc2VsZiBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNB
bmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWVSYXRl
OjYwLl07CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aEhpbnRl
ZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2lu
ZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClm
aW5hbEZyYW1lCit7CisgICAgaWYgKChzZWxmID0gW3NlbGYgaW5pdF0pKSB7CisgICAgICAgIF9o
aW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgICAgICBfd2luZG93ID0gd2luZG93OworICAg
ICAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOworICAgICAgICBfZmluYWxGcmFtZSA9
IGZpbmFsRnJhbWU7CisgICAgICAgIF9yZWFsRnJhbWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICB9
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpIGRlYWxsb2MKK3sKKyAgICBbX3dpbmRv
dyByZWxlYXNlXTsKKyAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
Cit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJv
bUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdworeworICAgIF93aW5kb3cgPSB3aW5kb3c7Cit9CisKKy0gKGZsb2F0KWN1cnJlbnRW
YWx1ZQoreworICAgIHJldHVybiAwLjUgLSAwLjUgKiBjb3MoTV9QSSAqICgxIC0gW3NlbGYgY3Vy
cmVudFByb2dyZXNzXSkpOworfQorCistIChOU1JlY3QpY3VycmVudEZyYW1lCit7CisgICAgcmV0
dXJuIHNjYWxlZFJlY3QoX2ZpbmFsRnJhbWUsIF9pbml0aWFsRnJhbWUsIFtzZWxmIGN1cnJlbnRW
YWx1ZV0pOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9n
cmVzcylwcm9ncmVzcworeworICAgIGlmICghX3dpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107CisKKyAgICBOU1JlY3QgY3Vy
cmVudFJlY3QgPSBbc2VsZiBjdXJyZW50RnJhbWVdOworICAgIFdLV2luZG93U2V0U2NhbGVkRnJh
bWUoX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJhbWUpOworICAgIFtfc3ViQW5pbWF0aW9u
IHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0
aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgoreworICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9z
dWJBbmltYXRpb247CisgICAgX3N1YkFuaW1hdGlvbiA9IFthbmltYXRpb24gcmV0YWluXTsKKyAg
ICBbb2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQorCistIChOU1RpbWVJbnRlcnZhbClhZGRpdGlv
bmFsRHVyYXRpb24KK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBtYXhBZGRpdGlvbmFsRHVy
YXRpb24gPSAxLjA7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgc3BlZWRGYWN0b3IgPSAwLjAw
MDE7CisgICAgCisgICAgQ0dGbG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFs
RnJhbWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmlnaW4pOworICAgIENHRmxvYXQgZGlzdDsKKyAg
ICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlh
bEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5h
bEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAgIGlmIChkaXN0ID4gbWF4RGlzdCkK
KyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5j
ZShOU01ha2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1l
KSksIE5TTWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkp
KTsKKyAgICBpZiAoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAg
IAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFs
RnJhbWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFs
RnJhbWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQor
ICAgICAgICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlz
dCkgKiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCit9CisKKy0gKHZv
aWQpc3RhcnRBbmltYXRpb24KK3sKKyAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKKyAgICBpZiAo
X2hpbnRlZER1cmF0aW9uKQorICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRp
b24gKyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25dXTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRp
b25dOworfQorCistICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICBfd2luZG93ID0gbmlsOwor
ICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0
aW9uXTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd0ZhZGVBbmltYXRpb24K
Ky0gKGlkKWluaXQKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7CisgICAgICAg
IFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nVGhy
ZWFkZWRdOworICAgICAgICBbc2VsZiBzZXRGcmFtZVJhdGU6NjAuXTsKKyAgICAgICAgW3NlbGYg
c2V0QW5pbWF0aW9uQ3VydmU6TlNBbmltYXRpb25FYXNlSW5PdXRdOworICAgIH0KKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVy
YXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5p
dGlhbEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYQoreworICAgIGlmICgoc2Vs
ZiA9IFtzZWxmIGluaXRdKSkgeworICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpkdXJhdGlvbl07
CisgICAgICAgIF93aW5kb3cgPSB3aW5kb3c7CisgICAgICAgIF9pbml0aWFsQWxwaGEgPSBpbml0
aWFsQWxwaGE7CisgICAgICAgIF9maW5hbEFscGhhID0gZmluYWxBbHBoYTsKKyAgICB9CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0
aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhh
Cit7CisgICAgcmV0dXJuIE1BWCgwLjAsIE1JTigxLjAsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBj
dXJyZW50VmFsdWVdICogKF9maW5hbEFscGhhIC0gX2luaXRpYWxBbHBoYSkpKTsKK30KKworLSAo
dm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sK
KyAgICBpZiAoX2lzU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKF93aW5k
b3cpOworICAgIFdLV2luZG93U2V0QWxwaGEoX3dpbmRvdywgW3NlbGYgY3VycmVudEFscGhhXSk7
CisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQp
c2V0V2luZG93OihOU1dpbmRvdyopd2luZG93Cit7CisgICAgX3dpbmRvdyA9IHdpbmRvdzsKK30K
KworLSAodm9pZClzdG9wQW5pbWF0aW9uCit7CisgICAgLy8gVGhpcyBpcyByZWxldmFudCB3aGVu
IHdlIGFyZSBhIHN1YiBhbmltYXRpb24gb2YgYSBzY2FsZSBhbmltYXRpb24uCisgICAgLy8gSW4g
dGhpcyBjYXNlIHdlIGFyZSBob3N0ZWQgaW4gdGhlIGFuaW1hdGVkIHRocmVhZCBvZiB0aGUgcGFy
ZW50CisgICAgLy8gYW5kIGV2ZW4gYWZ0ZXIgW3N1cGVyIHN0b3BBbmltYXRpb25dLCB0aGUgcGFy
ZW50IG1pZ2h0IGNhbGwKKyAgICAvLyBzZXRDdXJycmVudFByb2dyZXNzLgorICAgIF9pc1N0b3Bw
ZWQgPSBZRVM7CisKKyAgICBbc3VwZXIgc3RvcEFuaW1hdGlvbl07Cit9CisKK0BlbmQKKw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34936</attachid>
            <date>2009-08-16 15:04:04 -0700</date>
            <delta_ts>2009-09-03 08:05:07 -0700</delta_ts>
            <desc>Fullscreen support for the video element.</desc>
            <filename>bug-26742-20090817000400.patch</filename>
            <type>text/plain</type>
            <size>73875</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCA0NGYwZGM1Li44Mjg2MDNiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC03NDEsNiArNzQxLDEwIEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUExVR0lOX1BST1hZ
X0ZPUl9WSURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUExVCiAgICAgIFdFQkNPUkVf
RVhQT1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2Vi
Q29yZS5WaWRlb1Byb3h5LmV4cAogZW5kaWYKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9W
SURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfVklERU8pCisgICAgIFdFQkNPUkVfRVhQ
T1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2ViQ29y
ZS5WaWRlby5leHAKK2VuZGlmCisKIFdlYkNvcmUuZXhwIDogV2ViQ29yZS5iYXNlLmV4cCAkKFdF
QkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykKIAljYXQgJF4gPiAkQAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwIGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQwYzgyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApAQCAtMCwwICsxLDExIEBACitfX1pON1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ0cGxheUV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQ1cGF1c2VFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZ2b2x1bWVFdgorX19a
Tks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDdjYW5QbGF5RXYKK19fWk5LN1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb25FdgorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50
OXNldFZvbHVtZUVmUmkKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEwc2NyZWVuUmVj
dEV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTFjdXJyZW50VGltZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNwbGF0Zm9ybU1lZGlhRXYKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDE0c2V0Q3VycmVudFRpbWVFZlJpCitfX1pON1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQxNGV4aXRGdWxsc2NyZWVuRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCAyZTc3M2U2Li4w
MGY2NTBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03MzMsNiArNzMzLDcgQEAgX19aTjdXZWJDb3JlOUhUTUxO
YW1lczdzcmNBdHRyRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczhmcmFtZVRhZ0UKIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGlucHV0VGFn
RQorX19aTjdXZWJDb3JlOUhUTUxOYW1lczh2aWRlb1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRUYWdFCiBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDRiMDhkY2UuLjlhZmY4N2IgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDMzLDYgKzYwMzMsNyBAQAogCQk2MzE4
OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRl
clN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVSZW5kZXJTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2M0YzNzFDRDEwMEU3OTAwMDBCQkE4
N0EgLyogV2ViQ29yZS5WaWRlby5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBh
dGggPSBXZWJDb3JlLlZpZGVvLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUwRkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGQkYyODBEOUFGMDQ3MDA4RkMyOTIgLyogU1ZH
SEtlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0hLZXJu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxNDcsNiArMTAxNDgs
NyBAQAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJz
LmV4cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9y
ZWlnbk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNv
cmUuVGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3Jl
LlZpZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5W
aWRlb1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCBiMmU2NDI4Li44MjAwNDNkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgor
I2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTEwLDYgKzExMiw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChm
YWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNj
cmVlbihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1f
bmVlZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjM4LDYgKzI0MSwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1
bGVMb2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7Cisg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhU
TUxFbGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCkBAIC0xNjA4LDYgKzE2MTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK2NvbnN0IEludFJlY3Qg
SFRNTE1lZGlhRWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVj
dDsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJlcigp
LT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAgICAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNjgwLDYgKzE2OTcs
MjYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogCiAj
ZW5kaWYKIAordm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4oKQoreworICAg
IEFTU0VSVCghbV9pc0Z1bGxzY3JlZW4pOworICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50
KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50
KCktPmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSB0
cnVlOworfQorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAg
ICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOworICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50
KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50
KCktPmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICBtX2lzRnVsbHNjcmVlbiA9IGZh
bHNlOworfQorCitQbGF0Zm9ybU1lZGlhIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRmb3JtTWVkaWEo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllciA/IG1fcGxheWVyLT5wbGF0Zm9ybU1lZGlh
KCkgOiBOb1BsYXRmb3JtTWVkaWE7Cit9ICAgICAgICAKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAppbmRleCAyN2I0OGVhLi5mNmZkZjcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQ7CiBjbGFzcyBNZWRp
YUVycm9yOwogY2xhc3MgS1VSTDsKIGNsYXNzIFRpbWVSYW5nZXM7Ci0gICAgCisKIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJl
bW92ZSgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNo
YW5nZSk7CkBAIC03Miw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICAvLyBFdmVudHVhbGx5IG92ZXJs
b2FkZWQgaW4gSFRNTFZpZGVvRWxlbWVudAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxz
Y3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNTYXZlKCkgY29uc3Q7CisgICAgCisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNjaGVkdWxlTG9hZCgpOwogICAgIApAQCAtMTQwLDYgKzE0Myw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luU2NydWJiaW5nKCk7CiAgICAgdm9pZCBlbmRTY3J1
YmJpbmcoKTsKIAorICAgIGNvbnN0IEludFJlY3Qgc2NyZWVuUmVjdCgpOworCiAgICAgYm9vbCBj
YW5QbGF5KCkgY29uc3Q7CiAKICAgICBmbG9hdCBwZXJjZW50TG9hZGVkKCkgY29uc3Q7CkBAIC0x
NTMsNiArMTU4LDkgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIGhhc1NpbmdsZVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gIW1fcGxheWVyIHx8IG1fcGxheWVyLT5oYXNTaW5n
bGVTZWN1cml0eU9yaWdpbigpOyB9CisgICAgCisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsK
KyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAKIHByb3RlY3RlZDoKICAgICBmbG9hdCBnZXRU
aW1lT2Zmc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBmbG9hdCB2YWx1ZU9uRXJy
b3IpIGNvbnN0OwpAQCAtMzA0LDYgKzMxMiw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBzdXBwb3J0
IHByb2dyZXNzIGV2ZW50cyBzbyBzZXR0aW5nIG1fc2VuZFByb2dyZXNzRXZlbnRzIGRpc2FibGVz
IHRoZW0gCiAgICAgYm9vbCBtX3NlbmRQcm9ncmVzc0V2ZW50cyA6IDE7CiAKKyAgICBib29sIG1f
aXNGdWxsc2NyZWVuIDogMTsKKwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQog
ICAgIGJvb2wgbV9uZWVkV2lkZ2V0VXBkYXRlIDogMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwCmluZGV4IGVjZDc0ZTcuLjZmNTVhYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVu
dC5jcHAKQEAgLTExMiw2ICsxMTIsMTQgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgIEhUTUxNZWRpYUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCitib29sIEhUTUxWaWRlb0Vs
ZW1lbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgUGFnZSogcGFnZSA9IGRv
Y3VtZW50KCkgPyBkb2N1bWVudCgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkgCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5z
dXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKHRoaXMpOworfQorCiB1bnNpZ25lZCBIVE1MVmlkZW9F
bGVtZW50Ojp2aWRlb1dpZHRoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGxheWVyKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmgKaW5kZXggZGM5NzE0YS4uZjk3ZTFhOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5oCkBAIC0yOSw2ICsyOSw5IEBACiAjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAg
ICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gcGxheWVyKCkgJiYgcGxheWVyKCkt
Pmhhc1ZpZGVvKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29u
c3QgeyByZXR1cm4gcGxheWVyKCkgJiYgcGxheWVyKCktPnN1cHBvcnRzRnVsbHNjcmVlbigpOyB9
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKaW5kZXggMTAxMDI3My4uZDI2ODY1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAt
MjAyLDYgKzIwMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogI2VuZGlmCiAKKyAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2Rl
KE5vZGUqKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShO
b2RlKikgeyB9CisgICAgICAgIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCBL
ZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIHsgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVm
YXVsdDsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4
IGQ3ZDhjZWYuLjczYTU3YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIHsgfSAgICAKIAotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3QgeyByZXR1cm4gTm9QbGF0Zm9y
bU1lZGlhOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCB7IHJl
dHVybiBJbnRTaXplKDAsIDApOyB9CiAKQEAgLTMwMywxMSArMzAzLDYgQEAgYm9vbCBNZWRpYVBs
YXllcjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2Vla2luZygpOwog
fQogCi1ib29sIE1lZGlhUGxheWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwotfQotCiBib29sIE1lZGlh
UGxheWVyOjpzdXBwb3J0c1NhdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPnN1
cHBvcnRzU2F2ZSgpOwpAQCAtMzMxLDYgKzMyNiwxMSBAQCBib29sIE1lZGlhUGxheWVyOjppbk1l
ZGlhRG9jdW1lbnQoKQogICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNNZWRpYURv
Y3VtZW50KCk7CiB9CiAKK1BsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXI6OnBsYXRmb3JtTWVkaWEo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtTWVkaWEoKTsKK30KKwog
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlKCkKIHsK
ICAgICByZXR1cm4gbV9wcml2YXRlLT5uZXR3b3JrU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA3ZjVmMmEwLi5lMjkwMWNlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC0zOCw4ICszOCwyNCBAQAogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorI2lmZGVmIF9f
T0JKQ19fCitAY2xhc3MgUVRNb3ZpZTsKKyNlbHNlCitjbGFzcyBRVE1vdmllOworI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gU3RydWN0dXJlIHRoYXQgd2lsbCBob2xkIGV2ZXJ5
IG5hdGl2ZQorLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IG1lZGlhIHBsYXllci4K
Ky8vIFdlIGhhdmUgdG8gZG8gdGhhdCBoYXMgbXVsdGlwbGUgbWVkaWEgcGxheWVycworLy8gYmFj
a2VuZCBjYW4gbGl2ZSBhdCBydW50aW1lLgordHlwZWRlZiBzdHJ1Y3QgUGxhdGZvcm1NZWRpYSB7
CisgICAgUVRNb3ZpZSogcXRNb3ZpZTsKK30gUGxhdGZvcm1NZWRpYTsKKworc3RhdGljIGNvbnN0
IFBsYXRmb3JtTWVkaWEgTm9QbGF0Zm9ybU1lZGlhID0geyAwIH07CisKIGNsYXNzIENvbnRlbnRU
eXBlOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNjgsNyAr
ODQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyB0aW1lIGhhcyBqdW1wZWQsIGVnLiBub3QgYXMgYSBy
ZXN1bHQgb2Ygbm9ybWFsIHBsYXliYWNrCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyVGlt
ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH0KLSAgICAKKwogICAgIC8vIHRoZSBtZWRpYSBmaWxl
IGR1cmF0aW9uIGhhcyBjaGFuZ2VkLCBvciBpcyBub3cga25vd24KICAgICB2aXJ0dWFsIHZvaWQg
bWVkaWFQbGF5ZXJEdXJhdGlvbkNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH0KICAgICAKQEAgLTEw
NywxNSArMTIzLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZz4mKTsKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCi0g
ICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzU2F2
ZSgpIGNvbnN0OworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCiAg
ICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpOwogICAgIGJvb2wgaGFzVmlkZW8oKTsKICAgICAKICAg
ICB2b2lkIHNldEZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykgeyBtX2ZyYW1lVmlldyA9
IGZyYW1lVmlldzsgfQogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgeyByZXR1cm4gbV9mcmFt
ZVZpZXc7IH0KICAgICBib29sIGluTWVkaWFEb2N1bWVudCgpOwotICAgIAorCiAgICAgSW50U2l6
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0
IEludFNpemUmIHNpemUpOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggNmQxMzU5Yi4uZmNjZTQyNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC00MiwxMSArNDIsMTIg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgpID0gMDsKLSAgICAKKworICAgIHZpcnR1
YWwgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3QgeyByZXR1cm4gTm9QbGF0Zm9y
bU1lZGlhOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcGF1c2UoKSA9IDA7ICAgIAogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVl
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2F2
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAppbmRleCA1NGVlYTAwLi5hN2M3NWZjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0LmgKQEAgLTc3LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGNvZGVjcyk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAor
ICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCiAgICAgSW50U2l6ZSBu
YXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKICAgICAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQubW0KaW5kZXggYzFkN2ZjYi4uZWVhNzM2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KQEAg
LTU2Miw2ICs1NjIsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCiAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOk5P
XTsKIH0KIAorUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEo
KSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcGxhZnRmb3JtTWVkaWEgPSB7IG1fcXRNb3Zp
ZS5nZXQoKSB9OworICAgIHJldHVybiBwbGFmdGZvcm1NZWRpYTsKK30KKwogdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBsYXkoKQogewogICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBiMTc0MDBmLi4x
N2QzOGU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBA
IC01MjgsNiArNTI4LDcgQEAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KERvY3VtZW4KIHZvaWQgTWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbnRlckZ1bGxzY3JlZW4oKTsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDQ1YmNkMTUuLjczNWNiM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMCw2ICsxMDAsMTIgQEAKIAkJNURFODNBN0MwRDBGN0Y5
NDAwQ0FEMTJBIC8qIFdlYlZpZXdFZGl0aW5nQ29udGV4dE1lbnVPbGQubmliIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4M0E3ODBEMEY3Rjk0MDBD
QUQxMkEgLyogV2ViVmlld0VkaXRpbmdDb250ZXh0TWVudU9sZC5uaWIgKi87IH07CiAJCTVERTgz
QTdGMEQwRjdGQUQwMENBRDEyQSAvKiBMb2NhbGl6YWJsZS5zdHJpbmdzIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4M0E3RDBEMEY3RkFEMDBDQUQx
MkEgLyogTG9jYWxpemFibGUuc3RyaW5ncyAqLzsgfTsKIAkJNURFOTJGRUYwQkQ3MDE3RTAwNTlB
NUZEIC8qIFdlYkFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVERTkyRkVFMEJENzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjMzRkZG
QUUxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMzRkZGQUMxMDEwRjJFODAwQzRFODgx
IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovOyB9OworCQk2MzNGRkZBRjEwMTBGMkU4MDBDNEU4
ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MzNGRkZBRDEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5p
bWF0aW9uLm0gKi87IH07CisJCTYzNTJBRjlCMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5oICovOyB9OworCQk2MzUyQUY5QzEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLm1tICovOyB9OworCQk2MzgzNTlEMjEwMEMzOTY0MDAxRjlBQ0UgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM4MzU5RDAxMDBDMzk2NDAwMUY5QUNFIC8q
IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJNjM4MzU5
RDMxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mzgz
NTlEMTEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5tbSAqLzsgfTsKIAkJNjU0ODhEQTEwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlv
bmFyeUV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU0ODhEOUYwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oICov
OyB9OwogCQk2NTQ4OERBMjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFz
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ4OERB
MDA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLm0gKi87IH07CiAJCTY1
NkQzMzNFMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzMzNE
MEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDcyLDYgKzQ3
OCwxMiBAQAogCQk1REU4M0E3OTBEMEY3Rjk0MDBDQUQxMkEgLyogRW5nbGlzaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIubmliOyBuYW1l
ID0gRW5nbGlzaDsgcGF0aCA9IEVuZ2xpc2gubHByb2ovV2ViVmlld0VkaXRpbmdDb250ZXh0TWVu
dU9sZC5uaWI7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNURFODNBN0UwRDBGN0ZB
RDAwQ0FEMTJBIC8qIEVuZ2xpc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMTA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC5zdHJpbmdzOyBuYW1l
ID0gRW5nbGlzaDsgcGF0aCA9IEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk1REU5MkZFRTBCRDcwMTdFMDA1OUE1RkQgLyog
V2ViQXNzZXJ0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNz
ZXJ0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MzNGRkZBQzEwMTBGMkU4
MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2MzNGRkZBRDEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLm0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjM4MzU5RDAxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2MzgzNTlEMTEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1NDg4RDlGMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rp
b25hcnlFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NTQ4OERBMDA4NEZCQ0NCMDA4MzFB
RDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjU2
RDMzM0QwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg4LDYgKzExMDAs
MTIgQEAKIAkJCQlCQzJFNDY0QzBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0gKi8s
CiAJCQkJOTMwRDAyQkIwNjI3NUY2NDAwNzY3MDFFIC8qIFdlYlZpZXdJbnRlcm5hbC5oICovLAog
CQkJCTUxQThCNTdEMDQyODM1M0EwMENBMkQzQSAvKiBXZWJWaWV3UHJpdmF0ZS5oICovLAorCQkJ
CTYzNTJBRjk5MTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
LmggKi8sCisJCQkJNjM1MkFGOUExMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIubW0gKi8sCisJCQkJNjM4MzU5RDAxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKKwkJCQk2MzgzNTlEMTEwMEMz
OTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAq
LywKKwkJCQk2MzNGRkZBQzEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmgg
Ki8sCisJCQkJNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5t
ICovLAogCQkJKTsKIAkJCW5hbWUgPSBXZWJWaWV3OwogCQkJcGF0aCA9IG1hYy9XZWJWaWV3OwpA
QCAtMTQzNyw2ICsxNDU1LDkgQEAKIAkJCQk5Mzk4MTA0NjA4MjRCRjAxMDA4REYwMzggLyogV2Vi
Vmlld0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDlCMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDcxMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjM4MzU5
RDIxMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzM0ZGRkFFMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJX
aW5kb3dBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTYzNTJBRjlCMTAxQTI5MkUwMEYy
OTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE3NjksNiArMTc5MCw5IEBACiAJCQkJOTM5ODExMDcwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZp
ZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzJFNDY0RTBGRDhBOTY4MDBBOUQ5REUgLyogV2Vi
Vmlld0RhdGEubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBFODA4MjRCRjAxMDA4REYwMzgg
LyogV2ViVmlld0ZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKKwkJCQk2MzgzNTlEMzEwMEMzOTY0
MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTYzM0ZGRkFGMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmlt
YXRpb24ubSBpbiBTb3VyY2VzICovLAorCQkJCTYzNTJBRjlDMTAxQTI5MkUwMEYyOTA2RSAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCA3YTFkN2IzLi4xZGZkOGVk
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTE0
OSw2ICsxNDksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
aW5nTGF5ZXJTeW5jKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGV4
aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CisKICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R2VvbG9jYXRpb24qKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggOTkxMWY4Ni4uYjY0NDcxNiAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTU1LDYgKzU1LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HZW9sb2NhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4u
aD4KQEAgLTcxNSw2ICs3MTYsMjkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllclN5bmMoKQogCiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKworYm9v
bCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSog
bm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnZpZGVvVGFnKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgW21fd2ViVmlldyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBbbV93ZWJWaWV3IF9leGl0RnVsbHNjcmVlbl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsgICAgCit9CisKKyNlbmRpZgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24q
IGdlb2xvY2F0aW9uKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKZGlmZiAt
LWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmEwODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0IDxDb2Nv
YS9Db2NvYS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
TWVkaWFFbGVtZW50Lmg+CisKK0Bwcm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
RGVsZWdhdGU7CitAY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlcjsK
K0BjbGFzcyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKK3sKK0Bwcml2YXRlCisgICAg
UmVmUHRyPFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ+IF9tZWRpYUVsZW1lbnQ7IC8vIChyZXRh
aW4pCisgICAgaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdh
dGU7IC8vIChhc3NpZ24pCisKKyAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2lu
ZG93OyAvLyAocmV0YWluKQorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIqIF9odWRDb250cm9sbGVyOyAvLyAocmV0YWluKQorCisgICAgV2ViV2luZG93RmFkZUFuaW1h
dGlvbiAqX2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCisKKyAgICBCT09MIF9pc0VuZGluZ0Z1
bGxzY3JlZW47CisgICAgQk9PTCBfaXNXaW5kb3dMb2FkZWQ7CisgICAgQk9PTCBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uOworfQorCistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVs
ZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQ8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRNZWRpYUVsZW1l
bnQ6KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKworLSAodm9pZCllbnRlckZ1bGxzY3Jl
ZW46KE5TU2NyZWVuICopc2NyZWVuOworLSAodm9pZClleGl0RnVsbHNjcmVlbjsKKworQGVuZAor
CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E3OTBj
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIubW0KQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJ
REVPKQorCisjaW1wb3J0IDxRVEtpdC9RVEtpdC5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRp
bWUuaD4KKyNpbXBvcnQgPEhJVG9vbGJveC9ISVRvb2xib3guaD4KKworI2ltcG9ydCA8d3RmL1Vu
dXNlZFBhcmFtLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0ludFJlY3QuaD4KKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ci5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgor
I2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJXZWJXaW5kb3dBbmlt
YXRpb24uaCIKKworU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKKworCitTT0ZUX0xJTktfQ0xB
U1MoUVRLaXQsIFFUTW92aWVWaWV3KQorCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVu
V2luZG93IDogTlNXaW5kb3cKKyNpZmRlZiBCVUlMRElOR19PTl9TTk9XTEVPUEFSRAorPE5TQW5p
bWF0aW9uRGVsZWdhdGU+CisjZW5kaWYKK3sKKyAgICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFu
aW1hdGlvbkVuZDsKKyAgICBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiAqX2Z1bGxzY3JlZW5Bbmlt
YXRpb247IC8vIChyZXRhaW4pCisgICAgUVRNb3ZpZVZpZXcgKl9tb3ZpZVZpZXc7IC8vIChyZXRh
aW4pCit9CistICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6
KE5TUmVjdCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopc3ViQW5pbWF0
aW9uIGNvbnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uOworLSAoUVRNb3ZpZVZp
ZXcgKiltb3ZpZVZpZXc7CistICh2b2lkKXNldE1vdmllVmlldzooUVRNb3ZpZVZpZXcgKiltb3Zp
ZVZpZXc7CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAo
KSA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPgorQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgorLSAodm9pZClk
ZWFsbG9jCit7CisgICAgQVNTRVJUKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cpOworICAg
IEFTU0VSVCghX2ZhZGVBbmltYXRpb24pOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
TlNTdHJpbmcgKil3aW5kb3dOaWJOYW1lCit7CisgICAgcmV0dXJuIEAiTm8gbmliIjsgLy8gRHVt
bXkgc3RyaW5nIHRvIGVuc3VyZSB0aGF0IC1sb2FkV2luZG93IHdpbGwgYmUgY2FsbGVkLgorfQor
CistICh2b2lkKWxvYWRXaW5kb3cKK3sKKyAgICAvLyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0
aW9uLCB0byBtYWtlIHN1cmUgLXdpbmRvd051bWJlciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2Vi
V2luZG93U2NhbGVBbmltYXRpb24pLgorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW1dlYlZpZGVv
RnVsbHNjcmVlbldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0
eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZm
ZXJlZCBkZWZlcjpOT107CisgICAgW3NlbGYgc2V0V2luZG93OndpbmRvd107CisgICAgW3dpbmRv
dyByZWxlYXNlXTsKK30KKworLSAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVl
bldpbmRvdworeworICAgIHJldHVybiAoV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVy
IHdpbmRvd107Cit9CisKKy0gKHZvaWQpd2luZG93RGlkTG9hZAoreworICAgIFdlYlZpZGVvRnVs
bHNjcmVlbldpbmRvdyAqd2luZG93ID0gW3NlbGYgZnVsbHNjcmVlbldpbmRvd107CisgICAgUVRN
b3ZpZVZpZXcgKnZpZXcgPSBbW2dldFFUTW92aWVWaWV3Q2xhc3MoKSBhbGxvY10gaW5pdF07Cisg
ICAgW3ZpZXcgc2V0RmlsbENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbd2luZG93
IHNldE1vdmllVmlldzp2aWV3XTsKKyAgICBbdmlldyBzZXRDb250cm9sbGVyVmlzaWJsZTpOT107
CisgICAgW3ZpZXcgc2V0UHJlc2VydmVzQXNwZWN0UmF0aW86WUVTXTsKKyAgICBbdmlldyBzZXRN
b3ZpZTpfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkucXRNb3ZpZV07CisgICAgW3dpbmRv
dyBzZXRIYXNTaGFkb3c6WUVTXTsgLy8gVGhpcyBpcyBuaWNlciB3aXRoIGEgc2hhZG93LgorICAg
IFt3aW5kb3cgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbC0xXTsKKyAgICBbdmlldyBy
ZWxlYXNlXTsKK30KKworLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50
OworeworICAgIHJldHVybiBfbWVkaWFFbGVtZW50LmdldCgpOworfQorCistICh2b2lkKXNldE1l
ZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50Oworewor
ICAgIF9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisgICAgaWYgKFtzZWxmIGlzV2luZG93
TG9hZGVkXSkgeworICAgICAgICBRVE1vdmllVmlldyAqbW92aWVWaWV3ID0gW1tzZWxmIGZ1bGxz
Y3JlZW5XaW5kb3ddIG1vdmllVmlld107CisgICAgICAgIFttb3ZpZVZpZXcgc2V0TW92aWU6X21l
ZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnF0TW92aWVdOworICAgIH0KK30KKworLSAoaWQ8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJl
dHVybiBfZGVsZWdhdGU7Cit9CisKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Cit7CisgICAgX2RlbGVnYXRlID0g
ZGVsZWdhdGU7Cit9CisKKy0gKENHRmxvYXQpY2xlYXJGYWRlQW5pbWF0aW9uCit7CisgICAgW19m
YWRlQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworICAgIENHRmxvYXQgcHJldmlvdXNBbHBoYSA9
IFtfZmFkZUFuaW1hdGlvbiBjdXJyZW50QWxwaGFdOworICAgIFtfZmFkZUFuaW1hdGlvbiBzZXRX
aW5kb3c6bmlsXTsKKyAgICBbX2ZhZGVBbmltYXRpb24gcmVsZWFzZV07CisgICAgX2ZhZGVBbmlt
YXRpb24gPSBuaWw7CisgICAgcmV0dXJuIHByZXZpb3VzQWxwaGE7Cit9CisKKy0gKHZvaWQpd2lu
ZG93RGlkRXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOwor
ICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKKyAg
ICBTZXRTeXN0ZW1VSU1vZGUoa1VJTW9kZU5vcm1hbCwgMCk7CisgICAgW19odWRDb250cm9sbGVy
IHNldERlbGVnYXRlOm5pbF07CisgICAgW19odWRDb250cm9sbGVyIHJlbGVhc2VdOworICAgIF9o
dWRDb250cm9sbGVyID0gbmlsOworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgY2xv
c2VdOworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgcmVsZWFzZV07CisgICAgX2Jh
Y2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOworICAgIAorICAgIFtzZWxmIGF1dG9yZWxl
YXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1leGl0RnVsbHNjcmVlbi4KKyAgICBf
aXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxs
c2NyZWVuCit7CisgICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKworICAgIEFTU0VSVCgh
X2h1ZENvbnRyb2xsZXIpOworICAgIF9odWRDb250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBbX2h1ZENvbnRyb2xsZXIg
c2V0RGVsZWdhdGU6c2VsZl07CisgICAgaWYgKF9tZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgewor
ICAgICAgICAvLyBPbmx5IGZhZGUgdGhlIGh1ZCB3aW5kb3cgaWYgd2UgYXJlIHBhdXNlZC4KKyAg
ICAgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5kb3dJbl07CisgICAgfQorICAgIFNldFN5c3Rl
bVVJTW9kZShrVUlNb2RlQWxsU3VwcHJlc3NlZCAsIDApOworICAgIFtOU0N1cnNvciBzZXRIaWRk
ZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKK30KKworLSAoTlNSZWN0KW1lZGlhRWxlbWVudFJlY3QK
K3sKKyAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+c2NyZWVuUmVjdCgpOworfQorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50ZXJmYWNlCisKK3N0YXRpYyB2b2lkIGNv
bnN0cmFpbkZyYW1lVG9SYXRpb09mRnJhbWUoTlNSZWN0ICpmcmFtZVRvQ29uc3RyYWluLCBjb25z
dCBOU1JlY3QgKmZyYW1lKQoreworICAgIC8vIEtlZXAgYSBjb25zdHJhaW5lZCBhc3BlY3QgcmF0
aW8gZm9yIHRoZSBkZXN0aW5hdGlvbiB3aW5kb3cKKyAgICBkb3VibGUgb3JpZ2luYWxSYXRpbyA9
IGZyYW1lLT5zaXplLndpZHRoIC8gZnJhbWUtPnNpemUuaGVpZ2h0OworICAgIGRvdWJsZSBuZXdS
YXRpbyA9IGZyYW1lVG9Db25zdHJhaW4tPnNpemUud2lkdGggLyBmcmFtZVRvQ29uc3RyYWluLT5z
aXplLmhlaWdodDsKKyAgICBpZiAobmV3UmF0aW8gPiBvcmlnaW5hbFJhdGlvKSB7CisgICAgICAg
IGRvdWJsZSBuZXdXaWR0aCA9IG9yaWdpbmFsUmF0aW8gKiBmcmFtZVRvQ29uc3RyYWluLT5zaXpl
LmhlaWdodDsKKyAgICAgICAgZG91YmxlIGRpZmYgPSBmcmFtZVRvQ29uc3RyYWluLT5zaXplLndp
ZHRoIC0gbmV3V2lkdGg7CisgICAgICAgIGZyYW1lVG9Db25zdHJhaW4tPnNpemUud2lkdGggPSBu
ZXdXaWR0aDsKKyAgICAgICAgZnJhbWVUb0NvbnN0cmFpbi0+b3JpZ2luLnggKz0gZGlmZiAvIDI7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG91YmxlIG5ld0hlaWdodCA9IGZyYW1lVG9Db25zdHJh
aW4tPnNpemUud2lkdGggLyBvcmlnaW5hbFJhdGlvOworICAgICAgICBkb3VibGUgZGlmZiA9IGZy
YW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0IC0gbmV3SGVpZ2h0OworICAgICAgICBmcmFtZVRv
Q29uc3RyYWluLT5zaXplLmhlaWdodCA9IG5ld0hlaWdodDsKKyAgICAgICAgZnJhbWVUb0NvbnN0
cmFpbi0+b3JpZ2luLnkgKz0gZGlmZiAvIDI7CisgICAgfSAgICAKK30KKworc3RhdGljIE5TV2lu
ZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhOU1JlY3QgZnJhbWUsIGludCBs
ZXZlbCkKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdp
dGhDb250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNr
aW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFt3aW5kb3cgc2V0T3Bh
cXVlOllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgYmxhY2tD
b2xvcl1dOworICAgIFt3aW5kb3cgc2V0TGV2ZWw6bGV2ZWxdOworICAgIFt3aW5kb3cgc2V0SGlk
ZXNPbkRlYWN0aXZhdGU6WUVTXTsKKyAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpO
T107CisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworLSAodm9pZClzZXR1cEZhZGVBbmltYXRpb25J
Zk5lZWRlZEFuZEZhZGVJbjooQk9PTClmYWRlSW4KK3sKKyAgICBDR0Zsb2F0IGluaXRpYWxBbHBo
YSA9IGZhZGVJbiA/IDAgOiAxOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikgeworICAgICAgICAv
LyBNYWtlIHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUgcHJldmlvdXMg
b25lIGlzbid0IG92ZXIgeWV0CisgICAgICAgIGluaXRpYWxBbHBoYSA9IFtzZWxmIGNsZWFyRmFk
ZUFuaW1hdGlvbl07CisgICAgfQorICAgIGlmICghX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikKKyAg
ICAgICAgX2ZhZGVBbmltYXRpb24gPSBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gYWxsb2NdIGlu
aXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgaW5p
dGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOmZhZGVJbiA/IDEgOiAwXTsKK30KKwor
LSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuOworeworICAgIGlmICgh
c2NyZWVuKQorICAgICAgICBzY3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CisKKyAgICBO
U1JlY3QgZnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJh
bWUgPSBbc2NyZWVuIGZyYW1lXTsKKyAgICBjb25zdHJhaW5GcmFtZVRvUmF0aW9PZkZyYW1lKCZl
bmRGcmFtZSwgJmZyYW1lKTsKKworICAgIC8vIENyZWF0ZSBhIGJsYWNrIHdpbmRvdyBpZiBuZWVk
ZWQKKyAgICBpZiAoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdykKKyAgICAgICAgX2JhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93ID0gY3JlYXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3co
W3NjcmVlbiBmcmFtZV0sIFtbc2VsZiB3aW5kb3ddIGxldmVsXS0xKTsKKyAgICBlbHNlCisgICAg
ICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgc2V0RnJhbWU6W3NjcmVlbiBmcmFtZV0g
ZGlzcGxheTpOT107CisKKyAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFuZEZh
ZGVJbjpZRVNdOworICAgIGlmIChfZm9yY2VEaXNhYmxlQW5pbWF0aW9uKSB7CisgICAgICAgIC8v
IFRoaXMgd2lsbCBkaXNhYmxlIHNjYWxlIGFuaW1hdGlvbgorICAgICAgICBmcmFtZSA9IE5TWmVy
b1JlY3Q7CisgICAgfQorICAgIFtbc2VsZiBmdWxsc2NyZWVuV2luZG93XSBhbmltYXRlRnJvbVJl
Y3Q6ZnJhbWUgdG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24g
Y29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRW50ZXJGdWxsc2NyZWVuKV07CisK
KyAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IG9yZGVyV2luZG93Ok5TV2luZG93QmVs
b3cgcmVsYXRpdmVUbzpbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gd2luZG93TnVtYmVyXV07Cit9
CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVl
bikKKyAgICAgICAgcmV0dXJuOworICAgIF9pc0VuZGluZ0Z1bGxzY3JlZW4gPSBZRVM7CisgICAg
W19odWRDb250cm9sbGVyIGNsb3NlV2luZG93XTsKKworICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtz
ZWxmIG1lZGlhRWxlbWVudFJlY3RdOworCisgICAgW3NlbGYgc2V0dXBGYWRlQW5pbWF0aW9uSWZO
ZWVkZWRBbmRGYWRlSW46WUVTXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikgewor
ICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24KKyAgICAgICAgZW5k
RnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIHJldGFp
biBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFsaXZlIGZvciB0aGUgZW5kIG9mIHRo
ZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJlbGVhc2VzIHVzIHdlIGNvdWxkIGNy
YXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8vIEJhbGFuY2VkIGluIHdpbmRvd0Rp
ZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsgICAgCisgICAgCisgICAgW1tzZWxm
IGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpbW3NlbGYgd2luZG93XSBmcmFtZV0g
dG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24gY29udHJvbGxl
ckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30KKworI3ByYWdt
YSBtYXJrIC0KKyNwcmFnbWEgbWFyayBXaW5kb3cgY2FsbGJhY2sKKworLSAodm9pZClyZXF1ZXN0
RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOihCT09MKWFuaW1hdGlvbgoreworICAgIGlmIChf
aXNFbmRpbmdGdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47CisKKyAgICBfZm9yY2VEaXNhYmxl
QW5pbWF0aW9uID0gIWFuaW1hdGlvbjsKKyAgICBfbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVl
bigpOworICAgIF9mb3JjZURpc2FibGVBbmltYXRpb24gPSBOTzsKK30KKworLSAodm9pZClyZXF1
ZXN0RXhpdEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRo
QW5pbWF0aW9uOllFU107Cit9CisKKy0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250
cm9sbGVyIGZhZGVXaW5kb3dJbl07Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRl
b0Z1bGxzY3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNv
bnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5n
U3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNFRF9Q
QVJBTShhU3R5bGUpOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250
ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZlcmlu
Z1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOltO
U0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbc2VsZiBzZXRIaWRlc09uRGVhY3RpdmF0ZTpZRVNd
OworICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAgW3NlbGYgc2V0QWNj
ZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfZnVsbHNjcmVlbkFuaW1hdGlvbik7CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistIChRVE1vdmllVmlldyAqKW1vdmllVmlldworeworICAgIHJl
dHVybiBfbW92aWVWaWV3OworfQorCistICh2b2lkKXNldE1vdmllVmlldzooUVRNb3ZpZVZpZXcg
Kiltb3ZpZVZpZXcKK3sKKyAgICBpZiAoX21vdmllVmlldyA9PSBtb3ZpZVZpZXcpCisgICAgICAg
IHJldHVybjsKKyAgICBbX21vdmllVmlldyByZWxlYXNlXTsKKyAgICBfbW92aWVWaWV3ID0gW21v
dmllVmlldyByZXRhaW5dOworICAgIFtzZWxmIHNldENvbnRlbnRWaWV3Ol9tb3ZpZVZpZXddOwor
fQorCistIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIE5POworfQor
CistIChCT09MKWNhbkJlY29tZUtleVdpbmRvdworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0g
KHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhlRXZlbnQpOworfQorCistICh2b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHJl
cXVlc3RFeGl0RnVsbHNjcmVlbl07Cit9CisKKy0gKHZvaWQpYW5pbWF0ZWRSZXNpemVEaWRFbmQK
K3sKKyAgICAvLyBDYWxsIG91ciB3aW5kb3dDb250cm9sbGVyLgorICAgIGlmIChfY29udHJvbGxl
ckFjdGlvbk9uQW5pbWF0aW9uRW5kKQorICAgICAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0g
cGVyZm9ybVNlbGVjdG9yOl9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmRdOworICAgIF9j
b250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQgPSBOVUxMOworfQorCisvLworLy8gVGhpcyBm
dW5jdGlvbiB3aWxsIGFuaW1hdGUgYSBjaGFuZ2Ugb2YgZnJhbWUgcmVjdGFuZ2xlCisvLyBXZSBz
dXBwb3J0IHF1ZXVpbmcgYW5pbWF0aW9uLCB0aGF0IG1lYW5zIHRoYXQgd2UnbGwgY29ycmVjdGx5
CisvLyBpbnRlcnJ1cHQgdGhlIHJ1bm5pbmcgYW5pbWF0aW9uLCBhbmQgcXVldWUgdGhlIG5leHQg
b25lLgorLy8KKy0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRSZWN0IHRvUmVj
dDooTlNSZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilzdWJBbmlt
YXRpb24gY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb24KK3sKKyAgICBfY29u
dHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gY29udHJvbGxlckFjdGlvbjsKKworICAgIEJP
T0wgd2FzQW5pbWF0aW5nID0gTk87CisgICAgaWYgKF9mdWxsc2NyZWVuQW5pbWF0aW9uKSB7Cisg
ICAgICAgIHdhc0FuaW1hdGluZyA9IFlFUzsKKworICAgICAgICAvLyBJbnRlcnJ1cHQgYW55IHJ1
bm5pbmcgYW5pbWF0aW9uLgorICAgICAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RvcEFuaW1h
dGlvbl07CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCByZWN0IHRvIGVuc3VyZSBhIHNt
b290aCB0cmFuc2l0aW9uLgorICAgICAgICBzdGFydFJlY3QgPSBbX2Z1bGxzY3JlZW5BbmltYXRp
b24gY3VycmVudEZyYW1lXTsKKyAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHJlbGVhc2Vd
OworICAgICAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisgICAgCisgICAg
aWYgKE5TSXNFbXB0eVJlY3Qoc3RhcnRSZWN0KSB8fCBOU0lzRW1wdHlSZWN0KGVuZFJlY3QpKSB7
CisgICAgICAgIC8vIEZha2VseSBlbmQgdGhlIHN1YmFuaW1hdGlvbi4KKyAgICAgICAgW3N1YkFu
aW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6MS4wXTsKKyAgICAgICAgLy8gQW5kIHJlbW92ZSB0
aGUgd2VhayBsaW5rIHRvIHRoZSB3aW5kb3cuCisgICAgICAgIFtzdWJBbmltYXRpb24gc3RvcEFu
aW1hdGlvbl07CisKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6ZW5kUmVjdCBkaXNwbGF5Ok5PXTsK
KyAgICAgICAgW3NlbGYgbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07CisgICAgICAgIFtzZWxm
IGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghd2FzQW5pbWF0aW5nKSB7CisgICAgICAgIC8vIFdlJ2xsIGRvd25zY2FsZSB0aGUgd2luZG93
IGR1cmluZyB0aGUgYW5pbWF0aW9uIGJhc2VkIG9uIHRoZSBoaWdoZXIgcmVzb2x1dGlvbiByZWN0
CisgICAgICAgIEJPT0wgaGlnaGVyUmVzb2x1dGlvbklzRW5kUmVjdCA9IHN0YXJ0UmVjdC5zaXpl
LndpZHRoIDwgZW5kUmVjdC5zaXplLndpZHRoICYmIHN0YXJ0UmVjdC5zaXplLmhlaWdodCA8IGVu
ZFJlY3Quc2l6ZS5oZWlnaHQ7CisgICAgICAgIFtzZWxmIHNldEZyYW1lOmhpZ2hlclJlc29sdXRp
b25Jc0VuZFJlY3QgPyBlbmRSZWN0IDogc3RhcnRSZWN0IGRpc3BsYXk6Tk9dOyAgICAgICAgCisg
ICAgfQorICAgIAorICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOworICAgIF9mdWxs
c2NyZWVuQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdp
dGhIaW50ZWREdXJhdGlvbjowLjIgd2luZG93OnNlbGYgaW5pdGFsRnJhbWU6c3RhcnRSZWN0IGZp
bmFsRnJhbWU6ZW5kUmVjdF07CisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFN1YkFuaW1h
dGlvbjpzdWJBbmltYXRpb25dOworICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBoYXMgc2NhbGVk
IHRoZSB3aW5kb3cgYmVmb3JlIHNob3dpbmcgaXQuCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9u
IHNldEN1cnJlbnRQcm9ncmVzczowXTsKKyAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpz
ZWxmXTsKKworICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Cit9CisK
Ky0gKHZvaWQpYW5pbWF0aW9uRGlkRW5kOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgoreworICAg
IGlmICghW05TVGhyZWFkIGlzTWFpblRocmVhZF0pIHsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNl
bGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihhbmltYXRpb25EaWRFbmQ6KSB3aXRoT2JqZWN0
OmFuaW1hdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoYW5pbWF0aW9uICE9IF9mdWxsc2NyZWVuQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGUgYW5pbWF0aW9uIGlzIG5vdCByZWFsbHkgb3ZlciBhbmQgd2FzIGludGVy
cnVwdGVkCisgICAgLy8gRG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KKyAgICBpZiAoW2Fu
aW1hdGlvbiBjdXJyZW50UHJvZ3Jlc3NdIDwgMS4wKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBFbnN1cmUgdGhhdCBhbmltYXRpb24gKGFuZCBzdWJhbmltYXRpb24pIGRvbid0IGtlZXAKKyAg
ICAvLyB0aGUgd2VhayByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdyBpdmFyIHRoYXQgbWF5IGJlIGRl
c3Ryb3llZCBmcm9tCisgICAgLy8gbm93IG9uLgorICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBz
ZXRXaW5kb3c6bmlsXTsKKworICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBhdXRvcmVsZWFzZV07
CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7CisKKyAgICBbc2VsZiBhbmltYXRlZFJl
c2l6ZURpZEVuZF07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50
Cit7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIGZhZGVIVURJbl07Cit9CisKKy0gKHZv
aWQpcmVzaWduS2V5V2luZG93Cit7CisgICAgW3N1cGVyIHJlc2lnbktleVdpbmRvd107CisgICAg
W1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRp
b246Tk9dOworfQorQGVuZAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyYTgyNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBFTkFCTEUo
VklERU8pCisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxN
ZWRpYUVsZW1lbnQuaD4KKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXJEZWxlZ2F0ZTsKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgaWQ8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7Cisg
ICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7CisgICAgTlNUcmFja2luZ0FyZWEgKl9h
cmVhOworICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKK30KKy0gKGlkPFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVn
YXRlOihpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRl
bGVnYXRlOworLSAodm9pZClmYWRlV2luZG93SW47CistICh2b2lkKWZhZGVXaW5kb3dPdXQ7Cist
ICh2b2lkKWNsb3NlV2luZG93OworQGVuZAorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KKy0gKHZvaWQpcmVxdWVzdEV4
aXRGdWxsc2NyZWVuOworLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50
OworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDE5ZjczNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCkBAIC0wLDAg
KzEsNDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KKyNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVy
ZmFjZS5oIgorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIgKFByaXZhdGUpCistICh2b2lkKXVwZGF0ZVRpbWU7CitAZW5kCisKK0BpbnRlcmZhY2UgV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IDogTlNXaW5kb3cKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVj
dDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2lu
ZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworewor
ICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250
ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNr
aW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dy
b3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbc2VsZiBzZXRMZXZlbDpOU1Bv
cFVwTWVudVdpbmRvd0xldmVsXTsKKyAgICBbc2VsZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50
czpZRVNdOworICAgIFtzZWxmIHNldElnbm9yZXNNb3VzZUV2ZW50czpOT107CisgICAgW3NlbGYg
c2V0TW92YWJsZUJ5V2luZG93QmFja2dyb3VuZDpZRVNdOworICAgIFtzZWxmIHNldEhpZGVzT25E
ZWFjdGl2YXRlOllFU107CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpY2FuQmVjb21l
S2V5V2luZG93Cit7CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKWNlbnRlcgoreworICAg
IE5TUmVjdCBodWRGcmFtZSA9IFtzZWxmIGZyYW1lXTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUg
PSBbW05TU2NyZWVuIG1haW5TY3JlZW5dIGZyYW1lXTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExl
ZnRQb2ludDpOU01ha2VQb2ludCgoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCAtIGh1ZEZyYW1lLnNp
emUud2lkdGgpIC8gMiArIHNjcmVlbkZyYW1lLm9yaWdpbi54LCBodWRGcmFtZS5zaXplLmhlaWdo
dCAqIDIgKyBzY3JlZW5GcmFtZS5vcmlnaW4ueCldOworfQorCitAZW5kCisKK0BpbnRlcmZhY2Ug
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciAoKSA8TlNXaW5kb3dEZWxlZ2F0
ZT4KK0BlbmQKKyAKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfdGltZWxpbmVV
cGRhdGVUaW1lcik7CisgICAgQVNTRVJUKCFfYXJlYSk7CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCistICh2b2lkKXNldEFyZWE6KE5TVHJhY2tpbmdBcmVhICopYXJlYQoreworICAgIGlmIChh
cmVhID09IF9hcmVhKQorICAgICAgICByZXR1cm47CisgICAgW19hcmVhIHJlbGVhc2VdOworICAg
IF9hcmVhID0gW2FyZWEgcmV0YWluXTsKK30KKworLSAoaWQ8V2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdh
dGU7Cit9CistICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdh
dGU7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNh
bmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3Rvcih1bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOworCisgICAgLy8gRmlyc3Qs
IHVwZGF0ZSByaWdodCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1cGRhdGUKKyAgICBbc2Vs
ZiB1cGRhdGVUaW1lXTsKKworICAgIF90aW1lbGluZVVwZGF0ZVRpbWVyID0gW1tOU1RpbWVyIHRp
bWVyV2l0aFRpbWVJbnRlcnZhbDowLjI1MCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
dXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOworICAgIFtbTlNS
dW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRhdGVUaW1lciBmb3JN
b2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgZmly
ZV07Cit9CisKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRhdGUKK3sKKyAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6bmlsXTsKKworICAgIFtfdGltZWxp
bmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgcmVs
ZWFzZV07CisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBuaWw7Cit9CisKKy0gKHZvaWQpZmFk
ZVdpbmRvd0luCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAg
aWYgKCFbd2luZG93IGlzVmlzaWJsZV0pCisgICAgICAgIFt3aW5kb3cgc2V0QWxwaGFWYWx1ZTow
XTsKKworICAgIFt3aW5kb3cgb3JkZXJGcm9udDpzZWxmXTsKKyAgICBbW3dpbmRvdyBhbmltYXRv
cl0gc2V0QWxwaGFWYWx1ZToxXTsKKyAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOworCisg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBpZiAo
IV9tb3VzZUlzSW5IVUQpCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
ZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheToxLjBdOworfQorCistICh2
b2lkKWZhZGVXaW5kb3dPdXQKK3sKKyAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107CisgICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBd
OworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRh
dGUpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07Cit9CisKKy0gKHZvaWQpY2xvc2VXaW5k
b3cKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOwor
ICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKKyAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKKyAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdB
cmVhOl9hcmVhXTsKKyAgICBbc2VsZiBzZXRBcmVhOm5pbF07CisgICAgW3dpbmRvdyBjbG9zZV07
CisgICAgW3NlbGYgc2V0V2luZG93Om5pbF07Cit9CisKKyNpZm5kZWYgSEFWRV9NRURJQV9DT05U
Uk9MCitlbnVtIHsKKyAgICBXS01lZGlhVUlDb250cm9sUGxheVBhdXNlQnV0dG9uLAorICAgIFdL
TWVkaWFVSUNvbnRyb2xSZXdpbmRCdXR0b24sCisgICAgV0tNZWRpYVVJQ29udHJvbEZhc3RGb3J3
YXJkQnV0dG9uLAorICAgIFdLTWVkaWFVSUNvbnRyb2xFeGl0RnVsbHNjcmVlbkJ1dHRvbiwKKyAg
ICBXS01lZGlhVUlDb250cm9sVm9sdW1lRG93bkJ1dHRvbiwKKyAgICBXS01lZGlhVUlDb250cm9s
U2xpZGVyLAorICAgIFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVVcEJ1dHRvbiwKKyAgICBXS01lZGlh
VUlDb250cm9sVGltZWxpbmUKK307CisjZW5kaWYKKworc3RhdGljIE5TQ29udHJvbCAqY3JlYXRl
Q29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoaW50IGNvbnRyb2xUeXBlLCBOU1JlY3QgZnJh
bWUpCit7CisjaWZkZWYgSEFTX01FRElBX0NPTlRST0wKKyAgICBOU0NvbnRyb2wgKmNvbnRyb2wg
PSBXS0NyZWF0ZU1lZGlhVUlDb250cm9sKGNvbnRyb2xUeXBlKTsKKyAgICBbY29udHJvbCBzZXRG
cmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1lKV07CisgICAgcmV0dXJuIGNvbnRyb2w7CisjZWxz
ZQorICAgIGlmIChjb250cm9sVHlwZSA9PSBXS01lZGlhVUlDb250cm9sU2xpZGVyKQorICAgICAg
ICByZXR1cm4gW1tOU1NsaWRlciBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAgcmV0
dXJuIFtbTlNDb250cm9sIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsKKyNlbmRpZgorfQor
CitzdGF0aWMgTlNUZXh0RmllbGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQoTlNSZWN0IGZyYW1lKQor
eworICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0
V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBbdGV4dEZpZWxkIHNldFRleHRDb2xvcjpbTlNDb2xvciB3
aGl0ZUNvbG9yXV07CisgICAgW3RleHRGaWVsZCBzZXRCb3JkZXJlZDpOT107CisgICAgW3RleHRG
aWVsZCBzZXRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxMF1dOworICAgIFt0ZXh0Rmll
bGQgc2V0RHJhd3NCYWNrZ3JvdW5kOk5PXTsKKyAgICBbdGV4dEZpZWxkIHNldEJlemVsZWQ6Tk9d
OworICAgIFt0ZXh0RmllbGQgc2V0RWRpdGFibGU6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0U2Vs
ZWN0YWJsZTpOT107CisgICAgcmV0dXJuIHRleHRGaWVsZDsKK30KKworc3RhdGljIGNvbnN0IENH
RmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dXaWR0
aCA9IDQzODsKKworLSAoTlNTdHJpbmcgKil3aW5kb3dOaWJOYW1lCit7CisgICAgcmV0dXJuIEAi
Tm8gTmliIjsgLy8gRHVtbXkgc3RyaW5nIHRvIGVuc3VyZSB0aGF0IC1sb2FkV2luZG93IHdpbGwg
YmUgY2FsbGVkLgorfQorCisKKy0gKHZvaWQpbG9hZFdpbmRvdworeworICAgIE5TV2luZG93KiB3
aW5kb3cgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250
ZW50UmVjdDpOU01ha2VSZWN0KDAsIDAsIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQpIHN0eWxl
TWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJl
ZCBkZWZlcjpOT107CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBz
ZXRXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOworfQorCistICh2b2lkKXdp
bmRvd0RpZExvYWQKK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luID0gOTsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luVG9wID0gOTsKKyAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBrQnV0dG9uU2l6ZSA9IDI1OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGtCdXR0
b25NaW5pU2l6ZSA9IDE2OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107
CisgICAgTlNBc3NlcnQod2luZG93LCBAIk5vIHdpbmRvdyB3YXMgY3JlYXRlZCIpOworCisjaWZk
ZWYgSEFWRV9NRURJQV9DT05UUk9MCisgICAgTlNWaWV3ICpiYWNrZ3JvdW5kID0gV0tDcmVhdGVN
ZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKyNlbHNlCisgICAgTlNWaWV3ICpiYWNrZ3JvdW5kID0g
W1tOU1ZpZXcgYWxsb2NdIGluaXRdOworI2VuZGlmCisgICAgW3dpbmRvdyBzZXRDb250ZW50Vmll
dzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJlYSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRX
aXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6TlNUcmFja2luZ01vdXNlRW50ZXJl
ZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93bmVyOnNlbGYgdXNlckluZm86bmls
XTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6X2FyZWFdOworICAgIFtiYWNrZ3Jv
dW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW3NlbGYgd2lu
ZG93XSBjb250ZW50Vmlld107CisKKyAgICBDR0Zsb2F0IHRvcCA9IHdpbmRvd0hlaWdodCAtIGtN
YXJnaW5Ub3A7CisgICAgQ0dGbG9hdCBjZW50ZXIgPSAod2luZG93V2lkdGggLSBrQnV0dG9uU2l6
ZSkgLyAyOworICAgIE5TQ29udHJvbCAqcGxheUJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVk
aWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xQbGF5UGF1c2VCdXR0b24sIE5TTWFrZVJl
Y3QoY2VudGVyLCB0b3AgLSBrQnV0dG9uU2l6ZSwga0J1dHRvblNpemUsIGtCdXR0b25TaXplKSk7
CisgICAgW3BsYXlCdXR0b24gYmluZDpAInZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRo
OkAicGxheWluZyIgb3B0aW9uczpuaWxdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnBs
YXlCdXR0b25dOworICAgIFtwbGF5QnV0dG9uIHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCBsZWZ0
T2ZDZW50ZXIgPSAod2luZG93V2lkdGggLSBrQnV0dG9uU2l6ZSAqIDMgLSBrQnV0dG9uU2l6ZSAt
IGtCdXR0b25TaXplKSAvIDI7CisgICAgTlNDb250cm9sICpyZXdpbmRCdXR0b24gPSBjcmVhdGVD
b250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sUmV3aW5kQnV0dG9u
LCBOU01ha2VSZWN0KGxlZnRPZkNlbnRlciwgdG9wIC0ga0J1dHRvblNpemUsIGtCdXR0b25TaXpl
LCBrQnV0dG9uU2l6ZSkpOworICAgIFtyZXdpbmRCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3Rvcihy
ZXdpbmQ6KV07CisgICAgW3Jld2luZEJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRl
bnRWaWV3IGFkZFN1YnZpZXc6cmV3aW5kQnV0dG9uXTsKKyAgICBbcmV3aW5kQnV0dG9uIHJlbGVh
c2VdOworCisgICAgQ0dGbG9hdCByaWdodE9mQ2VudGVyID0gKHdpbmRvd1dpZHRoICsga0J1dHRv
blNpemUgKiAzKSAvIDI7CisgICAgTlNDb250cm9sICpmYXN0Rm9yd2FyZEJ1dHRvbiA9IGNyZWF0
ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xGYXN0Rm9yd2Fy
ZEJ1dHRvbiwgTlNNYWtlUmVjdChyaWdodE9mQ2VudGVyLCB0b3AgLSBrQnV0dG9uU2l6ZSwga0J1
dHRvblNpemUsIGtCdXR0b25TaXplKSk7CisgICAgW3Jld2luZEJ1dHRvbiBzZXRBY3Rpb246QHNl
bGVjdG9yKGZhc3RGb3J3YXJkOildOworICAgIFtyZXdpbmRCdXR0b24gc2V0VGFyZ2V0OnNlbGZd
OworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmZhc3RGb3J3YXJkQnV0dG9uXTsKKyAgICBb
ZmFzdEZvcndhcmRCdXR0b24gcmVsZWFzZV07CisKKyAgICBDR0Zsb2F0IGNsb3NlVG9SaWdodCA9
IHdpbmRvd1dpZHRoIC0gMiAqIGtNYXJnaW4gLSBrQnV0dG9uTWluaVNpemU7CisgICAgTlNDb250
cm9sICpleGl0RnVsbHNjcmVlbkJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRy
b2xUeXBlKFdLTWVkaWFVSUNvbnRyb2xFeGl0RnVsbHNjcmVlbkJ1dHRvbiwgTlNNYWtlUmVjdChj
bG9zZVRvUmlnaHQsIHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIs
IGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1pbmlTaXplKSk7CisgICAgW2V4aXRGdWxsc2NyZWVu
QnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IoZXhpdEZ1bGxzY3JlZW46KV07CisgICAgW2V4aXRG
dWxsc2NyZWVuQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vi
dmlldzpleGl0RnVsbHNjcmVlbkJ1dHRvbl07CisgICAgW2V4aXRGdWxsc2NyZWVuQnV0dG9uIHJl
bGVhc2VdOworICAgIAorICAgIENHRmxvYXQgbGVmdCA9IGtNYXJnaW47CisgICAgTlNDb250cm9s
ICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUo
V0tNZWRpYVVJQ29udHJvbFZvbHVtZURvd25CdXR0b24sIE5TTWFrZVJlY3QobGVmdCwgdG9wIC0g
a0J1dHRvblNpemUgLyAyIC0ga0J1dHRvbk1pbmlTaXplIC8gMiwga0J1dHRvbk1pbmlTaXplLCBr
QnV0dG9uTWluaVNpemUpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVEb3du
QnV0dG9uXTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxlYXNlXTsKKworICAgIHN0YXRpYyBj
b25zdCBpbnQgdm9sdW1lU2xpZGVyV2lkdGggPSA1MDsKKworICAgIGxlZnQgPSBrTWFyZ2luICsg
a0J1dHRvbk1pbmlTaXplOworICAgIE5TQ29udHJvbCAqdm9sdW1lU2xpZGVyID0gY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFNsaWRlciwgTlNNYWtl
UmVjdChsZWZ0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCB2
b2x1bWVTbGlkZXJXaWR0aCwga0J1dHRvbk1pbmlTaXplKSk7CisgICAgW2NvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6dm9sdW1lU2xpZGVyXTsKKyAgICBbdm9sdW1lU2xpZGVyIGJpbmQ6QCJtYXhWYWx1
ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAIm1heFZvbHVtZSIgb3B0aW9uczpuaWxdOwor
ICAgIFt2b2x1bWVTbGlkZXIgYmluZDpAInZhbHVlIiB0b09iamVjdDpzZWxmIHdpdGhLZXlQYXRo
OkAidm9sdW1lIiBvcHRpb25zOm5pbF07CisgICAgW3ZvbHVtZVNsaWRlciByZWxlYXNlXTsKKwor
ICAgIGxlZnQgPSBrTWFyZ2luICsga0J1dHRvbk1pbmlTaXplICsgdm9sdW1lU2xpZGVyV2lkdGgg
KyBrQnV0dG9uTWluaVNpemUgLyAyOworICAgIE5TQ29udHJvbCAqYnV0dG9uID0gY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFZvbHVtZVVwQnV0dG9u
LCBOU01ha2VSZWN0KGxlZnQsIHRvcCAtIGtCdXR0b25TaXplIC8gMiAtIGtCdXR0b25NaW5pU2l6
ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRvbk1pbmlTaXplKSk7CisgICAgW2NvbnRlbnRW
aWV3IGFkZFN1YnZpZXc6YnV0dG9uXTsKKyAgICBbYnV0dG9uIHJlbGVhc2VdOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBpbnQgdGltZVRleHRXaWR0aCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBp
bnQgc2xpZGVySGVpZ2h0ID0gMTM7CisgICAgc3RhdGljIGNvbnN0IGludCBzbGlkZXJNYXJnaW5G
aXh1cCA9IDQ7CisKKyNpZmRlZiBIQVZFX01FRElBX0NPTlRST0wKKyAgICBOU0NvbnRyb2wgKnNs
aWRlciA9IFdLQ3JlYXRlTWVkaWFVSUNvbnRyb2woV0tNZWRpYVVJQ29udHJvbFRpbWVsaW5lKTsK
KyAgICBbc2xpZGVyIGJpbmQ6QCJ2YWx1ZSIgdG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAImN1
cnJlbnRRVFRpbWUiIG9wdGlvbnM6bmlsXTsKKyAgICBbc2xpZGVyIGJpbmQ6QCJtYXhWYWx1ZSIg
dG9PYmplY3Q6c2VsZiB3aXRoS2V5UGF0aDpAImR1cmF0aW9uIiBvcHRpb25zOm5pbF07ICAgIAor
I2Vsc2UKKyAgICBOU0NvbnRyb2wgKnNsaWRlciA9IFtbTlNTbGlkZXIgYWxsb2NdIGluaXRdOwor
I2VuZGlmCisgICAgW3NsaWRlciBzZXRGcmFtZTpOU01ha2VSZWN0KGtNYXJnaW4gKyB0aW1lVGV4
dFdpZHRoICsga01hcmdpbi8yLCBrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXAsIHdpbmRvd1dp
ZHRoIC0gMiAqIChrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXApIC0ga01hcmdpbiAqIDIgLSAy
ICogdGltZVRleHRXaWR0aCwgc2xpZGVySGVpZ2h0KV07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1
YnZpZXc6c2xpZGVyXTsKKyAgICBbc2xpZGVyIHJlbGVhc2VdOworCisgICAgc3RhdGljIGNvbnN0
IGludCB0aW1lVGV4dEhlaWdodCA9IDExOworCisgICAgTlNUZXh0RmllbGQgKmVsYXBzZWRUaW1l
VGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdChrTWFyZ2luLCBrTWFyZ2luLCB0
aW1lVGV4dFdpZHRoLCB0aW1lVGV4dEhlaWdodCkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3OmVsYXBzZWRUaW1lVGV4dF07CisgICAgW2VsYXBzZWRUaW1lVGV4dCBiaW5kOkAidmFsdWUi
IHRvT2JqZWN0OnNlbGYgd2l0aEtleVBhdGg6QCJlbGFwc2VkVGltZVRleHQiIG9wdGlvbnM6bmls
XTsKKyAgICBbZWxhcHNlZFRpbWVUZXh0IHJlbGVhc2VdOworCisgICAgTlNUZXh0RmllbGQgKnJl
bWFpbmluZ1RpbWVUZXh0ID0gY3JlYXRlVGltZVRleHRGaWVsZChOU01ha2VSZWN0KHdpbmRvd1dp
ZHRoIC0ga01hcmdpbiAtIHRpbWVUZXh0V2lkdGgsIGtNYXJnaW4sIHRpbWVUZXh0V2lkdGgsIHRp
bWVUZXh0SGVpZ2h0KSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6cmVtYWluaW5nVGlt
ZVRleHRdOworICAgIFtyZW1haW5pbmdUaW1lVGV4dCBiaW5kOkAidmFsdWUiIHRvT2JqZWN0OnNl
bGYgd2l0aEtleVBhdGg6QCJyZW1haW5pbmdUaW1lVGV4dCIgb3B0aW9uczpuaWxdOworICAgIFty
ZW1haW5pbmdUaW1lVGV4dCByZWxlYXNlXTsKKyAgICAKKyAgICBbd2luZG93IGNlbnRlcl07Cit9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqICBCaW5kaW5ncworICoK
KyAqLworCistICh2b2lkKXVwZGF0ZVZvbHVtZQoreworICAgIFtzZWxmIHdpbGxDaGFuZ2VWYWx1
ZUZvcktleTpAInZvbHVtZSJdOworICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidm9s
dW1lIl07Cit9CisKKy0gKHZvaWQpdXBkYXRlVGltZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVt
ZV07CisKKyAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07
CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJjdXJyZW50UVRUaW1lIl07CisgICAg
W3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OkAiZHVyYXRpb24iXTsKKyAgICBbc2VsZiBkaWRD
aGFuZ2VWYWx1ZUZvcktleTpAImR1cmF0aW9uIl07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVl
Rm9yS2V5OkAicmVtYWluaW5nVGltZVRleHQiXTsKKyAgICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZv
cktleTpAInJlbWFpbmluZ1RpbWVUZXh0Il07CisgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9y
S2V5OkAiZWxhcHNlZFRpbWVUZXh0Il07CisgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6
QCJlbGFwc2VkVGltZVRleHQiXTsKK30KKworLSAoUVRUaW1lKWN1cnJlbnRRVFRpbWUKK3sKKyAg
ICBRVFRpbWUgcmV0OworICAgIHJldC50aW1lVmFsdWUgPSBbX2RlbGVnYXRlIG1lZGlhRWxlbWVu
dF0gPyBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgKiAzMCA6IDA7Cisg
ICAgcmV0LnRpbWVTY2FsZSA9IDMwOworICAgIHJldHVybiByZXQ7Cit9CisKKy0gKHZvaWQpc2V0
Q3VycmVudFFUVGltZTooUVRUaW1lKWN1cnJlbnRRVFRpbWUKK3sKKyAgICBpZiAoIVtfZGVsZWdh
dGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZTsKKyAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnNldEN1cnJlbnRUaW1lKChk
b3VibGUpY3VycmVudFFUVGltZS50aW1lVmFsdWUgLyAoZG91YmxlKWN1cnJlbnRRVFRpbWUudGlt
ZVNjYWxlLCBlKTsKK30KKworLSAoZG91YmxlKWR1cmF0aW9uCit7CisgICAgcmV0dXJuIFtfZGVs
ZWdhdGUgbWVkaWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+ZHVyYXRpb24o
KSA6IDA7Cit9CisKKy0gKGRvdWJsZSltYXhWb2x1bWUKK3sKKyAgICAvLyBTZXQgdGhlIHZvbHVt
ZSBzbGlkZXIgcmVzb2x1dGlvbgorICAgIHJldHVybiAxMDA7Cit9CisKKy0gKGRvdWJsZSl2b2x1
bWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8gW19kZWxlZ2F0ZSBt
ZWRpYUVsZW1lbnRdLT52b2x1bWUoKSAqIFtzZWxmIG1heFZvbHVtZV0gOiAwOworfQorCistICh2
b2lkKXNldFZvbHVtZTooZG91YmxlKXZvbHVtZQoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRp
YUVsZW1lbnRdKQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
OworICAgIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxm
IG1heFZvbHVtZV0sIGUpOworfQorCisKKy0gKEJPT0wpcGxheWluZworeworICAgIGlmICghW19k
ZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
ICFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmNhblBsYXkoKTsKK30KKworLSAodm9pZClzZXRQ
bGF5aW5nOihCT09MKXBsYXlpbmcKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBsYXlpbmcpCisgICAgICAgIFtfZGVsZWdh
dGUgbWVkaWFFbGVtZW50XS0+cGxheSgpOworICAgIGVsc2UKKyAgICAgICAgW19kZWxlZ2F0ZSBt
ZWRpYUVsZW1lbnRdLT5wYXVzZSgpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnRpbWVUb1N0cmlu
Zyhkb3VibGUgdGltZSkKK3sKKyAgICBpZiAoIWlzZmluaXRlKHRpbWUpKQorICAgICAgICB0aW1l
ID0gMDsKKyAgICBpbnQgc2Vjb25kcyA9IChpbnQpZmFic2YodGltZSk7IAorICAgIGludCBob3Vy
cyA9IHNlY29uZHMgLyAoNjAgKiA2MCk7CisgICAgaW50IG1pbnV0ZXMgPSAoc2Vjb25kcyAvIDYw
KSAlIDYwOworICAgIHNlY29uZHMgJT0gNjA7CisgICAgaWYgKGhvdXJzKSB7CisgICAgICAgIGlm
IChob3VycyA+IDkpCisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlcyUwMmQ6JTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBob3VycywgbWlu
dXRlcywgc2Vjb25kc107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJTAxZDolMDJkOiUwMmQiLCAodGltZSA8IDAgPyAiLSIg
OiAiIiksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzXTsKKyAgICB9CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyUwMmQ6JTAyZCIsICh0aW1l
IDwgMCA/ICItIiA6ICIiKSwgbWludXRlcywgc2Vjb25kc107CisgICAgCit9CisKK3N0YXRpYyBO
U1N0cmluZyAqc3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQoTlNTdHJpbmcgKnN0cmluZywgTlNU
ZXh0QWxpZ25tZW50IGFsaWduKQoreworICAgIE5TU2hhZG93ICpibGFja1NoYWRvdyA9IFtbTlNT
aGFkb3cgYWxsb2NdIGluaXRdOworICAgIFtibGFja1NoYWRvdyBzZXRTaGFkb3dDb2xvcjpbTlND
b2xvciBibGFja0NvbG9yXV07CisgICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd0JsdXJSYWRpdXM6
MF07CisgICAgW2JsYWNrU2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDAsIC0xKV07
CisgICAgTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgKnN0eWxlID0gW1tOU011dGFibGVQYXJhZ3Jh
cGhTdHlsZSBhbGxvY10gaW5pdF07CisgICAgW3N0eWxlIHNldEFsaWdubWVudDphbGlnbl07Cisg
ICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOmJsYWNrU2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsIHN0eWxlLCBOU1Bh
cmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZSwgbmlsXTsKKyAgICBbc3R5bGUgcmVsZWFzZV07CisK
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKiBhdHRyU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnN0cmluZyBhdHRyaWJ1dGVzOmRpY3RdOworICAgIHJl
dHVybiBbYXR0clN0cmluZyBhdXRvcmVsZWFzZV07ICAgIAorfQorCistIChOU1N0cmluZyAqKXJl
bWFpbmluZ1RpbWVUZXh0Cit7CisgICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisg
ICAgICAgIHJldHVybiBAIiI7CisKKyAgICAvLyBOZWdhdGl2ZSBudW1iZXIKKyAgICByZXR1cm4g
c3RyaW5nVG9UaW1lVGV4dEF0dHJpYnV0ZWQodGltZVRvU3RyaW5nKFtfZGVsZWdhdGUgbWVkaWFF
bGVtZW50XS0+Y3VycmVudFRpbWUoKSAtIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+ZHVyYXRp
b24oKSksIE5TTGVmdFRleHRBbGlnbm1lbnQpOworfQorCistIChOU1N0cmluZyAqKWVsYXBzZWRU
aW1lVGV4dAoreworICAgIGlmICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICBy
ZXR1cm4gQCIiOworCisgICAgcmV0dXJuIHN0cmluZ1RvVGltZVRleHRBdHRyaWJ1dGVkKHRpbWVU
b1N0cmluZyhbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpLCBOU1JpZ2h0
VGV4dEFsaWdubWVudCk7Cit9CisKKy8qCisgKiAgVHJhY2tpbmcgYXJlYSBjYWxsYmFja3MKKyAq
CisgKi8KKworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAg
IC8vIE1ha2Ugc3VyZSB0aGUgSFVEIHdvbid0IGJlIGhpZGRlbiBmcm9tIG5vdworICAgIF9tb3Vz
ZUlzSW5IVUQgPSBZRVM7CisgICAgW3NlbGYgZmFkZVdpbmRvd0luXTsKK30KKworLSAodm9pZClt
b3VzZUV4aXRlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgX21vdXNlSXNJbkhVRCA9IE5P
OworICAgIFtzZWxmIGZhZGVXaW5kb3dJbl07Cit9CisKKy8qCisgKiAgSW50ZXJmYWNlIGNhbGxi
YWNrcworICoKKyAqLworCistICh2b2lkKWV4aXRGdWxsc2NyZWVuOihpZClzZW5kZXIKK3sKKyAg
ICBbX2RlbGVnYXRlIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07IAorfQorCisvKgorICogIFdpbmRv
dyBjYWxsYmFjaworICoKKyAqLworCistICh2b2lkKXdpbmRvd0RpZEV4cG9zZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwor
fQorCistICh2b2lkKXdpbmRvd0RpZENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30KKworQGVuZAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggM2EzY2I1OS4uZWFlMjgyYyAxMDA2NDQKLS0tIGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KQEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgIldlYlRleHRJdGVyYXRvci5oIgog
I2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUu
aCIKKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgPENv
cmVGb3VuZGF0aW9uL0NGU2V0Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtMjQ3
Niw3ICsyNDc3LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcm91
bmQoKQogICAgIAogICAgIGlmIChbc2VsZiBfbmVlZHNGcmFtZUxvYWREZWxlZ2F0ZVJldGFpblF1
aXJrXSkKICAgICAgICAgW19wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZSByZWxlYXNlXTsKLSAg
ICAgICAgCisKICAgICBbX3ByaXZhdGUgcmVsZWFzZV07CiAgICAgLy8gW3N1cGVyIGRlYWxsb2Nd
IGNhbiBlbmQgdXAgZGlzcGF0Y2hpbmcgYWdhaW5zdCBfcHJpdmF0ZSAoMzQ2NjA4MikKICAgICBf
cHJpdmF0ZSA9IG5pbDsKQEAgLTU0NzIsNiArNTQ3Myw0NSBAQCBzdGF0aWMgdm9pZCBsYXllclN5
bmNSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29w
QWN0aQogCiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFTykKKworLSAodm9pZClfZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSopbm9kZQoreworICAgIEFTU0VSVChub2RlLT5o
YXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcpKTsKKyAgICBIVE1MTWVkaWFF
bGVtZW50KiB2aWRlb0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obm9k
ZSk7CisKKyAgICBpZiAoX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CisgICAgICAg
IGlmIChbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0gPT0gdmlk
ZW9FbGVtZW50KSB7CisgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkganVzdCB3YXJuIHVz
IHRoYXQgdGhlIHVuZGVybGF5aW5nIHBsYWZ0b3JtTW92aWUoKQorICAgICAgICAgICAgLy8gaGFz
IGNoYW5nZWQuIEp1c3QgZm9yY2UgYW4gdXBkYXRlLgorICAgICAgICAgICAgW19wcml2YXRlLT5m
dWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAg
ICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4KKyAgICAgICAgfQorCisgICAgICAgIC8v
IEZpcnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCisgICAgICAg
IFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhpdEZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgLy8gVGhpcyBwcmV2aW91cyBjYWxsIGhhcyB0byB0cmlnZ2VyIF9l
eGl0RnVsbHNjcmVlbiwKKyAgICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIF9wcml2YXRlLT5m
dWxsc2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIpOworICAgIH0KKyAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJv
bGxlcikgeworICAgICAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBbW1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgICAgICBbX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAg
ICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpbW3Nl
bGYgd2luZG93XSBzY3JlZW5dXTsgICAgICAgIAorICAgIH0KKyAgICBlbHNlCisgICAgICAgIFtf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVu
dF07Cit9CisKKy0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuCit7CisgICAgW19wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNjcmVlbl07CisgICAgW19wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlciByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xs
ZXIgPSBuaWw7Cit9CisKKyNlbmRpZgorCiBAZW5kCiAKICNpZmRlZiBCVUlMRElOR19PTl9MRU9Q
QVJECmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCmluZGV4IDkxZDgzYTcuLjNlOTk4OTcgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC00Myw2ICs0Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIEBjbGFzcyBXZWJQcmVmZXJlbmNlczsKIEBjbGFzcyBXZWJUZXh0Q29tcGxldGlvbkNvbnRy
b2xsZXI7CiBAcHJvdG9jb2wgV2ViRm9ybURlbGVnYXRlOworI2lmIEVOQUJMRShWSURFTykKK0Bj
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyOworI2VuZGlmCiAKIGV4dGVybiBCT09M
IGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZzsKIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGll
bnRDb3VudDsKQEAgLTE1Nyw1ICsxNjAsOCBAQCBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xp
ZW50Q291bnQ7CiAgICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKIAogICAgIENG
UnVuTG9vcFRpbWVyUmVmIHVwZGF0ZU1vdXNlb3ZlclRpbWVyOworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyICpmdWxsc2NyZWVuQ29udHJvbGxlcjsK
KyNlbmRpZgogfQogQGVuZApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCmluZGV4IDQ4ZTdmNmMu
LjdlMDcxMDUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQor
KysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KQEAgLTgwLDYgKzgwLDcgQEAg
aW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwOwogICAgIEFTU0VSVChhcHBsaWNhdGlv
bklzVGVybWluYXRpbmcgfHwgIXBhZ2UpOwogICAgIEFTU0VSVChhcHBsaWNhdGlvbklzVGVybWlu
YXRpbmcgfHwgIXByZWZlcmVuY2VzKTsKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQp
OworICAgIEFTU0VSVCghZnVsbHNjcmVlbkNvbnRyb2xsZXIpOwogCiAgICAgW2FwcGxpY2F0aW9u
TmFtZUZvclVzZXJBZ2VudCByZWxlYXNlXTsKICAgICBbYmFja2dyb3VuZENvbG9yIHJlbGVhc2Vd
OwpAQCAtOTksNiArMTAwLDcgQEAgaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwOwog
ewogICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwogICAgIEFTU0VSVCghaW5zZXJ0aW9uUGFzdGVi
b2FyZCk7CisgICAgQVNTRVJUKCFmdWxsc2NyZWVuQ29udHJvbGxlcik7CiAKICAgICBbc3VwZXIg
ZmluYWxpemVdOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRl
cm5hbC5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IGJlOTIz
ZjcuLjUyMWFlZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJu
YWwuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKQEAgLTQxLDYg
KzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3Mg
S2V5Ym9hcmRFdmVudDsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIE5vZGU7CiB9CiAjZW5k
aWYKIApAQCAtMTYzLDQgKzE2NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLSAodm9pZClf
c2V0SW5zZXJ0aW9uUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIAorI2lm
IEVOQUJMRShWSURFTykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKy0gKHZvaWQpX2VudGVyRnVs
bHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGU7CistICh2b2lkKV9leGl0RnVsbHNj
cmVlbjsKKyNlbmRpZgorCiBAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
V2luZG93QW5pbWF0aW9uLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczZGNjZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaApAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworQGludGVyZmFj
ZSBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKK0Bwcml2YXRlCisgICAg
TlNSZWN0IF9pbml0aWFsRnJhbWUsIF9maW5hbEZyYW1lLCBfcmVhbEZyYW1lOworICAgIE5TV2lu
ZG93ICpfd2luZG93OyAvLyAoYXNzaWduKQorICAgIE5TQW5pbWF0aW9uICpfc3ViQW5pbWF0aW9u
OyAvLyAocmV0YWluKQorICAgIE5TVGltZUludGVydmFsIF9oaW50ZWREdXJhdGlvbjsKK30KKy0g
KGlkKWluaXRXaXRoSGludGVkRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRv
dzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGFsRnJhbWU6KE5TUmVjdClpbml0aWFsRnJhbWUgZmlu
YWxGcmFtZTooTlNSZWN0KWZpbmFsRnJhbWU7CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihO
U0FuaW1hdGlvbiAqKWFuaW1hdGlvbjsKKworLSAoTlNSZWN0KWN1cnJlbnRGcmFtZTsKKworLy8g
QmUgc3VyZSB0byBjYWxsIHNldFdpbmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2lu
ZG93IHdoZW4gYXBwcm9wcmlhdGUKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dzsKK0BlbmQKKworCitAaW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1h
dGlvbiB7CitAcHJpdmF0ZQorICAgIENHRmxvYXQgX2luaXRpYWxBbHBoYSwgX2ZpbmFsQWxwaGE7
CisgICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChyZXRhaW4pCisgICAgQk9PTCBfaXNTdG9wcGVk
OworICAgIAorfQorLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRp
b24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlh
bEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYTsKKworLSAoQ0dGbG9hdCljdXJy
ZW50QWxwaGE7CisKKy8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRo
ZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7CitAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0
aW9uLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0OWZlMgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24ubQpAQCAt
MCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgor
I2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBzbG93TW90aW9uRmFjdG9yID0gMTAuOworCitz
dGF0aWMgTlNUaW1lSW50ZXJ2YWwgV2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRp
b24oTlNUaW1lSW50ZXJ2YWwgZHVyYXRpb24pCit7CisgICAgcmV0dXJuIChbW05TQXBwIGN1cnJl
bnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5TWFzaykgPyBkdXJhdGlvbiAqIHNs
b3dNb3Rpb25GYWN0b3IgOiBkdXJhdGlvbjsgICAgICAgIAorfQorCitzdGF0aWMgTlNSZWN0IHNj
YWxlZFJlY3QoTlNSZWN0IF9pbml0aWFsRnJhbWUsIE5TUmVjdCBfZmluYWxGcmFtZSwgZG91Ymxl
IGZhY3RvcikKK3sKKyAgICBOU1JlY3QgY3VycmVudFJlY3QgPSBfaW5pdGlhbEZyYW1lOworICAg
IGN1cnJlbnRSZWN0Lm9yaWdpbi54ICs9IChOU01pblgoX2ZpbmFsRnJhbWUpIC0gTlNNaW5YKF9p
bml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJyZW50UmVjdC5vcmlnaW4ueSArPSAoTlNN
aW5ZKF9maW5hbEZyYW1lKSAtIE5TTWluWShfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAg
Y3VycmVudFJlY3Quc2l6ZS53aWR0aCArPSAoTlNXaWR0aChfZmluYWxGcmFtZSkgLSBOU1dpZHRo
KF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICBjdXJyZW50UmVjdC5zaXplLmhlaWdodCAr
PSAoTlNIZWlnaHQoX2ZpbmFsRnJhbWUpIC0gTlNIZWlnaHQoX2luaXRpYWxGcmFtZSkpICogZmFj
dG9yOworICAgIHJldHVybiBjdXJyZW50UmVjdDsKK30KKworc3RhdGljIENHRmxvYXQgc3F1YXJl
ZERpc3RhbmNlKE5TUG9pbnQgcG9pbnQxLCBOU1BvaW50IHBvaW50MikKK3sKKyAgICBDR0Zsb2F0
IGRlbHRhWCA9IHBvaW50MS54IC0gcG9pbnQyLng7CisgICAgQ0dGbG9hdCBkZWx0YVkgPSBwb2lu
dDEueSAtIHBvaW50Mi55OworICAgIHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBk
ZWx0YVk7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbgorLSAo
aWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworI2lmZGVmIEhBVkVfV0lORE9XU0VUU0NBTEVERlJBTUUKKyAgICBb
c2VsZiBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVh
ZGVkXTsKKyNlbmRpZgorICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MC5dOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5p
dGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1lCit7CisgICAgc2VsZiA9IFtz
ZWxmIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfaGlu
dGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBfd2luZG93ID0gd2luZG93OworICAgIF9pbml0
aWFsRnJhbWUgPSBpbml0aWFsRnJhbWU7CisgICAgX2ZpbmFsRnJhbWUgPSBmaW5hbEZyYW1lOwor
ICAgIF9yZWFsRnJhbWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZCkgZGVhbGxvYworeworICAgIFtfd2luZG93IHJlbGVhc2VdOworICAgIFtfc3ViQW5p
bWF0aW9uIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRE
dXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRp
b246V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30K
KworLSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAgX3dpbmRvdyA9
IHdpbmRvdzsKK30KKworLSAoZmxvYXQpY3VycmVudFZhbHVlCit7CisgICAgcmV0dXJuIDAuNSAt
IDAuNSAqIGNvcyhNX1BJICogKDEgLSBbc2VsZiBjdXJyZW50UHJvZ3Jlc3NdKSk7Cit9CisKKy0g
KE5TUmVjdCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2NhbGVkUmVjdChfZmluYWxGcmFt
ZSwgX2luaXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7Cit9CisKKy0gKHZvaWQpc2V0
Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCit7CisgICAgaWYg
KCFfd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dy
ZXNzOnByb2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IFtzZWxmIGN1cnJlbnRG
cmFtZV07CisjaWZkZWYgSEFWRV9XSU5ET1dTRVRTQ0FMRURGUkFNRQorICAgIFdLV2luZG93U2V0
U2NhbGVkRnJhbWUoX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJhbWUpOworI2Vsc2UKKyAg
ICBbX3dpbmRvdyBzZXRGcmFtZTpjdXJyZW50UmVjdCBkaXNwbGF5OllFU107CisjZW5kaWYKKyAg
ICBbX3N1YkFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOworfQorCistICh2
b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilhbmltYXRpb24KK3sKKyAgICBpZCBv
bGRBbmltYXRpb24gPSBfc3ViQW5pbWF0aW9uOworICAgIF9zdWJBbmltYXRpb24gPSBbYW5pbWF0
aW9uIHJldGFpbl07CisgICAgW29sZEFuaW1hdGlvbiByZWxlYXNlXTsKK30KKworLSAoTlNUaW1l
SW50ZXJ2YWwpYWRkaXRpb25hbER1cmF0aW9uTmVlZGVkVG9SZWFjaEZpbmFsRnJhbWUKK3sKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBtYXhBZGRpdGlvbmFsRHVyYXRpb24gPSAxLjA7CisgICAg
c3RhdGljIGNvbnN0IENHRmxvYXQgc3BlZWRGYWN0b3IgPSAwLjAwMDE7CisgICAgCisgICAgQ0dG
bG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJhbWUub3JpZ2luLCBfZmlu
YWxGcmFtZS5vcmlnaW4pOworICAgIENHRmxvYXQgZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1
YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9p
bml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9m
aW5hbEZyYW1lKSkpOworICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9
IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01ha2VQb2ludChOU01h
eFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSksIE5TTWFrZVBvaW50KE5T
TWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsKKyAgICBpZiAoZGlzdCA+
IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVh
cmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2lu
aXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2Zp
bmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0ID0g
ZGlzdDsKKyAgICAKKyAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkgKiBzcGVlZEZhY3Rvciwg
bWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCit9CisKKy0gKHZvaWQpc3RhcnRBbmltYXRpb24K
K3sKKyAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKKyAgICBpZiAoX2hpbnRlZER1cmF0aW9uKQor
ICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24gKyBbc2VsZiBhZGRpdGlv
bmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZV1dOworICAgIFtzdXBlciBzdGFydEFu
aW1hdGlvbl07Cit9CisKKy0gKHZvaWQpc3RvcEFuaW1hdGlvbgoreworICAgIF93aW5kb3cgPSBu
aWw7CisgICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOworICAgIFtfc3ViQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dOworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93RmFkZUFuaW1h
dGlvbgorLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworI2lmZGVmIEhBVkVfV0lORE9XU0VUQUxQSEEKKyAg
ICBbc2VsZiBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1Ro
cmVhZGVkXTsKKyNlbmRpZgorICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MC5dOworICAgIFtzZWxm
IHNldEFuaW1hdGlvbkN1cnZlOk5TQW5pbWF0aW9uRWFzZUluT3V0XTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24g
d2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFs
cGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYQoreworICAgIHNlbGYgPSBbc2VsZiBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7ICAgIAorICAgIF93aW5k
b3cgPSB3aW5kb3c7CisgICAgX2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsKKyAgICBfZmlu
YWxBbHBoYSA9IGZpbmFsQWxwaGE7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0
RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0
aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9
CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhhCit7CisgICAgcmV0dXJuIE1BWCgwLjAsIE1JTigx
LjAsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9maW5hbEFscGhhIC0g
X2luaXRpYWxBbHBoYSkpKTsKK30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5p
bWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKK3sKKyAgICBpZiAoX2lzU3RvcHBlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKF93aW5kb3cpOworICAgIFtzdXBlciBzZXRDdXJyZW50UHJv
Z3Jlc3M6cHJvZ3Jlc3NdOworCisjaWZkZWYgSEFWRV9XSU5ET1dTRVRBTFBIQQorICAgIFdLV2lu
ZG93U2V0QWxwaGEoX3dpbmRvdywgW3NlbGYgY3VycmVudEFscGhhXSk7CisjZWxzZQorICAgIFtf
d2luZG93IHNldEFscGhhVmFsdWU6W3NlbGYgY3VycmVudEFscGhhXV07CisjZW5kaWYKK30KKwor
LSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93Kil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2lu
ZG93OworfQorCistICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICAvLyBUaGlzIGlzIHJlbGV2
YW50IHdoZW4gd2UgYXJlIGEgc3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxlIGFuaW1hdGlvbi4KKyAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5pbWF0ZWQgdGhyZWFkIG9m
IHRoZSBwYXJlbnQKKyAgICAvLyBhbmQgZXZlbiBhZnRlciBbc3VwZXIgc3RvcEFuaW1hdGlvbl0s
IHRoZSBwYXJlbnQgbWlnaHQgY2FsbAorICAgIC8vIHNldEN1cnJyZW50UHJvZ3Jlc3MuCisgICAg
X2lzU3RvcHBlZCA9IFlFUzsKKworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVu
ZAor
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38990</attachid>
            <date>2009-09-03 08:05:17 -0700</date>
            <delta_ts>2009-09-26 01:32:55 -0700</delta_ts>
            <desc>Fullscreen support for the video element.</desc>
            <filename>bug-26742-20090903170513.patch</filename>
            <type>text/plain</type>
            <size>74704</size>
            <attacher name="Pierre d&apos;Herbemont">pdherbemont</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCAxNjc4MzBmLi4zYjdmMjE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC03NTcsNiArNzU3LDEwIEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUExVR0lOX1BST1hZ
X0ZPUl9WSURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUExVCiAgICAgIFdFQkNPUkVf
RVhQT1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2Vi
Q29yZS5WaWRlb1Byb3h5LmV4cAogZW5kaWYKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9W
SURFTywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfVklERU8pCisgICAgIFdFQkNPUkVfRVhQ
T1JUX0RFUEVOREVOQ0lFUyA6PSAkKFdFQkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykgV2ViQ29y
ZS5WaWRlby5leHAKK2VuZGlmCisKIFdlYkNvcmUuZXhwIDogV2ViQ29yZS5iYXNlLmV4cCAkKFdF
QkNPUkVfRVhQT1JUX0RFUEVOREVOQ0lFUykKIAljYXQgJF4gPiAkQAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuVmlkZW8uZXhwIGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQwYzgyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLlZpZGVvLmV4cApAQCAtMCwwICsxLDExIEBACitfX1pON1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ0cGxheUV2CitfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQ1cGF1c2VFdgorX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDZ2b2x1bWVFdgorX19a
Tks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDdjYW5QbGF5RXYKK19fWk5LN1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb25FdgorX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50
OXNldFZvbHVtZUVmUmkKK19fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEwc2NyZWVuUmVj
dEV2CitfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTFjdXJyZW50VGltZUV2CitfX1pO
SzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNwbGF0Zm9ybU1lZGlhRXYKK19fWk43V2ViQ29y
ZTE2SFRNTE1lZGlhRWxlbWVudDE0c2V0Q3VycmVudFRpbWVFZlJpCitfX1pON1dlYkNvcmUxNkhU
TUxNZWRpYUVsZW1lbnQxNGV4aXRGdWxsc2NyZWVuRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA1MTVkOWJkLi44
OTFlZTNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03MzgsNiArNzM4LDcgQEAgX19aTjdXZWJDb3JlOUhUTUxO
YW1lczdzcmNBdHRyRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczhmcmFtZVRhZ0UKIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM4aHJlZkF0dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGlucHV0VGFn
RQorX19aTjdXZWJDb3JlOUhUTUxOYW1lczh2aWRlb1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRUYWdFCiBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGI0MWI2OGIuLjZhMjA1NTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MTgxLDYgKzYxODEsNyBAQAogCQk2MzE4
OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRl
clN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVSZW5kZXJTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2M0YzNzFDRDEwMEU3OTAwMDBCQkE4
N0EgLyogV2ViQ29yZS5WaWRlby5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBh
dGggPSBXZWJDb3JlLlZpZGVvLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjUwRkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGQkYyODBEOUFGMDQ3MDA4RkMyOTIgLyogU1ZH
SEtlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0hLZXJu
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAzMTgsNiArMTAzMTks
NyBAQAogCQkJCTQ0OTE5NTk3MEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLlNWRy5GaWx0ZXJz
LmV4cCAqLywKIAkJCQk0NDkxOTU5NjBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5TVkcuRm9y
ZWlnbk9iamVjdC5leHAgKi8sCiAJCQkJNDQ5MTk1OTUwRkJFMTdENzAwRDlGODI0IC8qIFdlYkNv
cmUuVGlnZXIuZXhwICovLAorCQkJCTYzRjM3MUNEMTAwRTc5MDAwMEJCQTg3QSAvKiBXZWJDb3Jl
LlZpZGVvLmV4cCAqLywKIAkJCQk0NDkxOTU5NDBGQkUxN0Q3MDBEOUY4MjQgLyogV2ViQ29yZS5W
aWRlb1Byb3h5LmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gRXhwb3J0czsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCAyMTQzOTE4Li5mNmQ1OTUwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01NSw2ICs1NSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNp
bmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgor
I2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKKyNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTExLDYgKzExMyw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChm
YWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUpCisgICAgLCBtX2lzRnVsbHNj
cmVlbihmYWxzZSkKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1f
bmVlZFdpZGdldFVwZGF0ZShmYWxzZSkKICNlbmRpZgpAQCAtMjQxLDYgKzI0NCwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICAgICAgc2NoZWR1
bGVMb2FkKCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7Cisg
ICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgICAgICBleGl0RnVsbHNjcmVlbigpOworICAgIEhU
TUxFbGVtZW50Ojp3aWxsUmVtb3ZlKCk7Cit9CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1Q
VFkpCkBAIC0xNjc3LDYgKzE2ODYsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgdXBkYXRlVm9sdW1lKCk7CiB9CiAKK2NvbnN0IEludFJlY3Qg
SFRNTE1lZGlhRWxlbWVudDo6c2NyZWVuUmVjdCgpCit7CisgICAgSW50UmVjdCBlbGVtZW50UmVj
dDsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudFJlY3QgPSByZW5kZXJlcigp
LT52aWV3KCktPmZyYW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKHJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50UmVjdDsKK30KKyAgICAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0xNzQ5LDYgKzE3NjYs
MjggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogCiAj
ZW5kaWYKIAordm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4oKQoreworICAg
IEFTU0VSVCghbV9pc0Z1bGxzY3JlZW4pOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmVudGVyRnVsbHNjcmVl
bkZvck5vZGUodGhpcyk7CisgICAgbV9pc0Z1bGxzY3JlZW4gPSB0cnVlOworfQorCit2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9pc0Z1bGxz
Y3JlZW4pOworICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmV4aXRGdWxsc2NyZWVu
Rm9yTm9kZSh0aGlzKTsKKyAgICBtX2lzRnVsbHNjcmVlbiA9IGZhbHNlOworfQorCitQbGF0Zm9y
bU1lZGlhIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsYXllciA/IG1fcGxheWVyLT5wbGF0Zm9ybU1lZGlhKCkgOiBOb1BsYXRmb3JtTWVk
aWE7Cit9ICAgICAgICAKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCAz
YWViNjUzLi5iYmU2NzgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcg
QEAgY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUVycm9yOwogY2xhc3MgS1VS
TDsKIGNsYXNzIFRpbWVSYW5nZXM7Ci0gICAgCisKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAg
LTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CkBAIC03Myw2ICs3
NCw4IEBAIHB1YmxpYzoKICAgICAvLyBFdmVudHVhbGx5IG92ZXJsb2FkZWQgaW4gSFRNTFZpZGVv
RWxlbWVudAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTYXZlKCkgY29uc3Q7Cisg
ICAgCisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7CiAKICAgICB2b2lk
IHNjaGVkdWxlTG9hZCgpOwogICAgIApAQCAtMTQxLDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGJlZ2luU2NydWJiaW5nKCk7CiAgICAgdm9pZCBlbmRTY3J1YmJpbmcoKTsKIAorICAgIGNv
bnN0IEludFJlY3Qgc2NyZWVuUmVjdCgpOworCiAgICAgYm9vbCBjYW5QbGF5KCkgY29uc3Q7CiAK
ICAgICBmbG9hdCBwZXJjZW50TG9hZGVkKCkgY29uc3Q7CkBAIC0xNTQsNiArMTU5LDkgQEAgcHVi
bGljOgogI2VuZGlmCiAKICAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qg
eyByZXR1cm4gIW1fcGxheWVyIHx8IG1fcGxheWVyLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
OyB9CisgICAgCisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxs
c2NyZWVuKCk7CiAKIHByb3RlY3RlZDoKICAgICBmbG9hdCBnZXRUaW1lT2Zmc2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBmbG9hdCB2YWx1ZU9uRXJyb3IpIGNvbnN0OwpAQCAtMzA5
LDYgKzMxNyw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBzdXBwb3J0IHByb2dyZXNzIGV2ZW50cyBz
byBzZXR0aW5nIG1fc2VuZFByb2dyZXNzRXZlbnRzIGRpc2FibGVzIHRoZW0gCiAgICAgYm9vbCBt
X3NlbmRQcm9ncmVzc0V2ZW50cyA6IDE7CiAKKyAgICBib29sIG1faXNGdWxsc2NyZWVuIDogMTsK
KwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIGJvb2wgbV9uZWVkV2lk
Z2V0VXBkYXRlIDogMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IGVj
ZDc0ZTcuLjZmNTVhYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKQEAgLTExMiw2ICsx
MTIsMTQgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQogCitib29sIEhUTUxWaWRlb0VsZW1lbnQ6OnN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0Cit7CisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkgPyBkb2N1bWVu
dCgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkgCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zdXBwb3J0c0Z1bGxzY3JlZW5G
b3JOb2RlKHRoaXMpOworfQorCiB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50Ojp2aWRlb1dpZHRo
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGxheWVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxWaWRlb0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKaW5k
ZXggZGM5NzE0YS4uZjk3ZTFhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCkBAIC0yOSw2ICsy
OSw5IEBACiAjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDksNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7CiAgICAgdmlydHVhbCBib29sIGlz
VmlkZW8oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGhhc1ZpZGVv
KCkgY29uc3QgeyByZXR1cm4gcGxheWVyKCkgJiYgcGxheWVyKCktPmhhc1ZpZGVvKCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gcGxheWVy
KCkgJiYgcGxheWVyKCktPnN1cHBvcnRzRnVsbHNjcmVlbigpOyB9CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXgg
YWU5YjdmNy4uOTgzNDhjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjAzLDYgKzIwMywxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
aW5nTGF5ZXJTeW5jKCkgPSAwOwogI2VuZGlmCiAKKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgICAg
IAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCBLZXlib2FyZFVJTW9kZSBrZXli
b2FyZFVJTW9kZSgpIHsgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDEzYWIzZmIuLjJmZGE2YjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBwYXVzZSgpIHsgfSAgICAKIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3Jl
ZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBw
bGF0Zm9ybU1lZGlhKCkgY29uc3QgeyByZXR1cm4gTm9QbGF0Zm9ybU1lZGlhOyB9CiAKICAgICB2
aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKDAsIDAp
OyB9CiAKQEAgLTMwNCwxMSArMzA0LDYgQEAgYm9vbCBNZWRpYVBsYXllcjo6c2Vla2luZygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2Vla2luZygpOwogfQogCi1ib29sIE1lZGlhUGxh
eWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PnN1cHBvcnRzRnVsbHNjcmVlbigpOwotfQotCiBib29sIE1lZGlhUGxheWVyOjpzdXBwb3J0c1Nh
dmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPnN1cHBvcnRzU2F2ZSgpOwpAQCAt
MzM3LDYgKzMzMiwxMSBAQCBib29sIE1lZGlhUGxheWVyOjppbk1lZGlhRG9jdW1lbnQoKQogICAg
IHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNNZWRpYURvY3VtZW50KCk7CiB9CiAKK1Bs
YXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXI6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtTWVkaWEoKTsKK30KKwogTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBNZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlKCkKIHsKICAgICByZXR1cm4gbV9wcml2
YXRlLT5uZXR3b3JrU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aAppbmRleCA3NDc2MzYwLi45NjJiZjY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5oCkBAIC0zOCw4ICszOCwyNCBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgUVRN
b3ZpZTsKKyNlbHNlCitjbGFzcyBRVE1vdmllOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorLy8gU3RydWN0dXJlIHRoYXQgd2lsbCBob2xkIGV2ZXJ5IG5hdGl2ZQorLy8gdHlwZXMg
c3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IG1lZGlhIHBsYXllci4KKy8vIFdlIGhhdmUgdG8gZG8g
dGhhdCBoYXMgbXVsdGlwbGUgbWVkaWEgcGxheWVycworLy8gYmFja2VuZCBjYW4gbGl2ZSBhdCBy
dW50aW1lLgordHlwZWRlZiBzdHJ1Y3QgUGxhdGZvcm1NZWRpYSB7CisgICAgUVRNb3ZpZSogcXRN
b3ZpZTsKK30gUGxhdGZvcm1NZWRpYTsKKworc3RhdGljIGNvbnN0IFBsYXRmb3JtTWVkaWEgTm9Q
bGF0Zm9ybU1lZGlhID0geyAwIH07CisKIGNsYXNzIENvbnRlbnRUeXBlOwogY2xhc3MgRnJhbWVW
aWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNjgsNyArODQsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyB0aW1lIGhhcyBqdW1wZWQsIGVnLiBub3QgYXMgYSByZXN1bHQgb2Ygbm9ybWFsIHBs
YXliYWNrCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5
ZXIqKSB7IH0KLSAgICAKKwogICAgIC8vIHRoZSBtZWRpYSBmaWxlIGR1cmF0aW9uIGhhcyBjaGFu
Z2VkLCBvciBpcyBub3cga25vd24KICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJEdXJhdGlv
bkNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH0KICAgICAKQEAgLTEwNyw4ICsxMjMsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7
CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAotICAgIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1NhdmUoKSBjb25zdDsKKyAgICBQbGF0
Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKKwogICAgIEludFNpemUgbmF0dXJhbFNp
emUoKTsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNBdWRpbygpIGNv
bnN0OwpAQCAtMTE2LDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZyYW1lVmlldyhG
cmFtZVZpZXcqIGZyYW1lVmlldykgeyBtX2ZyYW1lVmlldyA9IGZyYW1lVmlldzsgfQogICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3KCkgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0KICAgICBib29sIGlu
TWVkaWFEb2N1bWVudCgpOwotICAgIAorCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpOwogICAg
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZh
dGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5k
ZXggNjNhZGFjNi4uMzUyM2Y4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC00MiwxMSArNDIsMTIgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsTG9hZCgpID0gMDsKLSAgICAKKworICAgIHZpcnR1YWwgUGxhdGZvcm1NZWRpYSBwbGF0
Zm9ybU1lZGlhKCkgY29uc3QgeyByZXR1cm4gTm9QbGF0Zm9ybU1lZGlhOyB9CisKICAgICB2aXJ0
dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7ICAgIAog
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2F2ZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuaAppbmRleCA5NzRkYmViLi4zODA5YWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKQEAgLTc3
LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAorICAgIFBsYXRmb3JtTWVkaWEgcGxh
dGZvcm1NZWRpYSgpIGNvbnN0OworCiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0Owog
ICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Lm1tCmluZGV4IGQzYjUzZTUuLmViZjZiMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCkBA
IC01NjQsNiArNTY0LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0
cmluZyYgdXJsKQogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpO
T107CiB9CiAKK1BsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybU1lZGlh
KCkgY29uc3QKK3sKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYWZ0Zm9ybU1lZGlhID0geyBtX3F0TW92
aWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gcGxhZnRmb3JtTWVkaWE7Cit9CisKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF5KCkKIHsKICAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggOTY5NzE2Zi4u
MDVjODEzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApA
QCAtNjU5LDYgKzY1OSw3IEBAIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChEb2N1bWVuCiB2b2lkIE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgeworICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKCk7CiAgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3MzY4OWFkLi4yNTE2YmE5IDEwMDY0NAotLS0gYS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDAsNiArMTAwLDEyIEBACiAJCTVERTgzQTdBMEQwRjdG
OTQwMENBRDEyQSAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubmliIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4M0E3NDBEMEY3Rjk0MDBD
QUQxMkEgLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLm5pYiAqLzsgfTsKIAkJNURFODNB
N0YwRDBGN0ZBRDAwQ0FEMTJBIC8qIExvY2FsaXphYmxlLnN0cmluZ3MgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVERTgzQTdEMEQwRjdGQUQwMENBRDEy
QSAvKiBMb2NhbGl6YWJsZS5zdHJpbmdzICovOyB9OwogCQk1REU5MkZFRjBCRDcwMTdFMDA1OUE1
RkQgLyogV2ViQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNURFOTJGRUUwQkQ3MDE3RTAwNTlBNUZEIC8qIFdlYkFzc2VydGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2MzNGRkZB
RTEwMTBGMkU4MDBDNEU4ODEgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzNGRkZBQzEwMTBGMkU4MDBDNEU4ODEg
LyogV2ViV2luZG93QW5pbWF0aW9uLmggKi87IH07CisJCTYzM0ZGRkFGMTAxMEYyRTgwMEM0RTg4
MSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmlt
YXRpb24ubSAqLzsgfTsKKwkJNjM1MkFGOUIxMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYzNTJBRjk5MTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmggKi87IH07CisJCTYzNTJBRjlDMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjM1MkFGOUExMDFBMjkyRTAwRjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0gKi87IH07CisJCTYzODM1OUQyMTAwQzM5NjQwMDFGOUFDRSAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzgzNTlEMDEwMEMzOTY0MDAxRjlBQ0UgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovOyB9OworCQk2MzgzNTlE
MzEwMEMzOTY0MDAxRjlBQ0UgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzODM1
OUQxMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyLm1tICovOyB9OwogCQk2NTQ4OERBMTA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9u
YXJ5RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmggKi87
IH07CiAJCTY1NDg4REEyMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMu
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDg4REEw
MDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubSAqLzsgfTsKIAkJNjU2
RDMzM0UwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2RDMzM0Qw
QUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzIsNiArNDc4
LDEyIEBACiAJCTVERTgzQTc1MEQwRjdGOTQwMENBRDEyQSAvKiBFbmdsaXNoICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5uaWI7IG5hbWUg
PSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9XZWJKYXZhU2NyaXB0VGV4dElucHV0UGFu
ZWwubmliOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTVERTgzQTdFMEQwRjdGQUQw
MENBRDEyQSAvKiBFbmdsaXNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDEwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Quc3RyaW5nczsgbmFtZSA9
IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3M7IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNURFOTJGRUUwQkQ3MDE3RTAwNTlBNUZEIC8qIFdl
YkFzc2VydGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2Vy
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjMzRkZGQUMxMDEwRjJFODAw
QzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNjMzRkZGQUQxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24ubTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjM1MkFGOTkxMDFBMjkyRTAwRjI5MDZFIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2MzUyQUY5QTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjM4MzU5RDExMDBDMzk2NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2NTQ4OEQ5RjA4NEZCQ0NCMDA4MzFBRDAgLyogV2ViTlNEaWN0aW9u
YXJ5RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYk5TRGljdGlvbmFyeUV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjU0ODhEQTAwODRGQkNDQjAwODMxQUQw
IC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJOU0RpY3Rpb25hcnlFeHRyYXMubTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1NkQz
MzNEMEFGMjFBRTkwMDIxMjE2OSAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZERlbGVnYXRl
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5Niw2ICsxMTA4LDEy
IEBACiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tICovLAog
CQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJWaWV3SW50ZXJuYWwuaCAqLywKIAkJ
CQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmlld1ByaXZhdGUuaCAqLywKKwkJCQk2
MzUyQUY5OTEwMUEyOTJFMDBGMjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
ICovLAorCQkJCTYzNTJBRjlBMTAxQTI5MkUwMEYyOTA2RSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tICovLAorCQkJCTYzODM1OUQwMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggKi8sCisJCQkJNjM4MzU5RDExMDBDMzk2
NDAwMUY5QUNFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8s
CisJCQkJNjMzRkZGQUMxMDEwRjJFODAwQzRFODgxIC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICov
LAorCQkJCTYzM0ZGRkFEMTAxMEYyRTgwMEM0RTg4MSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubSAq
LywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBtYWMvV2ViVmlldzsKQEAg
LTE0NDYsNiArMTQ2NCw5IEBACiAJCQkJOTM5ODEwOUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZp
ZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNzEwODI0QkYwMTAwOERGMDM4
IC8qIFdlYlZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUY0NDg0RjEwMzM4RThD
MDAzMEU1NUUgLyogV2ViV29ya2Vyc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzODM1
OUQyMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzNGRkZBRTEwMTBGMkU4MDBDNEU4ODEgLyogV2Vi
V2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2MzUyQUY5QjEwMUEyOTJFMDBG
MjkwNkUgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xNzc3LDYgKzE3OTgsOSBAQAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJW
aWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEU4MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJWaWV3RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxRjQ0ODUwMTAzMzhFOEMw
MDMwRTU1RSAvKiBXZWJXb3JrZXJzUHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTYzODM1
OUQzMTAwQzM5NjQwMDFGOUFDRSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjMzRkZGQUYxMDEwRjJFODAwQzRFODgxIC8qIFdl
YldpbmRvd0FuaW1hdGlvbi5tIGluIFNvdXJjZXMgKi8sCisJCQkJNjM1MkFGOUMxMDFBMjkyRTAw
RjI5MDZFIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmgg
Yi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDdjZGVm
ZDEuLjI4M2QxNDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaApAQCAtMTUwLDYgKzE1MCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKICNlbmRpZgogCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOworICAgIHZpcnR1
YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKwogICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6
RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCA5OTExZjg2Li5iNjQ0NzE2
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAt
NTUsNiArNTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1
bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lu
dFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0
Zm9ybVNjcmVlbi5oPgpAQCAtNzE1LDYgKzcxNiwyOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiAKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJ
REVPKQorCitib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShj
b25zdCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6
OkhUTUxOYW1lczo6dmlkZW9UYWcpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyAgICBbbV93ZWJWaWV3IF9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOm5vZGVdOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworICAgIFttX3dlYlZpZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOyAgICAKK30KKworI2VuZGlmCisKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBH
ZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2YTA4MwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNp
bXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyOworQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CisKK0BpbnRlcmZhY2Ug
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlcgoreworQHBy
aXZhdGUKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVu
dDsgLy8gKHJldGFpbikKKyAgICBpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdh
dGU+IF9kZWxlZ2F0ZTsgLy8gKGFzc2lnbikKKworICAgIE5TV2luZG93ICpfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3c7IC8vIChyZXRhaW4pCisgICAgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlciogX2h1ZENvbnRyb2xsZXI7IC8vIChyZXRhaW4pCisKKyAgICBXZWJXaW5k
b3dGYWRlQW5pbWF0aW9uICpfZmFkZUFuaW1hdGlvbjsgLy8gKHJldGFpbikKKworICAgIEJPT0wg
X2lzRW5kaW5nRnVsbHNjcmVlbjsKKyAgICBCT09MIF9pc1dpbmRvd0xvYWRlZDsKKyAgICBCT09M
IF9mb3JjZURpc2FibGVBbmltYXRpb247Cit9CisKKy0gKGlkPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVnYXRlOihpZDxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworCistICh2b2lkKXNl
dE1lZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50Owor
LSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworCistICh2b2lkKWVu
dGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lkKWV4aXRGdWxsc2NyZWVu
OworCitAZW5kCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjRhMDNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
ZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPFFUS2l0L1FUS2l0Lmg+CisjaW1wb3J0IDxvYmpj
L29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8SElUb29sYm94L0hJVG9vbGJveC5oPgorCisjaW1w
b3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldl
YldpbmRvd0FuaW1hdGlvbi5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQorCisKK1NP
RlRfTElOS19DTEFTUyhRVEtpdCwgUVRNb3ZpZVZpZXcpCisKKworQGludGVyZmFjZSBXZWJWaWRl
b0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorPE5TQW5pbWF0aW9uRGVsZWdh
dGU+CisjZW5kaWYKK3sKKyAgICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZDsK
KyAgICBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiAqX2Z1bGxzY3JlZW5BbmltYXRpb247IC8vIChy
ZXRhaW4pCisgICAgUVRNb3ZpZVZpZXcgKl9tb3ZpZVZpZXc7IC8vIChyZXRhaW4pCit9CistICh2
b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6KE5TUmVjdCllbmRS
ZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopc3ViQW5pbWF0aW9uIGNvbnRyb2xs
ZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uOworLSAoUVRNb3ZpZVZpZXcgKiltb3ZpZVZp
ZXc7CistICh2b2lkKXNldE1vdmllVmlldzooUVRNb3ZpZVZpZXcgKiltb3ZpZVZpZXc7CitAZW5k
CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoKSA8V2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPgorQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgorLSAoaWQpaW5pdAoreworICAgIC8v
IERvIG5vdCBkZWZlciB3aW5kb3cgY3JlYXRpb24sIHRvIG1ha2Ugc3VyZSAtd2luZG93TnVtYmVy
IGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbikuCisgICAgTlNX
aW5kb3cgKndpbmRvdyA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0
aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sg
YmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRXaXRoV2luZG93OndpbmRvd107CisgICAgW3dpbmRvdyByZWxlYXNlXTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgW3NlbGYgd2luZG93RGlkTG9hZF07
CisgICAgcmV0dXJuIHNlbGY7CisgICAgCit9CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NF
UlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyk7CisgICAgQVNTRVJUKCFfZmFkZUFuaW1h
dGlvbik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChXZWJWaWRlb0Z1bGxzY3JlZW5X
aW5kb3cgKilmdWxsc2NyZWVuV2luZG93Cit7CisgICAgcmV0dXJuIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5XaW5kb3cgKilbc3VwZXIgd2luZG93XTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRMb2FkCit7
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICp3aW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVu
V2luZG93XTsKKyAgICBRVE1vdmllVmlldyAqdmlldyA9IFtbZ2V0UVRNb3ZpZVZpZXdDbGFzcygp
IGFsbG9jXSBpbml0XTsKKyAgICBbdmlldyBzZXRGaWxsQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xv
cl1dOworICAgIFt3aW5kb3cgc2V0TW92aWVWaWV3OnZpZXddOworICAgIFt2aWV3IHNldENvbnRy
b2xsZXJWaXNpYmxlOk5PXTsKKyAgICBbdmlldyBzZXRQcmVzZXJ2ZXNBc3BlY3RSYXRpbzpZRVNd
OworICAgIFt2aWV3IHNldE1vdmllOl9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5xdE1v
dmllXTsKKyAgICBbd2luZG93IHNldEhhc1NoYWRvdzpZRVNdOyAvLyBUaGlzIGlzIG5pY2VyIHdp
dGggYSBzaGFkb3cuCisgICAgW3dpbmRvdyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVs
LTFdOworICAgIFt2aWV3IHJlbGVhc2VdOworfQorCistIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiltZWRpYUVsZW1lbnQ7Cit7CisgICAgcmV0dXJuIF9tZWRpYUVsZW1lbnQuZ2V0KCk7Cit9
CisKKy0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kilt
ZWRpYUVsZW1lbnQ7Cit7CisgICAgX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKKyAgICBp
ZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7CisgICAgICAgIFFUTW92aWVWaWV3ICptb3ZpZVZp
ZXcgPSBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gbW92aWVWaWV3XTsKKyAgICAgICAgW21vdmll
VmlldyBzZXRNb3ZpZTpfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkucXRNb3ZpZV07Cisg
ICAgfQorfQorCistIChpZDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRl
bGVnYXRlCit7CisgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0
ZTooaWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKK3sK
KyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoQ0dGbG9hdCljbGVhckZhZGVBbmlt
YXRpb24KK3sKKyAgICBbX2ZhZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisgICAgQ0dGbG9h
dCBwcmV2aW91c0FscGhhID0gW19mYWRlQW5pbWF0aW9uIGN1cnJlbnRBbHBoYV07CisgICAgW19m
YWRlQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworICAgIFtfZmFkZUFuaW1hdGlvbiByZWxlYXNl
XTsKKyAgICBfZmFkZUFuaW1hdGlvbiA9IG5pbDsKKyAgICByZXR1cm4gcHJldmlvdXNBbHBoYTsK
K30KKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbgoreworICAgIFtzZWxmIGNsZWFy
RmFkZUFuaW1hdGlvbl07CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNl
dFdpbmRvdzpuaWxdOworICAgIFNldFN5c3RlbVVJTW9kZShrVUlNb2RlTm9ybWFsLCAwKTsKKyAg
ICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIg
cmVsZWFzZV07CisgICAgX2h1ZENvbnRyb2xsZXIgPSBuaWw7CisgICAgW19iYWNrZ3JvdW5kRnVs
bHNjcmVlbldpbmRvdyBjbG9zZV07CisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBy
ZWxlYXNlXTsKKyAgICBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgPSBuaWw7CisgICAgCisg
ICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAvLyBBc3NvY2lhdGVkIC1yZXRhaW4gaXMgaW4gLWV4aXRG
dWxsc2NyZWVuLgorICAgIF9pc0VuZGluZ0Z1bGxzY3JlZW4gPSBOTzsKK30KKworLSAodm9pZCl3
aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25d
OworCisgICAgQVNTRVJUKCFfaHVkQ29udHJvbGxlcik7CisgICAgX2h1ZENvbnRyb2xsZXIgPSBb
W1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAg
IFtfaHVkQ29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBpZiAoX21lZGlhRWxlbWVu
dC0+Y2FuUGxheSgpKSB7CisgICAgICAgIC8vIE9ubHkgZmFkZSB0aGUgaHVkIHdpbmRvdyBpZiB3
ZSBhcmUgcGF1c2VkLgorICAgICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKKyAg
ICB9CisgICAgU2V0U3lzdGVtVUlNb2RlKGtVSU1vZGVBbGxTdXBwcmVzc2VkICwgMCk7CisgICAg
W05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworfQorCistIChOU1JlY3Qp
bWVkaWFFbGVtZW50UmVjdAoreworICAgIHJldHVybiBfbWVkaWFFbGVtZW50LT5zY3JlZW5SZWN0
KCk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UK
Kworc3RhdGljIHZvaWQgY29uc3RyYWluRnJhbWVUb1JhdGlvT2ZGcmFtZShOU1JlY3QgKmZyYW1l
VG9Db25zdHJhaW4sIGNvbnN0IE5TUmVjdCAqZnJhbWUpCit7CisgICAgLy8gS2VlcCBhIGNvbnN0
cmFpbmVkIGFzcGVjdCByYXRpbyBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdworICAgIGRvdWJs
ZSBvcmlnaW5hbFJhdGlvID0gZnJhbWUtPnNpemUud2lkdGggLyBmcmFtZS0+c2l6ZS5oZWlnaHQ7
CisgICAgZG91YmxlIG5ld1JhdGlvID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS53aWR0aCAvIGZy
YW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+IG9yaWdpbmFs
UmF0aW8pIHsKKyAgICAgICAgZG91YmxlIG5ld1dpZHRoID0gb3JpZ2luYWxSYXRpbyAqIGZyYW1l
VG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0OworICAgICAgICBkb3VibGUgZGlmZiA9IGZyYW1lVG9D
b25zdHJhaW4tPnNpemUud2lkdGggLSBuZXdXaWR0aDsKKyAgICAgICAgZnJhbWVUb0NvbnN0cmFp
bi0+c2l6ZS53aWR0aCA9IG5ld1dpZHRoOworICAgICAgICBmcmFtZVRvQ29uc3RyYWluLT5vcmln
aW4ueCArPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAgICAgICBkb3VibGUgbmV3SGVpZ2h0
ID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS53aWR0aCAvIG9yaWdpbmFsUmF0aW87CisgICAgICAg
IGRvdWJsZSBkaWZmID0gZnJhbWVUb0NvbnN0cmFpbi0+c2l6ZS5oZWlnaHQgLSBuZXdIZWlnaHQ7
CisgICAgICAgIGZyYW1lVG9Db25zdHJhaW4tPnNpemUuaGVpZ2h0ID0gbmV3SGVpZ2h0OworICAg
ICAgICBmcmFtZVRvQ29uc3RyYWluLT5vcmlnaW4ueSArPSBkaWZmIC8gMjsKKyAgICB9ICAgIAor
fQorCitzdGF0aWMgTlNXaW5kb3cgKmNyZWF0ZUJhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KE5T
UmVjdCBmcmFtZSwgaW50IGxldmVsKQoreworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbW05TV2lu
ZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OmZyYW1lIHN0eWxlTWFzazpOU0JvcmRlcmxl
c3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107Cisg
ICAgW3dpbmRvdyBzZXRPcGFxdWU6WUVTXTsKKyAgICBbd2luZG93IHNldEJhY2tncm91bmRDb2xv
cjpbTlNDb2xvciBibGFja0NvbG9yXV07CisgICAgW3dpbmRvdyBzZXRMZXZlbDpsZXZlbF07Cisg
ICAgW3dpbmRvdyBzZXRIaWRlc09uRGVhY3RpdmF0ZTpZRVNdOworICAgIFt3aW5kb3cgc2V0UmVs
ZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4gd2luZG93OworfQorCistICh2b2lkKXNl
dHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOihCT09MKWZhZGVJbgoreworICAgIENH
RmxvYXQgaW5pdGlhbEFscGhhID0gZmFkZUluID8gMCA6IDE7CisgICAgaWYgKF9mYWRlQW5pbWF0
aW9uKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdXBwb3J0IHF1ZXVpbmcgYW5pbWF0aW9u
IGlmIHRoZSBwcmV2aW91cyBvbmUgaXNuJ3Qgb3ZlciB5ZXQKKyAgICAgICAgaW5pdGlhbEFscGhh
ID0gW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKyAgICB9CisgICAgaWYgKCFfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uKQorICAgICAgICBfZmFkZUFuaW1hdGlvbiA9IFtbV2ViV2luZG93RmFkZUFu
aW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIgd2luZG93Ol9iYWNrZ3JvdW5kRnVs
bHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6ZmFkZUlu
ID8gMSA6IDBdOworfQorCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3Jl
ZW47Cit7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWlu
U2NyZWVuXTsKKworICAgIE5TUmVjdCBmcmFtZSA9IFtzZWxmIG1lZGlhRWxlbWVudFJlY3RdOwor
ICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOworICAgIGNvbnN0cmFpbkZyYW1l
VG9SYXRpb09mRnJhbWUoJmVuZEZyYW1lLCAmZnJhbWUpOworCisgICAgLy8gQ3JlYXRlIGEgYmxh
Y2sgd2luZG93IGlmIG5lZWRlZAorICAgIGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
KQorICAgICAgICBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgPSBjcmVhdGVCYWNrZ3JvdW5k
RnVsbHNjcmVlbldpbmRvdyhbc2NyZWVuIGZyYW1lXSwgW1tzZWxmIHdpbmRvd10gbGV2ZWxdLTEp
OworICAgIGVsc2UKKyAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFt
ZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5Ok5PXTsKKworICAgIFtzZWxmIHNldHVwRmFkZUFuaW1h
dGlvbklmTmVlZGVkQW5kRmFkZUluOllFU107CisgICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRp
b24pIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCisgICAg
ICAgIGZyYW1lID0gTlNaZXJvUmVjdDsKKyAgICB9CisgICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5k
b3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFtZSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlv
bjpfZmFkZUFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRl
ckZ1bGxzY3JlZW4pXTsKKworICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJX
aW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3
aW5kb3dOdW1iZXJdXTsKK30KKworLSAodm9pZClleGl0RnVsbHNjcmVlbgoreworICAgIGlmIChf
aXNFbmRpbmdGdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgX2lzRW5kaW5nRnVsbHNj
cmVlbiA9IFlFUzsKKyAgICBbX2h1ZENvbnRyb2xsZXIgY2xvc2VXaW5kb3ddOworCisgICAgTlNS
ZWN0IGVuZEZyYW1lID0gW3NlbGYgbWVkaWFFbGVtZW50UmVjdF07CisKKyAgICBbc2VsZiBzZXR1
cEZhZGVBbmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjpZRVNdOworICAgIGlmIChfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBkaXNhYmxlIHNjYWxlIGFuaW1h
dGlvbgorICAgICAgICBlbmRGcmFtZSA9IE5TWmVyb1JlY3Q7CisgICAgfQorICAgIAorICAgIC8v
IFdlIGhhdmUgdG8gcmV0YWluIG91cnNlbHZlcyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWxpdmUg
Zm9yIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbi4KKyAgICAvLyBJZiBvdXIgb3duZXIgcmVsZWFz
ZXMgdXMgd2UgY291bGQgY3Jhc2ggaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCisgICAgLy8gQmFs
YW5jZWQgaW4gd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KKyAgICBbc2VsZiByZXRhaW5dOyAgICAK
KyAgICAKKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0Oltbc2Vs
ZiB3aW5kb3ddIGZyYW1lXSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFu
aW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFeGl0RnVsbHNjcmVl
bildOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdpbmRvdyBjYWxsYmFjawor
CistICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0
aW9uCit7CisgICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIF9mb3JjZURpc2FibGVBbmltYXRpb24gPSAhYW5pbWF0aW9uOworICAgIF9tZWRpYUVsZW1l
bnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwor
fQorCistICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbgoreworICAgIFtzZWxmIHJlcXVlc3RF
eGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246WUVTXTsKK30KKworLSAodm9pZClmYWRlSFVESW4K
K3sKKyAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKK30KK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdworCistIChpZClpbml0V2l0aENvbnRl
bnRSZWN0OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKWFTdHlsZSBi
YWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFn
Cit7CisgICAgVU5VU0VEX1BBUkFNKGFTdHlsZSk7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0
aENvbnRlbnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNr
IGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2VsZiBzZXRC
YWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNldEhpZGVz
T25EZWFjdGl2YXRlOllFU107CisgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsK
KyAgICBbc2VsZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czpZRVNdOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5p
bWF0aW9uKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKFFUTW92aWVWaWV3ICopbW92
aWVWaWV3Cit7CisgICAgcmV0dXJuIF9tb3ZpZVZpZXc7Cit9CisKKy0gKHZvaWQpc2V0TW92aWVW
aWV3OihRVE1vdmllVmlldyAqKW1vdmllVmlldworeworICAgIGlmIChfbW92aWVWaWV3ID09IG1v
dmllVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIFtfbW92aWVWaWV3IHJlbGVhc2VdOworICAg
IF9tb3ZpZVZpZXcgPSBbbW92aWVWaWV3IHJldGFpbl07CisgICAgW3NlbGYgc2V0Q29udGVudFZp
ZXc6X21vdmllVmlld107Cit9CisKKy0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAg
ICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Cit7CisgICAgcmV0
dXJuIFlFUzsKK30KKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAorewor
ICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpY2FuY2VsT3BlcmF0aW9u
OihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbW3NlbGYgd2lu
ZG93Q29udHJvbGxlcl0gcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsKK30KKworLSAodm9pZClhbmlt
YXRlZFJlc2l6ZURpZEVuZAoreworICAgIC8vIENhbGwgb3VyIHdpbmRvd0NvbnRyb2xsZXIuCisg
ICAgaWYgKF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQpCisgICAgICAgIFtbc2VsZiB3
aW5kb3dDb250cm9sbGVyXSBwZXJmb3JtU2VsZWN0b3I6X2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1h
dGlvbkVuZF07CisgICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IE5VTEw7Cit9
CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYW5pbWF0ZSBhIGNoYW5nZSBvZiBmcmFtZSBy
ZWN0YW5nbGUKKy8vIFdlIHN1cHBvcnQgcXVldWluZyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhh
dCB3ZSdsbCBjb3JyZWN0bHkKKy8vIGludGVycnVwdCB0aGUgcnVubmluZyBhbmltYXRpb24sIGFu
ZCBxdWV1ZSB0aGUgbmV4dCBvbmUuCisvLworLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6KE5TUmVj
dClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9uOihOU0Fu
aW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJvbGxlckFj
dGlvbgoreworICAgIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQgPSBjb250cm9sbGVy
QWN0aW9uOworCisgICAgQk9PTCB3YXNBbmltYXRpbmcgPSBOTzsKKyAgICBpZiAoX2Z1bGxzY3Jl
ZW5BbmltYXRpb24pIHsKKyAgICAgICAgd2FzQW5pbWF0aW5nID0gWUVTOworCisgICAgICAgIC8v
IEludGVycnVwdCBhbnkgcnVubmluZyBhbmltYXRpb24uCisgICAgICAgIFtfZnVsbHNjcmVlbkFu
aW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKworICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJl
Y3QgdG8gZW5zdXJlIGEgc21vb3RoIHRyYW5zaXRpb24uCisgICAgICAgIHN0YXJ0UmVjdCA9IFtf
ZnVsbHNjcmVlbkFuaW1hdGlvbiBjdXJyZW50RnJhbWVdOworICAgICAgICBbX2Z1bGxzY3JlZW5B
bmltYXRpb24gcmVsZWFzZV07CisgICAgICAgIF9mdWxsc2NyZWVuQW5pbWF0aW9uID0gbmlsOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoTlNJc0VtcHR5UmVjdChzdGFydFJlY3QpIHx8IE5TSXNFbXB0
eVJlY3QoZW5kUmVjdCkpIHsKKyAgICAgICAgLy8gRmFrZWx5IGVuZCB0aGUgc3ViYW5pbWF0aW9u
LgorICAgICAgICBbc3ViQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVzczoxLjBdOworICAgICAg
ICAvLyBBbmQgcmVtb3ZlIHRoZSB3ZWFrIGxpbmsgdG8gdGhlIHdpbmRvdy4KKyAgICAgICAgW3N1
YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKworICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRS
ZWN0IGRpc3BsYXk6Tk9dOworICAgICAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxm
XTsKKyAgICAgICAgW3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRdOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCF3YXNBbmltYXRpbmcpIHsKKyAgICAgICAgLy8gV2UnbGwgZG93
bnNjYWxlIHRoZSB3aW5kb3cgZHVyaW5nIHRoZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hl
ciByZXNvbHV0aW9uIHJlY3QKKyAgICAgICAgQk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0
ID0gc3RhcnRSZWN0LnNpemUud2lkdGggPCBlbmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0
LnNpemUuaGVpZ2h0IDwgZW5kUmVjdC5zaXplLmhlaWdodDsKKyAgICAgICAgW3NlbGYgc2V0RnJh
bWU6aGlnaGVyUmVzb2x1dGlvbklzRW5kUmVjdCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxh
eTpOT107ICAgICAgICAKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNjcmVlbkFuaW1h
dGlvbik7CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1NjYWxlQW5pbWF0
aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2VsZiBpbml0YWxG
cmFtZTpzdGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxzY3JlZW5Bbmlt
YXRpb24gc2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxsc2NyZWVuQW5p
bWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5p
bWF0aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4KKyAgICBbX2Z1
bGxzY3JlZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtzZWxmIG1ha2VL
ZXlBbmRPcmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0YXJ0
QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uICop
YW5pbWF0aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFuaW1hdGlvbkRp
ZEVuZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5BbmltYXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90IHJlYWxseSBv
dmVyIGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBsZXRpb24gZXZl
bnRzLgorICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjApCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1YmFuaW1hdGlv
bikgZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgd2luZG93IGl2
YXIgdGhhdCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisgICAgW19mdWxs
c2NyZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0
aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5pbDsKKworICAg
IFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihO
U0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZmFkZUhV
REluXTsKK30KKworLSAodm9pZClyZXNpZ25LZXlXaW5kb3cKK3sKKyAgICBbc3VwZXIgcmVzaWdu
S2V5V2luZG93XTsKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcmVxdWVzdEV4aXRGdWxs
c2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CitAZW5kCisKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jMGRiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgeworQHBy
aXZhdGUKKyAgICBpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdh
dGU+IF9kZWxlZ2F0ZTsKKyAgICBOU1RpbWVyICpfdGltZWxpbmVVcGRhdGVUaW1lcjsKKyAgICBO
U1RyYWNraW5nQXJlYSAqX2FyZWE7CisgICAgQk9PTCBfbW91c2VJc0luSFVEOworCisgICAgTlND
b250cm9sICpfdGltZWxpbmU7CisgICAgTlNUZXh0RmllbGQgKl9yZW1haW5pbmdUaW1lVGV4dDsK
KyAgICBOU1RleHRGaWVsZCAqX2VsYXBzZWRUaW1lVGV4dDsKKyAgICBOU0NvbnRyb2wgKl92b2x1
bWVTbGlkZXI7CisgICAgTlNDb250cm9sICpfcGxheUJ1dHRvbjsKK30KKy0gKGlkPFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lk
KXNldERlbGVnYXRlOihpZDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVs
ZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClmYWRlV2luZG93SW47CistICh2b2lkKWZhZGVXaW5k
b3dPdXQ7CistICh2b2lkKWNsb3NlV2luZG93OworCitAZW5kCisKK0Bwcm90b2NvbCBXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorLSAodm9p
ZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW47CistIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kilt
ZWRpYUVsZW1lbnQ7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjRmZmFmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW0KQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgiCisKKyNpbXBvcnQg
PFFUS2l0L1FUS2l0Lmg+CisjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyIChQcml2YXRlKSA8TlNXaW5kb3dEZWxlZ2F0ZT4KKy0gKHZvaWQpdXBk
YXRlVGltZTsKKworCistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXI7
CistIChRVFRpbWUpY3VycmVudFFUVGltZTsKKy0gKHZvaWQpc2V0Q3VycmVudFFUVGltZTooUVRU
aW1lKWN1cnJlbnRRVFRpbWU7CistIChkb3VibGUpZHVyYXRpb247CisKKy0gKGRvdWJsZSltYXhW
b2x1bWU7CistICh2b2lkKXZvbHVtZUNoYW5nZWQ6KGlkKXNlbmRlcjsKKy0gKGRvdWJsZSl2b2x1
bWU7CistICh2b2lkKXNldFZvbHVtZTooZG91YmxlKXZvbHVtZTsKKworLSAodm9pZClwbGF5aW5n
Q2hhbmdlZDooaWQpc2VuZGVyOworLSAoQk9PTClwbGF5aW5nOworLSAodm9pZClzZXRQbGF5aW5n
OihCT09MKXBsYXlpbmc7CisKKy0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQ7CistIChO
U1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dDsKKworLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQp
c2VuZGVyOworQGVuZAorCisKKy8vCisvLyBIVUQgV2luZG93CisvLworCitAaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2luZG93CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cKKy0gKGlkKWluaXRXaXRoQ29udGVudFJl
Y3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tp
bmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sK
KyAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29u
dGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFj
a2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOworICAgIFtzZWxmIHNldEJhY2tn
cm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07CisgICAgW3NlbGYgc2V0TGV2ZWw6TlNQ
b3BVcE1lbnVXaW5kb3dMZXZlbF07CisgICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVu
dHM6WUVTXTsKKyAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOworICAgIFtzZWxm
IHNldE1vdmFibGVCeVdpbmRvd0JhY2tncm91bmQ6WUVTXTsKKyAgICBbc2VsZiBzZXRIaWRlc09u
RGVhY3RpdmF0ZTpZRVNdOworICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKWNhbkJlY29t
ZUtleVdpbmRvdworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpY2FuY2VsT3BlcmF0
aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxz
Y3JlZW46c2VsZl07Cit9CistICh2b2lkKWNlbnRlcgoreworICAgIE5TUmVjdCBodWRGcmFtZSA9
IFtzZWxmIGZyYW1lXTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW05TU2NyZWVuIG1haW5T
Y3JlZW5dIGZyYW1lXTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExlZnRQb2ludDpOU01ha2VQb2lu
dCgoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCAtIGh1ZEZyYW1lLnNpemUud2lkdGgpIC8gMiArIHNj
cmVlbkZyYW1lLm9yaWdpbi54LCBodWRGcmFtZS5zaXplLmhlaWdodCAqIDIgKyBzY3JlZW5GcmFt
ZS5vcmlnaW4ueCldOworfQorCitAZW5kCisKKworLy8KKy8vIEhVRCBXaW5kb3cgQ29udHJvbGxl
cgorLy8KKworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dIZWlnaHQgPSA1OTsKK3N0YXRp
YyBjb25zdCBDR0Zsb2F0IHdpbmRvd1dpZHRoID0gNDM4OworCitAaW1wbGVtZW50YXRpb24gV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlcgorCistIChpZClpbml0Cit7CisgICAg
TlNXaW5kb3cqIHdpbmRvdyA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IGFsbG9jXSBp
bml0V2l0aENvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgd2luZG93V2lkdGgsIHdpbmRvd0hl
aWdodCkgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdT
dG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93
OndpbmRvd107CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbd2luZG93IHJl
bGVhc2VdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3
aW5kb3dEaWRMb2FkXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOworICAgIEFTU0VSVCghX2FyZWEpOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRBcmVhOihOU1RyYWNraW5nQXJl
YSAqKWFyZWEKK3sKKyAgICBpZiAoYXJlYSA9PSBfYXJlYSkKKyAgICAgICAgcmV0dXJuOworICAg
IFtfYXJlYSByZWxlYXNlXTsKKyAgICBfYXJlYSA9IFthcmVhIHJldGFpbl07Cit9CisKKy0gKGlk
PFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUK
K3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorICAgICAKKy0gKHZvaWQpc2V0RGVsZWdhdGU6
KGlkPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdh
dGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZClzY2hlZHVsZVRp
bWVVcGRhdGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNX
aXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBv
YmplY3Q6c2VsZl07CisKKyAgICAvLyBGaXJzdCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2No
ZWR1bGUgZnV0dXJlIHVwZGF0ZQorICAgIFtzZWxmIHVwZGF0ZVRpbWVdOworCisgICAgX3RpbWVs
aW5lVXBkYXRlVGltZXIgPSBbW05TVGltZXIgdGltZXJXaXRoVGltZUludGVydmFsOjAuMjUwIHRh
cmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1cGRhdGVUaW1lKSB1c2VySW5mbzpuaWwgcmVw
ZWF0czpZRVNdIHJldGFpbl07CisgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIGFkZFRp
bWVyOl90aW1lbGluZVVwZGF0ZVRpbWVyIGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOwor
fQorCistICh2b2lkKXVuc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNhbmNl
bFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rv
cih1bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0Om5pbF07CisKKyAgICBbX3RpbWVsaW5lVXBk
YXRlVGltZXIgaW52YWxpZGF0ZV07CisgICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIHJlbGVhc2Vd
OworICAgIF90aW1lbGluZVVwZGF0ZVRpbWVyID0gbmlsOworfQorCistICh2b2lkKWZhZGVXaW5k
b3dJbgoreworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICgh
W3dpbmRvdyBpc1Zpc2libGVdKQorICAgICAgICBbd2luZG93IHNldEFscGhhVmFsdWU6MF07CisK
KyAgICBbd2luZG93IG9yZGVyRnJvbnQ6c2VsZl07CisgICAgW1t3aW5kb3cgYW5pbWF0b3JdIHNl
dEFscGhhVmFsdWU6MV07CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91
c2VJc0luSFVEKQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVX
aW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MS4wXTsKK30KKworLSAodm9pZClm
YWRlV2luZG93T3V0Cit7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZ
RVNdOworICAgIFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTowXTsKKyAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSB3
aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2luZG93Cit7
CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBb
c2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxm
IHdpbmRvd107CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHJlbW92ZVRyYWNraW5nQXJlYTpf
YXJlYV07CisgICAgW3NlbGYgc2V0QXJlYTpuaWxdOworICAgIFt3aW5kb3cgY2xvc2VdOworICAg
IFt3aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKK30K
KworI2lmbmRlZiBIQVZFX01FRElBX0NPTlRST0wKK2VudW0geworICAgIFdLTWVkaWFVSUNvbnRy
b2xQbGF5UGF1c2VCdXR0b24sCisgICAgV0tNZWRpYVVJQ29udHJvbFJld2luZEJ1dHRvbiwKKyAg
ICBXS01lZGlhVUlDb250cm9sRmFzdEZvcndhcmRCdXR0b24sCisgICAgV0tNZWRpYVVJQ29udHJv
bEV4aXRGdWxsc2NyZWVuQnV0dG9uLAorICAgIFdLTWVkaWFVSUNvbnRyb2xWb2x1bWVEb3duQnV0
dG9uLAorICAgIFdLTWVkaWFVSUNvbnRyb2xTbGlkZXIsCisgICAgV0tNZWRpYVVJQ29udHJvbFZv
bHVtZVVwQnV0dG9uLAorICAgIFdLTWVkaWFVSUNvbnRyb2xUaW1lbGluZQorfTsKKyNlbmRpZgor
CitzdGF0aWMgTlNDb250cm9sICpjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShp
bnQgY29udHJvbFR5cGUsIE5TUmVjdCBmcmFtZSkKK3sKKyNpZmRlZiBIQVNfTUVESUFfQ09OVFJP
TAorICAgIE5TQ29udHJvbCAqY29udHJvbCA9IFdLQ3JlYXRlTWVkaWFVSUNvbnRyb2woY29udHJv
bFR5cGUpOworICAgIFtjb250cm9sIHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpXTsK
KyAgICByZXR1cm4gY29udHJvbDsKKyNlbHNlCisgICAgaWYgKGNvbnRyb2xUeXBlID09IFdLTWVk
aWFVSUNvbnRyb2xTbGlkZXIpCisgICAgICAgIHJldHVybiBbW05TU2xpZGVyIGFsbG9jXSBpbml0
V2l0aEZyYW1lOmZyYW1lXTsKKyAgICByZXR1cm4gW1tOU0NvbnRyb2wgYWxsb2NdIGluaXRXaXRo
RnJhbWU6ZnJhbWVdOworI2VuZGlmCit9CisKK3N0YXRpYyBOU1RleHRGaWVsZCAqY3JlYXRlVGlt
ZVRleHRGaWVsZChOU1JlY3QgZnJhbWUpCit7CisgICAgTlNUZXh0RmllbGQgKnRleHRGaWVsZCA9
IFtbTlNUZXh0RmllbGQgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWVdOworICAgIFt0ZXh0Rmll
bGQgc2V0VGV4dENvbG9yOltOU0NvbG9yIHdoaXRlQ29sb3JdXTsKKyAgICBbdGV4dEZpZWxkIHNl
dEJvcmRlcmVkOk5PXTsKKyAgICBbdGV4dEZpZWxkIHNldEZvbnQ6W05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOjEwXV07CisgICAgW3RleHRGaWVsZCBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOworICAg
IFt0ZXh0RmllbGQgc2V0QmV6ZWxlZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRFZGl0YWJsZTpO
T107CisgICAgW3RleHRGaWVsZCBzZXRTZWxlY3RhYmxlOk5PXTsKKyAgICByZXR1cm4gdGV4dEZp
ZWxkOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQKK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBrTWFyZ2luID0gOTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrTWFyZ2luVG9wID0g
OTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBrQnV0dG9uU2l6ZSA9IDI1OworICAgIHN0YXRp
YyBjb25zdCBDR0Zsb2F0IGtCdXR0b25NaW5pU2l6ZSA9IDE2OworCisgICAgTlNXaW5kb3cgKndp
bmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgTlNBc3NlcnQod2luZG93LCBAIk5vIHdpbmRvdyB3
YXMgY3JlYXRlZCIpOworCisjaWZkZWYgSEFWRV9NRURJQV9DT05UUk9MCisgICAgTlNWaWV3ICpi
YWNrZ3JvdW5kID0gV0tDcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKyNlbHNlCisgICAg
TlNWaWV3ICpiYWNrZ3JvdW5kID0gW1tOU1ZpZXcgYWxsb2NdIGluaXRdOworI2VuZGlmCisgICAg
W3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKKyAgICBfYXJlYSA9IFtbTlNUcmFj
a2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6
TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZHxOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93
bmVyOnNlbGYgdXNlckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6
X2FyZWFdOworICAgIFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqY29u
dGVudFZpZXcgPSBbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107CisKKyAgICBDR0Zsb2F0IHRv
cCA9IHdpbmRvd0hlaWdodCAtIGtNYXJnaW5Ub3A7CisgICAgQ0dGbG9hdCBjZW50ZXIgPSAod2lu
ZG93V2lkdGggLSBrQnV0dG9uU2l6ZSkgLyAyOworICAgIF9wbGF5QnV0dG9uID0gY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFBsYXlQYXVzZUJ1dHRv
biwgTlNNYWtlUmVjdChjZW50ZXIsIHRvcCAtIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSwga0J1
dHRvblNpemUpKTsKKyAgICBbX3BsYXlCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtfcGxh
eUJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHBsYXlpbmdDaGFuZ2VkOildOworICAgIFtjb250
ZW50VmlldyBhZGRTdWJ2aWV3Ol9wbGF5QnV0dG9uXTsKKworICAgIENHRmxvYXQgbGVmdE9mQ2Vu
dGVyID0gKHdpbmRvd1dpZHRoIC0ga0J1dHRvblNpemUgKiAzIC0ga0J1dHRvblNpemUgLSBrQnV0
dG9uU2l6ZSkgLyAyOworICAgIE5TQ29udHJvbCAqcmV3aW5kQnV0dG9uID0gY3JlYXRlQ29udHJv
bFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFJld2luZEJ1dHRvbiwgTlNN
YWtlUmVjdChsZWZ0T2ZDZW50ZXIsIHRvcCAtIGtCdXR0b25TaXplLCBrQnV0dG9uU2l6ZSwga0J1
dHRvblNpemUpKTsKKyAgICBbcmV3aW5kQnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IocmV3aW5k
OildOworICAgIFtyZXdpbmRCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtjb250ZW50Vmll
dyBhZGRTdWJ2aWV3OnJld2luZEJ1dHRvbl07CisgICAgW3Jld2luZEJ1dHRvbiByZWxlYXNlXTsK
KworICAgIENHRmxvYXQgcmlnaHRPZkNlbnRlciA9ICh3aW5kb3dXaWR0aCArIGtCdXR0b25TaXpl
ICogMykgLyAyOworICAgIE5TQ29udHJvbCAqZmFzdEZvcndhcmRCdXR0b24gPSBjcmVhdGVDb250
cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShXS01lZGlhVUlDb250cm9sRmFzdEZvcndhcmRCdXR0
b24sIE5TTWFrZVJlY3QocmlnaHRPZkNlbnRlciwgdG9wIC0ga0J1dHRvblNpemUsIGtCdXR0b25T
aXplLCBrQnV0dG9uU2l6ZSkpOworICAgIFtyZXdpbmRCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3Rv
cihmYXN0Rm9yd2FyZDopXTsKKyAgICBbcmV3aW5kQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAg
ICBbY29udGVudFZpZXcgYWRkU3VidmlldzpmYXN0Rm9yd2FyZEJ1dHRvbl07CisgICAgW2Zhc3RG
b3J3YXJkQnV0dG9uIHJlbGVhc2VdOworCisgICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5k
b3dXaWR0aCAtIDIgKiBrTWFyZ2luIC0ga0J1dHRvbk1pbmlTaXplOworICAgIE5TQ29udHJvbCAq
ZXhpdEZ1bGxzY3JlZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShXS01lZGlhVUlDb250cm9sRXhpdEZ1bGxzY3JlZW5CdXR0b24sIE5TTWFrZVJlY3QoY2xvc2VU
b1JpZ2h0LCB0b3AgLSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCBrQnV0
dG9uTWluaVNpemUsIGtCdXR0b25NaW5pU2l6ZSkpOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRv
biBzZXRBY3Rpb246QHNlbGVjdG9yKGV4aXRGdWxsc2NyZWVuOildOworICAgIFtleGl0RnVsbHNj
cmVlbkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6
ZXhpdEZ1bGxzY3JlZW5CdXR0b25dOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNl
XTsKKyAgICAKKyAgICBDR0Zsb2F0IGxlZnQgPSBrTWFyZ2luOworICAgIE5TQ29udHJvbCAqdm9s
dW1lRG93bkJ1dHRvbiA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKFdLTWVk
aWFVSUNvbnRyb2xWb2x1bWVEb3duQnV0dG9uLCBOU01ha2VSZWN0KGxlZnQsIHRvcCAtIGtCdXR0
b25TaXplIC8gMiAtIGtCdXR0b25NaW5pU2l6ZSAvIDIsIGtCdXR0b25NaW5pU2l6ZSwga0J1dHRv
bk1pbmlTaXplKSk7CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lRG93bkJ1dHRv
bl07CisgICAgW3ZvbHVtZURvd25CdXR0b24gcmVsZWFzZV07CisKKyAgICBzdGF0aWMgY29uc3Qg
aW50IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7CisKKyAgICBsZWZ0ID0ga01hcmdpbiArIGtCdXR0
b25NaW5pU2l6ZTsKKyAgICBfdm9sdW1lU2xpZGVyID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJ
Q29udHJvbFR5cGUoV0tNZWRpYVVJQ29udHJvbFNsaWRlciwgTlNNYWtlUmVjdChsZWZ0LCB0b3Ag
LSBrQnV0dG9uU2l6ZSAvIDIgLSBrQnV0dG9uTWluaVNpemUgLyAyLCB2b2x1bWVTbGlkZXJXaWR0
aCwga0J1dHRvbk1pbmlTaXplKSk7CisgICAgW192b2x1bWVTbGlkZXIgc2V0VmFsdWU6W05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgbWF4Vm9sdW1lXV0gZm9yS2V5OkAibWF4VmFsdWUi
XTsKKyAgICBbX3ZvbHVtZVNsaWRlciBzZXRUYXJnZXQ6c2VsZl07CisgICAgW192b2x1bWVTbGlk
ZXIgc2V0QWN0aW9uOkBzZWxlY3Rvcih2b2x1bWVDaGFuZ2VkOildOworICAgIFtjb250ZW50Vmll
dyBhZGRTdWJ2aWV3Ol92b2x1bWVTbGlkZXJdOworCisgICAgbGVmdCA9IGtNYXJnaW4gKyBrQnV0
dG9uTWluaVNpemUgKyB2b2x1bWVTbGlkZXJXaWR0aCArIGtCdXR0b25NaW5pU2l6ZSAvIDI7Cisg
ICAgTlNDb250cm9sICpidXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShXS01lZGlhVUlDb250cm9sVm9sdW1lVXBCdXR0b24sIE5TTWFrZVJlY3QobGVmdCwgdG9wIC0g
a0J1dHRvblNpemUgLyAyIC0ga0J1dHRvbk1pbmlTaXplIC8gMiwga0J1dHRvbk1pbmlTaXplLCBr
QnV0dG9uTWluaVNpemUpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpidXR0b25dOwor
ICAgIFtidXR0b24gcmVsZWFzZV07CisgICAgCisgICAgc3RhdGljIGNvbnN0IGludCB0aW1lVGV4
dFdpZHRoID0gNTA7CisgICAgc3RhdGljIGNvbnN0IGludCBzbGlkZXJIZWlnaHQgPSAxMzsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IHNsaWRlck1hcmdpbkZpeHVwID0gNDsKKworI2lmZGVmIEhBVkVf
TUVESUFfQ09OVFJPTAorICAgIF90aW1lbGluZSA9IFdLQ3JlYXRlTWVkaWFVSUNvbnRyb2woV0tN
ZWRpYVVJQ29udHJvbFRpbWVsaW5lKTsKKyNlbHNlCisgICAgX3RpbWVsaW5lID0gW1tOU1NsaWRl
ciBhbGxvY10gaW5pdF07CisjZW5kaWYKKyAgICBbX3RpbWVsaW5lIHNldFRhcmdldDpzZWxmXTsK
KyAgICBbX3RpbWVsaW5lIHNldEFjdGlvbjpAc2VsZWN0b3IodGltZWxpbmVQb3NpdGlvbkNoYW5n
ZWQ6KV07CisgICAgW190aW1lbGluZSBzZXRGcmFtZTpOU01ha2VSZWN0KGtNYXJnaW4gKyB0aW1l
VGV4dFdpZHRoICsga01hcmdpbi8yLCBrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXAsIHdpbmRv
d1dpZHRoIC0gMiAqIChrTWFyZ2luIC0gc2xpZGVyTWFyZ2luRml4dXApIC0ga01hcmdpbiAqIDIg
LSAyICogdGltZVRleHRXaWR0aCwgc2xpZGVySGVpZ2h0KV07CisgICAgW2NvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6X3RpbWVsaW5lXTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZVRleHRIZWln
aHQgPSAxMTsKKworICAgIF9lbGFwc2VkVGltZVRleHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5T
TWFrZVJlY3Qoa01hcmdpbiwga01hcmdpbiwgdGltZVRleHRXaWR0aCwgdGltZVRleHRIZWlnaHQp
KTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfZWxhcHNlZFRpbWVUZXh0XTsKKworICAg
IF9yZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh3aW5k
b3dXaWR0aCAtIGtNYXJnaW4gLSB0aW1lVGV4dFdpZHRoLCBrTWFyZ2luLCB0aW1lVGV4dFdpZHRo
LCB0aW1lVGV4dEhlaWdodCkpOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9yZW1haW5p
bmdUaW1lVGV4dF07CisgICAgCisgICAgW3dpbmRvdyBjZW50ZXJdOworfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiAgQmluZGluZ3MKKyAqCisgKi8KKworLSAodm9p
ZCl1cGRhdGVWb2x1bWUKK3sKKyAgICBbX3ZvbHVtZVNsaWRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZTpbc2VsZiB2b2x1bWVdXSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCist
ICh2b2lkKXVwZGF0ZVRpbWUKK3sKKyAgICBbc2VsZiB1cGRhdGVWb2x1bWVdOworCisgICAgW190
aW1lbGluZSBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhRVFRpbWU6W3NlbGYgY3VycmVudFFU
VGltZV1dIGZvcktleTpAInZhbHVlIl07CisgICAgW190aW1lbGluZSBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZTpbc2VsZiBkdXJhdGlvbl1dIGZvcktleTpAIm1heFZhbHVlIl07
CisgICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1ZTpbc2VsZiByZW1haW5pbmdU
aW1lVGV4dF1dOworICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0cmluZ1ZhbHVlOltzZWxmIGVs
YXBzZWRUaW1lVGV4dF1dOworfQorCistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2VkOihp
ZClzZW5kZXIKK3sKKyAgICBpZCB2YWx1ZSA9IFtfdGltZWxpbmUgdmFsdWVGb3JLZXk6QCJ2YWx1
ZSJdOworICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dKTsK
KyAgICBOU1ZhbHVlICpwb3NpdGlvbiA9IHZhbHVlOworICAgIFtzZWxmIHNldEN1cnJlbnRRVFRp
bWU6W3Bvc2l0aW9uIFFUVGltZVZhbHVlXV07ICAgIAorfQorCistIChRVFRpbWUpY3VycmVudFFU
VGltZQoreworICAgIFFUVGltZSByZXQ7CisgICAgcmV0LnRpbWVWYWx1ZSA9IFtfZGVsZWdhdGUg
bWVkaWFFbGVtZW50XSA/IFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+Y3VycmVudFRpbWUoKSAq
IDMwIDogMDsKKyAgICByZXQudGltZVNjYWxlID0gMzA7CisgICAgcmV0dXJuIHJldDsKK30KKwor
LSAodm9pZClzZXRDdXJyZW50UVRUaW1lOihRVFRpbWUpY3VycmVudFFUVGltZQoreworICAgIGlm
ICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlOworICAgIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+c2V0Q3Vy
cmVudFRpbWUoKGRvdWJsZSljdXJyZW50UVRUaW1lLnRpbWVWYWx1ZSAvIChkb3VibGUpY3VycmVu
dFFUVGltZS50aW1lU2NhbGUsIGUpOworfQorCistIChkb3VibGUpZHVyYXRpb24KK3sKKyAgICBy
ZXR1cm4gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdID8gW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRd
LT5kdXJhdGlvbigpIDogMDsKK30KKworLSAoZG91YmxlKW1heFZvbHVtZQoreworICAgIC8vIFNl
dCB0aGUgdm9sdW1lIHNsaWRlciByZXNvbHV0aW9uCisgICAgcmV0dXJuIDEwMDsKK30KKworLSAo
dm9pZCl2b2x1bWVDaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBpZCB2YWx1ZSA9IFtfdm9sdW1l
U2xpZGVyIHZhbHVlRm9yS2V5OkAidmFsdWUiXTsKKyAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pOworICAgIE5TTnVtYmVyICp2b2x1bWUgPSB2YWx1ZTsK
KyAgICBbc2VsZiBzZXRWb2x1bWU6W3ZvbHVtZSBkb3VibGVWYWx1ZV1dOworfQorCistIChkb3Vi
bGUpdm9sdW1lCit7CisgICAgcmV0dXJuIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSA/IFtfZGVs
ZWdhdGUgbWVkaWFFbGVtZW50XS0+dm9sdW1lKCkgKiBbc2VsZiBtYXhWb2x1bWVdIDogMDsKK30K
KworLSAodm9pZClzZXRWb2x1bWU6KGRvdWJsZSl2b2x1bWUKK3sKKyAgICBpZiAoIVtfZGVsZWdh
dGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZTsKKyAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnNldFZvbHVtZSh2b2x1bWUg
LyBbc2VsZiBtYXhWb2x1bWVdLCBlKTsKK30KKworLSAodm9pZClwbGF5aW5nQ2hhbmdlZDooaWQp
c2VuZGVyCit7CisgICAgW3NlbGYgc2V0UGxheWluZzohW3NlbGYgcGxheWluZ11dOworfQorCist
IChCT09MKXBsYXlpbmcKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRd
LT5jYW5QbGF5KCk7Cit9CisKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCit7Cisg
ICAgaWYgKCFbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChwbGF5aW5nKQorICAgICAgICBbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPnBsYXkoKTsK
KyAgICBlbHNlCisgICAgICAgIFtfZGVsZWdhdGUgbWVkaWFFbGVtZW50XS0+cGF1c2UoKTsKK30K
Kworc3RhdGljIE5TU3RyaW5nICp0aW1lVG9TdHJpbmcoZG91YmxlIHRpbWUpCit7CisgICAgaWYg
KCFpc2Zpbml0ZSh0aW1lKSkKKyAgICAgICAgdGltZSA9IDA7CisgICAgaW50IHNlY29uZHMgPSAo
aW50KWZhYnNmKHRpbWUpOyAKKyAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOwor
ICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2MDsKKyAgICBzZWNvbmRzICU9IDYw
OworICAgIGlmIChob3VycykgeworICAgICAgICBpZiAoaG91cnMgPiA5KQorICAgICAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlMDJkOiUwMmQ6JTAyZCIsICh0
aW1lIDwgMCA/ICItIiA6ICIiKSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyUw
MWQ6JTAyZDolMDJkIiwgKHRpbWUgPCAwID8gIi0iIDogIiIpLCBob3VycywgbWludXRlcywgc2Vj
b25kc107CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJXMlMDJkOiUwMmQiLCAodGltZSA8IDAgPyAiLSIgOiAiIiksIG1pbnV0ZXMs
IHNlY29uZHNdOworICAgIAorfQorCitzdGF0aWMgTlNTdHJpbmcgKnN0cmluZ1RvVGltZVRleHRB
dHRyaWJ1dGVkKE5TU3RyaW5nICpzdHJpbmcsIE5TVGV4dEFsaWdubWVudCBhbGlnbikKK3sKKyAg
ICBOU1NoYWRvdyAqYmxhY2tTaGFkb3cgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsKKyAgICBb
YmxhY2tTaGFkb3cgc2V0U2hhZG93Q29sb3I6W05TQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFti
bGFja1NoYWRvdyBzZXRTaGFkb3dCbHVyUmFkaXVzOjBdOworICAgIFtibGFja1NoYWRvdyBzZXRT
aGFkb3dPZmZzZXQ6TlNNYWtlU2l6ZSgwLCAtMSldOworICAgIE5TTXV0YWJsZVBhcmFncmFwaFN0
eWxlICpzdHlsZSA9IFtbTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgYWxsb2NdIGluaXRdOworICAg
IFtzdHlsZSBzZXRBbGlnbm1lbnQ6YWxpZ25dOworICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpibGFja1NoYWRvdywgTlNT
aGFkb3dBdHRyaWJ1dGVOYW1lLCBzdHlsZSwgTlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUs
IG5pbF07CisgICAgW3N0eWxlIHJlbGVhc2VdOworCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICog
YXR0clN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpz
dHJpbmcgYXR0cmlidXRlczpkaWN0XTsKKyAgICByZXR1cm4gW2F0dHJTdHJpbmcgYXV0b3JlbGVh
c2VdOyAgICAKK30KKworLSAoTlNTdHJpbmcgKilyZW1haW5pbmdUaW1lVGV4dAoreworICAgIGlm
ICghW19kZWxlZ2F0ZSBtZWRpYUVsZW1lbnRdKQorICAgICAgICByZXR1cm4gQCIiOworCisgICAg
Ly8gTmVnYXRpdmUgbnVtYmVyCisgICAgcmV0dXJuIHN0cmluZ1RvVGltZVRleHRBdHRyaWJ1dGVk
KHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgLSBb
X2RlbGVnYXRlIG1lZGlhRWxlbWVudF0tPmR1cmF0aW9uKCkpLCBOU0xlZnRUZXh0QWxpZ25tZW50
KTsKK30KKworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQKK3sKKyAgICBpZiAoIVtfZGVs
ZWdhdGUgbWVkaWFFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVybiBz
dHJpbmdUb1RpbWVUZXh0QXR0cmlidXRlZCh0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSBtZWRpYUVs
ZW1lbnRdLT5jdXJyZW50VGltZSgpKSwgTlNSaWdodFRleHRBbGlnbm1lbnQpOworfQorCisvKgor
ICogIFRyYWNraW5nIGFyZWEgY2FsbGJhY2tzCisgKgorICovCisKKy0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24n
dCBiZSBoaWRkZW4gZnJvbSBub3cKKyAgICBfbW91c2VJc0luSFVEID0gWUVTOworICAgIFtzZWxm
IGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVF
dmVudAoreworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsKKyAgICBbc2VsZiBmYWRlV2luZG93SW5d
OworfQorCisvKgorICogIEludGVyZmFjZSBjYWxsYmFja3MKKyAqCisgKi8KKworLSAodm9pZCll
eGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCit7CisgICAgW19kZWxlZ2F0ZSByZXF1ZXN0RXhpdEZ1
bGxzY3JlZW5dOyAKK30KKworLyoKKyAqICBXaW5kb3cgY2FsbGJhY2sKKyAqCisgKi8KKworLSAo
dm9pZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRDbG9z
ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiB1bnNjaGVkdWxl
VGltZVVwZGF0ZV07Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4
IGYxNmIyNzUuLjIzMjRiNmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC05Myw2ICs5Myw3IEBA
CiAjaW1wb3J0ICJXZWJUZXh0SXRlcmF0b3IuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlNldC5oPgogI2lt
cG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KQEAgLTI0ODUsNyArMjQ4Niw3IEBAIHN0YXRpYyBib29s
IG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXJvdW5kKCkKICAgICAKICAgICBpZiAoW3NlbGYg
X25lZWRzRnJhbWVMb2FkRGVsZWdhdGVSZXRhaW5RdWlya10pCiAgICAgICAgIFtfcHJpdmF0ZS0+
ZnJhbWVMb2FkRGVsZWdhdGUgcmVsZWFzZV07Ci0gICAgICAgIAorCiAgICAgW19wcml2YXRlIHJl
bGVhc2VdOwogICAgIC8vIFtzdXBlciBkZWFsbG9jXSBjYW4gZW5kIHVwIGRpc3BhdGNoaW5nIGFn
YWluc3QgX3ByaXZhdGUgKDM0NjYwODIpCiAgICAgX3ByaXZhdGUgPSBuaWw7CkBAIC01NDgxLDYg
KzU0ODIsNDUgQEAgc3RhdGljIHZvaWQgbGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyQ2FsbEJhY2so
Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGkKIAogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU8pCisKKy0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5v
ZGUqKW5vZGUKK3sKKyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnZpZGVvVGFnKSk7CisgICAgSFRNTE1lZGlhRWxlbWVudCogdmlkZW9FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG5vZGUpOworCisgICAgaWYgKF9wcml2YXRlLT5m
dWxsc2NyZWVuQ29udHJvbGxlcikgeworICAgICAgICBpZiAoW19wcml2YXRlLT5mdWxsc2NyZWVu
Q29udHJvbGxlciBtZWRpYUVsZW1lbnRdID09IHZpZGVvRWxlbWVudCkgeworICAgICAgICAgICAg
Ly8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0aGF0IHRoZSB1bmRlcmxheWluZyBwbGFm
dG9ybU1vdmllKCkKKyAgICAgICAgICAgIC8vIGhhcyBjaGFuZ2VkLiBKdXN0IGZvcmNlIGFuIHVw
ZGF0ZS4KKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVk
aWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgICAgICByZXR1cm47IC8vIE5vIG1vcmUg
dG8gZG8uCisgICAgICAgIH0KKworICAgICAgICAvLyBGaXJzdCBleGl0IEZ1bGxzY3JlZW4gZm9y
IHRoZSBvbGQgbWVkaWFFbGVtZW50LgorICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250
cm9sbGVyIG1lZGlhRWxlbWVudF0tPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIC8vIFRoaXMg
cHJldmlvdXMgY2FsbCBoYXMgdG8gdHJpZ2dlciBfZXhpdEZ1bGxzY3JlZW4sCisgICAgICAgIC8v
IHdoaWNoIGhhcyB0byBjbGVhciBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIuCisgICAg
ICAgIEFTU0VSVCghX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKTsKKyAgICB9CisgICAg
aWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpIHsKKyAgICAgICAgX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRN
ZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVu
Q29udHJvbGxlciBlbnRlckZ1bGxzY3JlZW46W1tzZWxmIHdpbmRvd10gc2NyZWVuXV07ICAgICAg
ICAKKyAgICB9CisgICAgZWxzZQorICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9s
bGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworfQorCistICh2b2lkKV9leGl0RnVs
bHNjcmVlbgoreworICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxz
Y3JlZW5dOworICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgcmVsZWFzZV07Cisg
ICAgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyID0gbmlsOworfQorCisjZW5kaWYKKwog
QGVuZAogCiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRApkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEu
aAppbmRleCA5MWQ4M2E3Li4zZTk5ODk3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApAQCAt
NDMsNiArNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBAY2xhc3MgV2ViUHJlZmVyZW5jZXM7
CiBAY2xhc3MgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyOwogQHByb3RvY29sIFdlYkZvcm1E
ZWxlZ2F0ZTsKKyNpZiBFTkFCTEUoVklERU8pCitAY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlcjsKKyNlbmRpZgogCiBleHRlcm4gQk9PTCBhcHBsaWNhdGlvbklzVGVybWluYXRpbmc7
CiBleHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7CkBAIC0xNTcsNSArMTYwLDgg
QEAgZXh0ZXJuIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwogICAgIE5TRXZlbnQgKmF1
dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7CiAKICAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVNb3Vz
ZW92ZXJUaW1lcjsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciAqZnVsbHNjcmVlbkNvbnRyb2xsZXI7CisjZW5kaWYKIH0KIEBlbmQKZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5tbQppbmRleCA0OGU3ZjZjLi43ZTA3MTA1IDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLm1tCkBAIC04MCw2ICs4MCw3IEBAIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENv
dW50ID0gMDsKICAgICBBU1NFUlQoYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nIHx8ICFwYWdlKTsK
ICAgICBBU1NFUlQoYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nIHx8ICFwcmVmZXJlbmNlcyk7CiAg
ICAgQVNTRVJUKCFpbnNlcnRpb25QYXN0ZWJvYXJkKTsKKyAgICBBU1NFUlQoIWZ1bGxzY3JlZW5D
b250cm9sbGVyKTsKIAogICAgIFthcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQgcmVsZWFzZV07
CiAgICAgW2JhY2tncm91bmRDb2xvciByZWxlYXNlXTsKQEAgLTk5LDYgKzEwMCw3IEBAIGludCBw
bHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0gMDsKIHsKICAgICBBU1NFUlRfTUFJTl9USFJFQUQo
KTsKICAgICBBU1NFUlQoIWluc2VydGlvblBhc3RlYm9hcmQpOworICAgIEFTU0VSVCghZnVsbHNj
cmVlbkNvbnRyb2xsZXIpOwogCiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaCBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAppbmRleCBiZTkyM2Y3Li41MjFhZWVlIDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdJbnRlcm5hbC5oCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAgICAgY2xhc3Mg
UGFnZTsKKyAgICBjbGFzcyBOb2RlOwogfQogI2VuZGlmCiAKQEAgLTE2Myw0ICsxNjQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC0gKHZvaWQpX3NldEluc2VydGlvblBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CiAKKyNpZiBFTkFCTEUoVklERU8pICYmIGRlZmluZWQo
X19jcGx1c3BsdXMpCistICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJDb3JlOjpO
b2RlKilub2RlOworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW47CisjZW5kaWYKKwogQGVuZApkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5oIGIvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmM3M2RjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPENvY29hL0NvY29hLmg+CisKK0BpbnRlcmZhY2UgV2ViV2luZG93U2NhbGVBbmltYXRpb24g
OiBOU0FuaW1hdGlvbiB7CitAcHJpdmF0ZQorICAgIE5TUmVjdCBfaW5pdGlhbEZyYW1lLCBfZmlu
YWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dpbmRvdzsgLy8gKGFzc2lnbikK
KyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJldGFpbikKKyAgICBOU1RpbWVJ
bnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRh
bEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1l
OworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilhbmltYXRpb247CisK
Ky0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6
bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCistICh2
b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5kCisKKworQGludGVyZmFjZSBX
ZWJXaW5kb3dGYWRlQW5pbWF0aW9uIDogTlNBbmltYXRpb24geworQHByaXZhdGUKKyAgICBDR0Zs
b2F0IF9pbml0aWFsQWxwaGEsIF9maW5hbEFscGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAv
LyAocmV0YWluKQorICAgIEJPT0wgX2lzU3RvcHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRo
RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0
KWZpbmFsQWxwaGE7CisKKy0gKENHRmxvYXQpY3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRv
IGNhbGwgc2V0V2luZG93Om5pbCB0byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBh
cHByb3ByaWF0ZQorLSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZApk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY0NDlmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm0KQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKKyNpbXBvcnQgIldlYktpdFN5c3RlbUludGVy
ZmFjZS5oIgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworc3RhdGljIGNvbnN0IENHRmxv
YXQgc2xvd01vdGlvbkZhY3RvciA9IDEwLjsKKworc3RhdGljIE5TVGltZUludGVydmFsIFdlYldp
bmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKE5TVGltZUludGVydmFsIGR1cmF0aW9u
KQoreworICAgIHJldHVybiAoW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYg
TlNTaGlmdEtleU1hc2spID8gZHVyYXRpb24gKiBzbG93TW90aW9uRmFjdG9yIDogZHVyYXRpb247
ICAgICAgICAKK30KKworc3RhdGljIE5TUmVjdCBzY2FsZWRSZWN0KE5TUmVjdCBfaW5pdGlhbEZy
YW1lLCBOU1JlY3QgX2ZpbmFsRnJhbWUsIGRvdWJsZSBmYWN0b3IpCit7CisgICAgTlNSZWN0IGN1
cnJlbnRSZWN0ID0gX2luaXRpYWxGcmFtZTsKKyAgICBjdXJyZW50UmVjdC5vcmlnaW4ueCArPSAo
TlNNaW5YKF9maW5hbEZyYW1lKSAtIE5TTWluWChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7Cisg
ICAgY3VycmVudFJlY3Qub3JpZ2luLnkgKz0gKE5TTWluWShfZmluYWxGcmFtZSkgLSBOU01pblko
X2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0LnNpemUud2lkdGggKz0g
KE5TV2lkdGgoX2ZpbmFsRnJhbWUpIC0gTlNXaWR0aChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7
CisgICAgY3VycmVudFJlY3Quc2l6ZS5oZWlnaHQgKz0gKE5TSGVpZ2h0KF9maW5hbEZyYW1lKSAt
IE5TSGVpZ2h0KF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKKyAgICByZXR1cm4gY3VycmVudFJl
Y3Q7Cit9CisKK3N0YXRpYyBDR0Zsb2F0IHNxdWFyZWREaXN0YW5jZShOU1BvaW50IHBvaW50MSwg
TlNQb2ludCBwb2ludDIpCit7CisgICAgQ0dGbG9hdCBkZWx0YVggPSBwb2ludDEueCAtIHBvaW50
Mi54OworICAgIENHRmxvYXQgZGVsdGFZID0gcG9pbnQxLnkgLSBwb2ludDIueTsKKyAgICByZXR1
cm4gZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZOworfQorCitAaW1wbGVtZW50YXRp
b24gV2ViV2luZG93U2NhbGVBbmltYXRpb24KKy0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyNpZmRlZiBI
QVZFX1dJTkRPV1NFVFNDQUxFREZSQU1FCisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tpbmdN
b2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07CisjZW5kaWYKKyAgICBbc2VsZiBz
ZXRGcmFtZVJhdGU6NjAuXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhI
aW50ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihOU1Jl
Y3QpZmluYWxGcmFtZQoreworICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2hpbnRlZER1cmF0aW9uID0gZHVyYXRpb247Cisg
ICAgX3dpbmRvdyA9IHdpbmRvdzsKKyAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOwor
ICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKKyAgICBfcmVhbEZyYW1lID0gW3dpbmRvdyBm
cmFtZV07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpIGRlYWxsb2MKK3sKKyAgICBb
X3dpbmRvdyByZWxlYXNlXTsKKyAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0
aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dp
bmRvdyAqKXdpbmRvdworeworICAgIF93aW5kb3cgPSB3aW5kb3c7Cit9CisKKy0gKGZsb2F0KWN1
cnJlbnRWYWx1ZQoreworICAgIHJldHVybiAwLjUgLSAwLjUgKiBjb3MoTV9QSSAqICgxIC0gW3Nl
bGYgY3VycmVudFByb2dyZXNzXSkpOworfQorCistIChOU1JlY3QpY3VycmVudEZyYW1lCit7Cisg
ICAgcmV0dXJuIHNjYWxlZFJlY3QoX2ZpbmFsRnJhbWUsIF9pbml0aWFsRnJhbWUsIFtzZWxmIGN1
cnJlbnRWYWx1ZV0pOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRp
b25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmICghX3dpbmRvdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107CisKKyAgICBOU1Jl
Y3QgY3VycmVudFJlY3QgPSBbc2VsZiBjdXJyZW50RnJhbWVdOworI2lmZGVmIEhBVkVfV0lORE9X
U0VUU0NBTEVERlJBTUUKKyAgICBXS1dpbmRvd1NldFNjYWxlZEZyYW1lKF93aW5kb3csIGN1cnJl
bnRSZWN0LCBfcmVhbEZyYW1lKTsKKyNlbHNlCisgICAgW193aW5kb3cgc2V0RnJhbWU6Y3VycmVu
dFJlY3QgZGlzcGxheTpZRVNdOworI2VuZGlmCisgICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVu
dFByb2dyZXNzOnByb2dyZXNzXTsKK30KKworLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5p
bWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlv
bjsKKyAgICBfc3ViQW5pbWF0aW9uID0gW2FuaW1hdGlvbiByZXRhaW5dOworICAgIFtvbGRBbmlt
YXRpb24gcmVsZWFzZV07Cit9CisKKy0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlv
bk5lZWRlZFRvUmVhY2hGaW5hbEZyYW1lCit7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWF4
QWRkaXRpb25hbER1cmF0aW9uID0gMS4wOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHNwZWVk
RmFjdG9yID0gMC4wMDAxOworICAgIAorICAgIENHRmxvYXQgbWF4RGlzdCA9IHNxdWFyZWREaXN0
YW5jZShfaW5pdGlhbEZyYW1lLm9yaWdpbiwgX2ZpbmFsRnJhbWUub3JpZ2luKTsKKyAgICBDR0Zs
b2F0IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01ha2VQb2ludChO
U01heFgoX2luaXRpYWxGcmFtZSksIE5TTWluWShfaW5pdGlhbEZyYW1lKSksIE5TTWFrZVBvaW50
KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWluWShfZmluYWxGcmFtZSkpKTsKKyAgICBpZiAoZGlz
dCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRpc3QgPSBz
cXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUpLCBOU01heFko
X2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUpLCBOU01heFko
X2ZpbmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0
ID0gZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5T
TWluWChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQo
TlNNaW5YKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAgIGlmIChkaXN0
ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAgcmV0dXJuIE1J
TihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlvbik7ICAg
IAorfQorCistICh2b2lkKXN0YXJ0QW5pbWF0aW9uCit7CisgICAgLy8gQ29tcHV0ZSBleHRyYSB0
aW1lCisgICAgaWYgKF9oaW50ZWREdXJhdGlvbikKKyAgICAgICAgW3NlbGYgc2V0RHVyYXRpb246
X2hpbnRlZER1cmF0aW9uICsgW3NlbGYgYWRkaXRpb25hbER1cmF0aW9uTmVlZGVkVG9SZWFjaEZp
bmFsRnJhbWVdXTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCistICh2b2lkKXN0
b3BBbmltYXRpb24KK3sKKyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBzdG9wQW5pbWF0
aW9uXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdlYldpbmRvd0ZhZGVBbmltYXRpb24KKy0gKGlkKWluaXQKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyNpZmRlZiBIQVZFX1dJTkRPV1NFVEFMUEhBCisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tp
bmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07CisjZW5kaWYKKyAgICBbc2Vs
ZiBzZXRGcmFtZVJhdGU6NjAuXTsKKyAgICBbc2VsZiBzZXRBbmltYXRpb25DdXJ2ZTpOU0FuaW1h
dGlvbkVhc2VJbk91dF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoRHVy
YXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cg
aW5pdGlhbEFscGhhOihDR0Zsb2F0KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZp
bmFsQWxwaGEKK3sKKyAgICBzZWxmID0gW3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOyAgICAKKyAgICBfd2luZG93ID0gd2luZG93OworICAgIF9pbml0aWFs
QWxwaGEgPSBpbml0aWFsQWxwaGE7CisgICAgX2ZpbmFsQWxwaGEgPSBmaW5hbEFscGhhOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgoreworICAgIFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dBbmltYXRpb25EdXJh
dGlvbkZyb21EdXJhdGlvbihkdXJhdGlvbildOworfQorCistIChDR0Zsb2F0KWN1cnJlbnRBbHBo
YQoreworICAgIHJldHVybiBNQVgoMC4wLCBNSU4oMS4wLCBfaW5pdGlhbEFscGhhICsgW3NlbGYg
Y3VycmVudFZhbHVlXSAqIChfZmluYWxBbHBoYSAtIF9pbml0aWFsQWxwaGEpKSk7Cit9CisKKy0g
KHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCit7
CisgICAgaWYgKF9pc1N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChfd2lu
ZG93KTsKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworI2lmZGVm
IEhBVkVfV0lORE9XU0VUQUxQSEEKKyAgICBXS1dpbmRvd1NldEFscGhhKF93aW5kb3csIFtzZWxm
IGN1cnJlbnRBbHBoYV0pOworI2Vsc2UKKyAgICBbX3dpbmRvdyBzZXRBbHBoYVZhbHVlOltzZWxm
IGN1cnJlbnRBbHBoYV1dOworI2VuZGlmCit9CisKKy0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRv
dyopd2luZG93Cit7CisgICAgX3dpbmRvdyA9IHdpbmRvdzsKK30KKworLSAodm9pZClzdG9wQW5p
bWF0aW9uCit7CisgICAgLy8gVGhpcyBpcyByZWxldmFudCB3aGVuIHdlIGFyZSBhIHN1YiBhbmlt
YXRpb24gb2YgYSBzY2FsZSBhbmltYXRpb24uCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSBo
b3N0ZWQgaW4gdGhlIGFuaW1hdGVkIHRocmVhZCBvZiB0aGUgcGFyZW50CisgICAgLy8gYW5kIGV2
ZW4gYWZ0ZXIgW3N1cGVyIHN0b3BBbmltYXRpb25dLCB0aGUgcGFyZW50IG1pZ2h0IGNhbGwKKyAg
ICAvLyBzZXRDdXJycmVudFByb2dyZXNzLgorICAgIF9pc1N0b3BwZWQgPSBZRVM7CisKKyAgICBb
c3VwZXIgc3RvcEFuaW1hdGlvbl07Cit9CisKK0BlbmQKKw==
</data>
<flag name="review"
          id="20009"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="21354"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>