<?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>127762</bug_id>
          
          <creation_ts>2014-01-27 22:45:50 -0800</creation_ts>
          <short_desc>Refactor WebVideoFullscreenController separating AVKit from MediaElement.</short_desc>
          <delta_ts>2014-04-19 14:45:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Jones">jeremyj-wk</reporter>
          <assigned_to name="Jeremy Jones">jeremyj-wk</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>philipj</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>972788</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-01-27 22:45:50 -0800</bug_when>
    <thetext>Refactor WebVideoFullscreenController separating AVKit from MediaElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972790</commentid>
    <comment_count>1</comment_count>
      <attachid>222405</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-01-27 22:58:09 -0800</bug_when>
    <thetext>Created attachment 222405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972917</commentid>
    <comment_count>2</comment_count>
      <attachid>222405</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-28 08:24:25 -0800</bug_when>
    <thetext>Comment on attachment 222405
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:161
&gt;      UNUSED_PARAM(playerViewController);
&gt;      UNUSED_PARAM(reason);
&gt; -
&gt; -    WebThreadRun(^{
&gt; -        _mediaElement-&gt;pause();
&gt; -        _mediaElement-&gt;exitFullscreen();
&gt; -    });
&gt; +    self.delegate-&gt;requestExitFullScreen();
&gt;      return NO;

Nit: it is probably worth having an ASSERT(self.delegate) here

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:167
&gt; +    self.delegate-&gt;play();

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:173
&gt; +    self.delegate-&gt;pause();

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:192
&gt; +    if (playing)
&gt; +        self.delegate-&gt;play();
&gt; +    else
&gt; +        self.delegate-&gt;pause();

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:202
&gt; +    self.delegate-&gt;seekToTime(time);

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:209
&gt; +    :EventListener(EventListener::CPPEventListenerType)
&gt; +    ,m_isListening{false}

Nit: there should be a spaces between &apos;:&apos; &amp; &apos;EventListener&apos; and &apos;,&apos; &amp; &apos;m_isListening&apos;

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:231
&gt; +    if (m_mediaElement &amp;&amp; !!m_borrowedVideoLayer)

Nit: &apos;!!&apos; is unnecessary.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:251
&gt; +    if (m_videoFullscreenInterface)

Nit: you can return early here if m_videoFullscreenInterface is NULL

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:273
&gt; +    

Nit: added whitespace.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:280
&gt; +             || event-&gt;type() == eventNames().playEvent
&gt; +             || event-&gt;type() == eventNames().ratechangeEvent)

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:342
&gt; +    :m_videoFullscreenModel(nullptr)

Nit: you should have a space between &apos;:&apos; &amp; &apos;m_videoFullscreenModel&apos;

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:378
&gt; +    m_playerController.get().contentDuration = duration;
&gt; +    m_playerController.get().maxTime = duration;
&gt; +    m_playerController.get().contentDurationWithinEndTimes = duration;
&gt; +    m_playerController.get().loadedTimeRanges = @[@0, @(duration)];
&gt; +    
&gt; +    // FIXME: we take this as an indication that playback is ready.
&gt; +    m_playerController.get().canPlay = YES;
&gt; +    m_playerController.get().canPause = YES;
&gt; +    m_playerController.get().canTogglePlayback = YES;
&gt; +    m_playerController.get().hasEnabledAudio = YES;
&gt; +    m_playerController.get().canSeek = YES;
&gt; +    m_playerController.get().minTime = 0;
&gt; +    m_playerController.get().status = AVPlayerControllerStatusReadyToPlay;

Nit: you might as well have a local variable for m_playerController.get() since you use it so many times.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:385
&gt; +    AVValueTiming *timing = [classAVValueTiming valueTimingWithAnchorValue:currentTime
&gt; +                                                           anchorTimeStamp:anchorTimeStamp rate:0];

Nit: this indentation isn&apos;t helpful.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:404
&gt; +    [m_playerController.get().playerLayer removeFromSuperlayer];
&gt; +    [videoLayer removeFromSuperlayer];
&gt; +    m_playerController.get().playerLayer = (CALayer&lt;AVPlayerLayer&gt;*)videoLayer;

Nit: you should either change this to take an AVPlayerLayer* or ASSERT that it is the correct class.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:432
&gt; +    enterFullscreen([](){});

Wow...

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:457
&gt; +    exitFullscreen([](){});

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972998</commentid>
    <comment_count>3</comment_count>
      <attachid>222405</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-28 10:52:51 -0800</bug_when>
    <thetext>Comment on attachment 222405
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:46
&gt; +// Changes here must be reflected in WebVideoFullscreenManagerProxy.messages.in

I&apos;d leave this comment out, or move it into the ChangeLog.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:47
&gt; +class WebVideoFullscreenInterface {

This class should go into its own header.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:61
&gt; +// Changes here must be reflected in WebVideoFullscreenManager.messages.in
&gt; +class WebVideoFullscreenModel {

Ditto about the comment and this class going into its own header.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:72
&gt; +class WebVideoFullscreenModelMediaElement : public WebVideoFullscreenModel, public EventListener {

This class (and implementation) can be pulled into their own files as well.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:95
&gt; +class WebVideoFullscreenInterfaceAVKit : public WebVideoFullscreenInterface, public RefCounted&lt;WebVideoFullscreenInterfaceAVKit&gt; {

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:212
&gt; +    initAVPlayerLayer();
&gt; +    initAVValueTiming();

If this is really a MediaElement model, why does it have to init AVPlayerLayer and AVValueTiming?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:293
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;pause();
&gt; +        m_mediaElement-&gt;exitFullscreen();
&gt; +        deref();
&gt; +    });

The standard way to do this in WebCore is to use a RefPtr protector.  I.e.:

RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; protect(this);
WebThreadRun(^{
   ...
   protect.clear();
});

That way, if the block exits early or is dealloced without being executed, the deref is called correctly.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:302
&gt; +void WebVideoFullscreenModelMediaElement::play() {
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;play();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:311
&gt; +void WebVideoFullscreenModelMediaElement::pause()
&gt; +{
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;pause();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:320
&gt; +void WebVideoFullscreenModelMediaElement::togglePlayState()
&gt; +{
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;togglePlayState();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:328
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;setCurrentTime(time);
&gt; +        deref();
&gt; +    });

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:338
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        setMediaElement(nullptr);
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:354
&gt; +    m_playerController = [[[WebAVPlayerController alloc] init] autorelease];

This should be:  m_playerController = adoptNS([[[WebAVPlayerController alloc] init]);

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:383
&gt; +    NSTimeInterval anchorTimeStamp = (![m_playerController.get() rate]) ? NAN : anchorTime;

The parens are unnecessary here.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:513
&gt; +    WebVideoFullscreenController* strongSelf = [self retain];
&gt; +    
&gt; +    _interface-&gt;exitFullscreen([=](){
&gt; +        strongSelf-&gt;_model-&gt;setMediaElement(nullptr);
&gt; +        strongSelf-&gt;_interface-&gt;setWebVideoFullscreenModel(nullptr);
&gt; +        strongSelf-&gt;_model-&gt;setWebVideoFullscreenInterface(nullptr);
&gt; +        strongSelf-&gt;_model = nullptr;
&gt; +        strongSelf-&gt;_interface = nullptr;
&gt; +        [strongSelf release];

Again, use a RetainPtr here (passing into the lambda by value) rather than manually retaining and releasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972999</commentid>
    <comment_count>4</comment_count>
      <attachid>222405</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-28 10:53:54 -0800</bug_when>
    <thetext>Comment on attachment 222405
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:46
&gt; +// Changes here must be reflected in WebVideoFullscreenManagerProxy.messages.in

I&apos;d leave this comment out, or move it into the ChangeLog.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:47
&gt; +class WebVideoFullscreenInterface {

This class should go into its own header.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:61
&gt; +// Changes here must be reflected in WebVideoFullscreenManager.messages.in
&gt; +class WebVideoFullscreenModel {

Ditto about the comment and this class going into its own header.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:72
&gt; +class WebVideoFullscreenModelMediaElement : public WebVideoFullscreenModel, public EventListener {

This class (and implementation) can be pulled into their own files as well.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h:95
&gt; +class WebVideoFullscreenInterfaceAVKit : public WebVideoFullscreenInterface, public RefCounted&lt;WebVideoFullscreenInterfaceAVKit&gt; {

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:212
&gt; +    initAVPlayerLayer();
&gt; +    initAVValueTiming();

If this is really a MediaElement model, why does it have to init AVPlayerLayer and AVValueTiming?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:293
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;pause();
&gt; +        m_mediaElement-&gt;exitFullscreen();
&gt; +        deref();
&gt; +    });

The standard way to do this in WebCore is to use a RefPtr protector.  I.e.:

RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; protect(this);
WebThreadRun(^{
   ...
   protect.clear();
});

That way, if the block exits early or is dealloced without being executed, the deref is called correctly.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:302
&gt; +void WebVideoFullscreenModelMediaElement::play() {
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;play();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:311
&gt; +void WebVideoFullscreenModelMediaElement::pause()
&gt; +{
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;pause();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:320
&gt; +void WebVideoFullscreenModelMediaElement::togglePlayState()
&gt; +{
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;togglePlayState();
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:328
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        m_mediaElement-&gt;setCurrentTime(time);
&gt; +        deref();
&gt; +    });

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:338
&gt; +    ref();
&gt; +    WebThreadRun(^{
&gt; +        setMediaElement(nullptr);
&gt; +        deref();
&gt; +    });
&gt; +}

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:354
&gt; +    m_playerController = [[[WebAVPlayerController alloc] init] autorelease];

This should be:  m_playerController = adoptNS([[[WebAVPlayerController alloc] init]);

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:383
&gt; +    NSTimeInterval anchorTimeStamp = (![m_playerController.get() rate]) ? NAN : anchorTime;

The parens are unnecessary here.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:513
&gt; +    WebVideoFullscreenController* strongSelf = [self retain];
&gt; +    
&gt; +    _interface-&gt;exitFullscreen([=](){
&gt; +        strongSelf-&gt;_model-&gt;setMediaElement(nullptr);
&gt; +        strongSelf-&gt;_interface-&gt;setWebVideoFullscreenModel(nullptr);
&gt; +        strongSelf-&gt;_model-&gt;setWebVideoFullscreenInterface(nullptr);
&gt; +        strongSelf-&gt;_model = nullptr;
&gt; +        strongSelf-&gt;_interface = nullptr;
&gt; +        [strongSelf release];

Again, use a RetainPtr here (passing into the lambda by value) rather than manually retaining and releasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973002</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-28 10:55:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 222405 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222405&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:432
&gt; &gt; +    enterFullscreen([](){});
&gt; 
&gt; Wow...

Such brace.  Many bracket.  Amaze.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973238</commentid>
    <comment_count>6</comment_count>
      <attachid>222537</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-01-28 17:47:51 -0800</bug_when>
    <thetext>Created attachment 222537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973239</commentid>
    <comment_count>7</comment_count>
      <attachid>222537</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-28 17:59:45 -0800</bug_when>
    <thetext>Comment on attachment 222537
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:84
&gt; +    WebVideoFullscreenController* strongSelf = [self retain];
&gt; +    

This should use the RetainPtr&lt;WebVideoFullscreenController&gt; model.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:186
&gt; +        else
&gt; +            self.delegate-&gt;pause();
&gt; +            }

Nit: Indentation.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:60
&gt; +:EventListener(EventListener::CPPEventListenerType)
&gt; +,m_isListening{false}

Nit: indentation

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:80
&gt; +    if (!!m_mediaElement &amp;&amp; !!m_borrowedVideoLayer) {

!! is not not required.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:136
&gt; +    ref();
&gt; +    WebThreadRun(^{

This should use RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; strongSelf = this;

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:145
&gt; +    ref();
&gt; +    WebThreadRun(^{

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:154
&gt; +    ref();
&gt; +    WebThreadRun(^{

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:163
&gt; +    ref();
&gt; +    WebThreadRun(^{

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:172
&gt; +    ref();
&gt; +    WebThreadRun(^{

Ditto.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm:181
&gt; +    ref();
&gt; +    WebThreadRun(^{

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973836</commentid>
    <comment_count>8</comment_count>
      <attachid>222689</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2014-01-30 11:10:50 -0800</bug_when>
    <thetext>Created attachment 222689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973854</commentid>
    <comment_count>9</comment_count>
      <attachid>222689</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-30 11:25:32 -0800</bug_when>
    <thetext>Comment on attachment 222689
Patch

LGTM, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973881</commentid>
    <comment_count>10</comment_count>
      <attachid>222689</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-30 11:45:23 -0800</bug_when>
    <thetext>Comment on attachment 222689
Patch

Clearing flags on attachment: 222689

Committed r163097: &lt;http://trac.webkit.org/changeset/163097&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973882</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-30 11:45:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002139</commentid>
    <comment_count>12</comment_count>
      <attachid>222689</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-18 20:49:32 -0700</bug_when>
    <thetext>Comment on attachment 222689
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:128
&gt; +    self.playerControllerProxy = [[classAVPlayerController alloc] init];

I think this might be a leak.

The property is a -retain property:

    @property(retain) AVPlayerController* playerControllerProxy;

So assigning to it like this will retain the incoming object. And the -alloc/init is a +1 that is not balanced.

I think this may need to be:

    self.playerControllerProxy = [[[classAVPlayerController alloc] init] autorelease];

Do you know how we can test this code patch to verify it is not leaking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002141</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-18 20:56:31 -0700</bug_when>
    <thetext>I think just a page with a video triggers this. I was able to reproduce. I will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002280</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-19 14:45:51 -0700</bug_when>
    <thetext>Joe submitted a fix in https://bugs.webkit.org/show_bug.cgi?id=131878</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222405</attachid>
            <date>2014-01-27 22:58:09 -0800</date>
            <delta_ts>2014-01-28 17:47:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127762-20140127225808.patch</filename>
            <type>text/plain</type>
            <size>26693</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc5NjM0MzQ5MWMxZTQ1
YTM1MjFkYmU3M2ZhMTk1MzA1NmRmMmIwNS4uYWVjYzJjNjA3NDIwNTQ0YmQ3ZjA0Zjk2MzcwMzIw
YzQ0NWI2YjE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE0LTAxLTI3ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyIHNlcGFyYXRpbmcgQVZLaXQgZnJvbSBNZWRpYUVsZW1lbnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGludG8gV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQgCisgICAgICAgIGFuZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdCwgd2hpY2ggY29tbXVuaWNhdGUgd2l0aCBlYWNoLW90aGVyIHRocm91Z2gKKyAgICAgICAg
YWJzdHJhY3QgaW50ZXJmYWNlcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCBhbmQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjp+V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvTGF5
ZXJJRCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJBVktpdC5tbToKKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIGRlYWxsb2NdKToK
KyAgICAgICAgKC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHBsYXllclZpZXdDb250cm9sbGVyOnNo
b3VsZERpc21pc3NXaXRoUmVhc29uOl0pOgorICAgICAgICAoLVtXZWJBVlBsYXllckNvbnRyb2xs
ZXIgcGxheTpdKToKKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHBhdXNlOl0pOgor
ICAgICAgICAoLVtXZWJBVlBsYXllckNvbnRyb2xsZXIgdG9nZ2xlUGxheWJhY2s6XSk6CisgICAg
ICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckNvbnRyb2xsZXIgc2Vla1RvVGltZTpdKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxTY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBsYXkp
OgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
ZWtUb1RpbWUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKDptX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXIpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyIGV4aXRGdWxsc2NyZWVuXSk6CisKIDIwMTQtMDEtMjcgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIElEQjogUmVtb3ZlIHVudXNlZCBjb25j
ZXB0IG9mICJjdXJzb3IgcHJlZmV0Y2giCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmgKaW5k
ZXggODQyYWNhOWY2ZWVhZTc3Mjc5ZDUwNzU3MDY1YjJkNWE3NGRhZGYzNy4uZDQzOWUwZWExOTgz
NDEwOTE1MjEwZjllZGQ1MDVjMmI2NTdlYjcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaApAQCAtMjksMTggKzI5LDk4IEBACiAjaWYgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0V2ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CiAKLUBjbGFzcyBVSVNjcmVlbjsKK09C
SkNfQ0xBU1MgVUlTY3JlZW47CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09C
SkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJv
bGxlcjsKK09CSkNfQ0xBU1MgVUlXaW5kb3c7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEhUTUxNZWRpYUVsZW1lbnQ7CisgICAgCisvLyBDaGFuZ2VzIGhlcmUgbXVzdCBiZSByZWZsZWN0
ZWQgaW4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCitjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRp
b24oZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1lKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXIoUGxhdGZvcm1M
YXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllcklEKHVpbnQzMl90KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9OworICAgIAorLy8gQ2hhbmdlcyBoZXJlIG11
c3QgYmUgcmVmbGVjdGVkIGluIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4K
K2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4
aXRGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKyAgICAKK2NsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CisgICAgUmVmUHRyPEhUTUxNZWRp
YUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBt
X2JvcnJvd2VkVmlkZW9MYXllcjsKKyAgICBib29sIG1faXNMaXN0ZW5pbmc7CisgICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICAK
K3B1YmxpYzoKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkgeyB9CisgICAg
dm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFj
ZTt9CisgICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIAor
ICAgIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50
TGlzdGVuZXImIHJocykgb3ZlcnJpZGUge3JldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVu
dExpc3RlbmVyKj4odGhpcykgPT0gJnJoczt9CisKKyAgICB2b2lkIHJlcXVlc3RFeGl0RnVsbFNj
cmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGF1
c2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRFeGl0
RnVsbHNjcmVlbigpOworfTsKKworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLCBwdWJsaWMgUmVmQ291bnRl
ZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4geworICAgIFJldGFpblB0cjxXZWJB
VlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8QVZQ
bGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5Q
dHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlX
aW5kb3c+IG1fd2luZG93OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsOworICAgIAorcHVibGljOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0KCk7CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQoKSB7IH0KKyAgICB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKik7CisgICAgCisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpOworICAg
IHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGlt
ZSk7CisgICAgdm9pZCBzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUp
OworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllcihQbGF0Zm9ybUxheWVyKik7
CisgICAgdm9pZCBzZXRWaWRlb0xheWVySUQodWludDMyX3QgdmlkZW9Db250ZXh0SUQpIHtVTlVT
RURfUEFSQU0odmlkZW9Db250ZXh0SUQpO307CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKTsK
KyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bik7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4o
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb24pOworfTsKKwogfQogCiBAaW50ZXJmYWNl
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotCiAtICh2b2lkKXNldE1l
ZGlhRWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwogLSAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotCiAtICh2b2lkKWVudGVy
RnVsbHNjcmVlbjooVUlTY3JlZW4gKilzY3JlZW47CiAtICh2b2lkKWV4aXRGdWxsc2NyZWVuOwog
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KaW5kZXggMmM0NzU1OTU0M2MzNDFj
ZGY4N2M2M2VhNDZiN2M1YzJmNzRhODFjMS4uOWVhMDFlODMwZWVmN2YzZWUxODZjNGNmN2MwODAx
ZjJkYjhjZDZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC05OCwxMCAr
OTgsMTEgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVZQbGF5ZXJDb250cm9sbGVyU3Rh
dHVzKSB7CiAgICAgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzRmFpbGVkCiB9IE5TX0VOVU1fQVZB
SUxBQkxFKDEwXzEwLCA4XzApOwogCi1AaW50ZXJmYWNlIFdlYkFWUGxheWVyQ29udHJvbGxlciA6
IE5TT2JqZWN0IDxET01FdmVudExpc3RlbmVyLCBBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdh
dGU+CitAaW50ZXJmYWNlIFdlYkFWUGxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0IDxBVlBsYXll
clZpZXdDb250cm9sbGVyRGVsZWdhdGU+CiAKIEBwcm9wZXJ0eShyZXRhaW4pIEFWUGxheWVyQ29u
dHJvbGxlciogcGxheWVyQ29udHJvbGxlclByb3h5OwogQHByb3BlcnR5KHJldGFpbikgQ0FMYXll
cjxBVlBsYXllckxheWVyPiAqcGxheWVyTGF5ZXI7CitAcHJvcGVydHkoYXNzaWduKSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCogZGVsZWdhdGU7CiAKIEBwcm9wZXJ0eSBCT09MIGNhblBsYXk7CiBA
cHJvcGVydHkoZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOwpAQCAtMTIwLDE4ICsxMjEs
MTEgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVz
KSB7CiBAcHJvcGVydHkgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzIHN0YXR1czsKIEBwcm9wZXJ0
eShyZXRhaW4pIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKIAotLSAodm9pZCloYW5kbGVFdmVudDoo
RE9NRXZlbnQgKilldnQ7Ci0KIC0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXI6KEFWUGxheWVy
Vmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGREaXNtaXNzV2l0aFJl
YXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRpc21pc3NhbFJlYXNvbilyZWFzb247CiAKIEBl
bmQKIAotCiBAaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJDb250cm9sbGVyCi17Ci0gICAgUmVm
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+IF9tZWRpYUVsZW1lbnQ7Ci0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IF9saXN0ZW5lcjsKLX0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKIHsKQEAgLTE0NSw2
ICsxMzksNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXMpIHsKIAogLSAodm9pZClkZWFsbG9jCiB7CisgICAgc2VsZi5kZWxlZ2F0ZSA9IG5pbDsK
ICAgICBzZWxmLnBsYXllckNvbnRyb2xsZXJQcm94eSA9IG5pbDsKICAgICBzZWxmLnBsYXllckxh
eWVyID0gbmlsOwogICAgIHNlbGYubG9hZGVkVGltZVJhbmdlcyA9IG5pbDsKQEAgLTE2MiwzNiAr
MTU3LDI2IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0
YXR1cykgewogewogICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CiAgICAg
VU5VU0VEX1BBUkFNKHJlYXNvbik7Ci0KLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21l
ZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKLSAgICB9KTsKKyAgICBzZWxmLmRlbGVnYXRlLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4o
KTsKICAgICByZXR1cm4gTk87CiB9CiAKIC0gKHZvaWQpcGxheTooaWQpc2VuZGVyCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIF9tZWRp
YUVsZW1lbnQtPnBsYXkoKTsKLSAgICB9KTsKKyAgICBzZWxmLmRlbGVnYXRlLT5wbGF5KCk7CiB9
CiAKIC0gKHZvaWQpcGF1c2U6KGlkKXNlbmRlcgogewogICAgIFVOVVNFRF9QQVJBTShzZW5kZXIp
OwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBfbWVkaWFFbGVtZW50LT5wYXVzZSgpOwot
ICAgIH0pOworICAgIHNlbGYuZGVsZWdhdGUtPnBhdXNlKCk7CiB9CiAKIC0gKHZvaWQpdG9nZ2xl
UGxheWJhY2s6KGlkKXNlbmRlcgogewogICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBfbWVkaWFFbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsK
LSAgICB9KTsKKyAgICBzZWxmLmRlbGVnYXRlLT50b2dnbGVQbGF5U3RhdGUoKTsKIH0KIAogLSAo
Qk9PTClpc1BsYXlpbmcKQEAgLTIwMSwxMiArMTg2LDEwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0YXR1cykgewogCiAtICh2b2lkKXNldFBsYXlpbmc6
KEJPT0wpcGxheWluZwogewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAocGxheWlu
ZykKLSAgICAgICAgICAgIF9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICB9KTsKKyAgICBpZiAocGxheWlu
ZykKKyAgICAgICAgc2VsZi5kZWxlZ2F0ZS0+cGxheSgpOworICAgIGVsc2UKKyAgICAgICAgc2Vs
Zi5kZWxlZ2F0ZS0+cGF1c2UoKTsKIH0KIAogKyAoTlNTZXQgKilrZXlQYXRoc0ZvclZhbHVlc0Fm
ZmVjdGluZ1BsYXlpbmcKQEAgLTIxNiwxMzIgKzE5OSwxNDggQEAgdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzKSB7CiAKIC0gKHZvaWQpc2Vla1RvVGlt
ZTooTlNUaW1lSW50ZXJ2YWwpdGltZQogewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBf
bWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICB9KTsKKyAgICBzZWxmLmRl
bGVnYXRlLT5zZWVrVG9UaW1lKHRpbWUpOwogfQogCi0tICh2b2lkKXVwZGF0ZVRpbWluZ1dpdGhD
dXJyZW50VGltZTooTlNUaW1lSW50ZXJ2YWwpY3VycmVudFRpbWUKLXsKLSAgICBOU1RpbWVJbnRl
cnZhbCBhbmNob3JUaW1lU3RhbXAgPSAoIVtzZWxmIHJhdGVdKSA/IE5BTiA6IFtjbGFzc0FWVmFs
dWVUaW1pbmcgY3VycmVudFRpbWVTdGFtcF07Ci0gICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0g
W2NsYXNzQVZWYWx1ZVRpbWluZyB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGlt
ZQotICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOwotICAgIFtz
ZWxmIHNldFRpbWluZzp0aW1pbmddOwotfQorQGVuZAogCi0tIChkb3VibGUpZWZmZWN0aXZlUmF0
ZQorV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6RXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpD
UFBFdmVudExpc3RlbmVyVHlwZSkKKyAgICAsbV9pc0xpc3RlbmluZ3tmYWxzZX0KIHsKLSAgICBy
ZXR1cm4gX21lZGlhRWxlbWVudC0+aXNQbGF5aW5nKCkgPyBfbWVkaWFFbGVtZW50LT5wbGF5YmFj
a1JhdGUoKSA6IDAuOworICAgIGluaXRBVlBsYXllckxheWVyKCk7CisgICAgaW5pdEFWVmFsdWVU
aW1pbmcoKTsKIH0KIAotLSAodm9pZCl1cGRhdGVEdXJhdGlvbgotewotICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3IHVzZSBjb3JyZWN0
IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKLSAgICBOU1RpbWVJbnRl
cnZhbCBkdXJhdGlvbiA9IF9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0gICAgc2VsZi5jb250
ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBzZWxmLm1heFRpbWUgPSBkdXJhdGlvbjsKLSAg
ICBzZWxmLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247Ci0gICAgc2Vs
Zi5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChkdXJhdGlvbildOwotfQogCi0tICh2b2lkKXNl
dE1lZGlhRWxlbWVudDooUGFzc1JlZlB0cjxIVE1MTWVkaWFFbGVtZW50PilwYXNzZWRNZWRpYUVs
ZW1lbnQKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldE1lZGlh
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IHBhc3NlZE1lZGlhRWxlbWVudDsKLQotICAg
IGlmIChfbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICBpZiAobV9tZWRpYUVsZW1l
bnQgPT0gbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKF9tZWRp
YUVsZW1lbnQgJiYgX2xpc3RlbmVyKQorICAgIGlmIChtX21lZGlhRWxlbWVudCAmJiBtX2lzTGlz
dGVuaW5nKQogICAgIHsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxz
ZSk7Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnBhdXNlRXZlbnQsIF9saXN0ZW5lci5nZXQoKSwgZmFsc2UpOwotICAgICAgICBfbWVkaWFF
bGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsIF9saXN0
ZW5lci5nZXQoKSwgZmFsc2UpOwotICAgICAgICBfbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIF9saXN0ZW5lci5nZXQoKSwgZmFs
c2UpOwotICAgICAgICBfbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS50aW1ldXBkYXRlRXZlbnQsIF9saXN0ZW5lci5nZXQoKSwgZmFsc2UpOworICAgICAgICBt
X21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHVyYXRpb25j
aGFuZ2VFdmVudCwgdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3Zl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucGF1c2VFdmVudCwgdGhpcywgZmFsc2UpOworICAg
ICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucGxh
eUV2ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnRp
bWV1cGRhdGVFdmVudCwgdGhpcywgZmFsc2UpOwogICAgIH0KKyAgICBtX2lzTGlzdGVuaW5nID0g
ZmFsc2U7CiAgICAgCi0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCisgICAgaWYgKG1fbWVkaWFFbGVt
ZW50ICYmICEhbV9ib3Jyb3dlZFZpZGVvTGF5ZXIpCiAgICAgewotICAgICAgICBbc2VsZi5wbGF5
ZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQtPnJl
dHVyblBsYXRmb3JtTGF5ZXIoc2VsZi5wbGF5ZXJMYXllcik7Ci0gICAgICAgIHNlbGYucGxheWVy
TGF5ZXIgPSBuaWw7CisgICAgICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKKyAg
ICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0xheWVyKG51bGxw
dHIpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+cmV0dXJuUGxhdGZvcm1MYXllcihtX2JvcnJv
d2VkVmlkZW9MYXllci5nZXQoKSk7CisgICAgICAgIG1fYm9ycm93ZWRWaWRlb0xheWVyLmNsZWFy
KCk7CiAgICAgfQogICAgIAotICAgIF9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7Ci0gICAg
X2xpc3RlbmVyID0gbnVsbHB0cjsKKyAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsK
ICAgICAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgX2xpc3RlbmVyID0gT2JqQ0V2ZW50TGlzdGVuZXI6Ondy
YXAoc2VsZik7Ci0KLSAgICBfbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LCBfbGlzdGVuZXIsIGZhbHNlKTsKLSAgICBfbWVkaWFF
bGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50LCBfbGlzdGVu
ZXIsIGZhbHNlKTsKLSAgICBfbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5wbGF5RXZlbnQsIF9saXN0ZW5lciwgZmFsc2UpOwotICAgIF9tZWRpYUVsZW1lbnQtPmFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwgX2xpc3RlbmVyLCBm
YWxzZSk7Ci0gICAgX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
dGltZXVwZGF0ZUV2ZW50LCBfbGlzdGVuZXIsIGZhbHNlKTsKLQotICAgIFtzZWxmIHVwZGF0ZUR1
cmF0aW9uXTsKLSAgICBzZWxmLmNhblBsYXkgPSBZRVM7Ci0gICAgc2VsZi5jYW5QYXVzZSA9IFlF
UzsKLSAgICBzZWxmLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgIHNlbGYuaGFzRW5hYmxl
ZEF1ZGlvID0gWUVTOwotICAgIHNlbGYuY2FuU2VlayA9IFlFUzsKLSAgICBzZWxmLm1pblRpbWUg
PSAwOwotICAgIHNlbGYucmF0ZSA9IFtzZWxmIGVmZmVjdGl2ZVJhdGVdOwotICAgIHNlbGYuc3Rh
dHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7Ci0KLSAgICBzZWxmLnBs
YXllckxheWVyID0gKENBTGF5ZXI8QVZQbGF5ZXJMYXllcj4gKilfbWVkaWFFbGVtZW50LT5ib3Jy
b3dQbGF0Zm9ybUxheWVyKCk7Ci0gICAgQVNTRVJUKFtzZWxmLnBsYXllckxheWVyIGlzS2luZE9m
Q2xhc3M6Y2xhc3NBVlBsYXllckxheWVyXSk7Ci0gICAgW3NlbGYucGxheWVyTGF5ZXIgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOwotCi0gICAgW3NlbGYgdXBkYXRlVGltaW5nV2l0aEN1cnJlbnRUaW1l
Ol9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCldOwotCi0gICAgaWYgKGlzSFRNTFZpZGVvRWxl
bWVudChfbWVkaWFFbGVtZW50LmdldCgpKSkgewotICAgICAgICBIVE1MVmlkZW9FbGVtZW50ICp2
aWRlb0VsZW1lbnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQoX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0g
ICAgICAgIHNlbGYuaGFzRW5hYmxlZFZpZGVvID0gWUVTOwotICAgICAgICBzZWxmLmNvbnRlbnRE
aW1lbnNpb25zID0gQ0dTaXplTWFrZSh2aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgdmlkZW9F
bGVtZW50LT52aWRlb0hlaWdodCgpKTsKKyAgICAKKyAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwgdGhpcywgZmFsc2Up
OworICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYXVz
ZUV2ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCwgdGhpcywgZmFsc2UpOworICAgIG1fbWVkaWFFbGVt
ZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIHRoaXMs
IGZhbHNlKTsKKyAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkudGltZXVwZGF0ZUV2ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgbV9pc0xpc3RlbmluZyA9IHRy
dWU7CisgICAgCisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgIHsKKyAg
ICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldER1cmF0aW9uKG1fbWVkaWFFbGVt
ZW50LT5kdXJhdGlvbigpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNl
dFJhdGUobV9tZWRpYUVsZW1lbnQtPmlzUGxheWluZygpLCBtX21lZGlhRWxlbWVudC0+cGxheWJh
Y2tSYXRlKCkpOworICAgICAgICAKKyAgICAgICAgbV9ib3Jyb3dlZFZpZGVvTGF5ZXIgPSBtX21l
ZGlhRWxlbWVudC0+Ym9ycm93UGxhdGZvcm1MYXllcigpOworICAgICAgICBBU1NFUlQoW21fYm9y
cm93ZWRWaWRlb0xheWVyLmdldCgpIGlzS2luZE9mQ2xhc3M6Y2xhc3NBVlBsYXllckxheWVyXSk7
CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0xheWVyKG1fYm9y
cm93ZWRWaWRlb0xheWVyLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fdmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUo
KSwgW2NsYXNzQVZWYWx1ZVRpbWluZyBjdXJyZW50VGltZVN0YW1wXSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG1fbWVkaWFFbGVtZW50LmdldCgpKSkgeworICAg
ICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCAqdmlkZW9FbGVtZW50ID0gdG9IVE1MVmlkZW9FbGVt
ZW50KG1fbWVkaWFFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dp
ZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7CisgICAgICAgIH0KICAgICB9CiB9
CiAKLS0gKHZvaWQpaGFuZGxlRXZlbnQ6KERPTUV2ZW50ICopZXZudAordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKIHsKLSAgICBFdmVudCogZXZl
bnQgPSBjb3JlKGV2bnQpOwotICAgIAotICAgIGlmICghX21lZGlhRWxlbWVudCkKKyAgICBpZiAo
IW1fbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBMT0coTWVkaWEs
ICJoYW5kbGVFdmVudCAlcyIsIGV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7Ci0KKyAgICAK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVu
dCkKLSAgICAgICAgW3NlbGYgdXBkYXRlRHVyYXRpb25dOworICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkpOwog
ICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKLSAg
ICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGxheUV2ZW50Ci0gICAgICAg
IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCkKLSAgICAg
ICAgc2VsZi5yYXRlID0gW3NlbGYgZWZmZWN0aXZlUmF0ZV07CisgICAgICAgICAgICAgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGxheUV2ZW50CisgICAgICAgICAgICAgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50KQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZShtX21lZGlhRWxlbWVudC0+aXNQbGF5aW5n
KCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7CiAgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KQotICAgICAgICBbc2VsZiB1
cGRhdGVUaW1pbmdXaXRoQ3VycmVudFRpbWU6X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKV07
CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21l
ZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW2NsYXNzQVZWYWx1ZVRpbWluZyBjdXJyZW50VGlt
ZVN0YW1wXSk7CiB9CiAKLUBlbmQKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpCit7CisgICAgcmVmKCk7CisgICAgV2ViVGhy
ZWFkUnVuKF57CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVzZSgpOworICAgICAgICBtX21l
ZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpIHsK
KyAgICByZWYoKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnBsYXkoKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQoreworICAgIHJlZigpOworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKKyAgICAgICAg
ZGVyZWYoKTsKKyAgICB9KTsKK30KIAotQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyICgpIDxVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ0RlbGVnYXRlPgotQHByb3Bl
cnR5KHJldGFpbikgVUlXaW5kb3cgKndpbmRvdzsKLUBwcm9wZXJ0eShyZXRhaW4pIFVJVmlld0Nv
bnRyb2xsZXIgKnZpZXdDb250cm9sbGVyOwotQHByb3BlcnR5KHJldGFpbikgQVZQbGF5ZXJWaWV3
Q29udHJvbGxlciAqcGxheWVyVmlld0NvbnRyb2xsZXI7Ci1AcHJvcGVydHkocmV0YWluKSBXZWJB
VlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7Ci1AZW5kCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3RhdGUoKQoreworICAgIHJl
ZigpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBtX21lZGlhRWxlbWVudC0+dG9nZ2xl
UGxheVN0YXRlKCk7CisgICAgICAgIGRlcmVmKCk7CisgICAgfSk7Cit9CiAKLUBpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIFJlZlB0
cjxIVE1MTWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIHJlZigpOworICAgIFdlYlRo
cmVhZFJ1biheeworICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7
CisgICAgICAgIGRlcmVmKCk7CisgICAgfSk7CiB9CiAKLS0gKGluc3RhbmNldHlwZSlpbml0Cit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpkaWRFeGl0RnVsbHNjcmVl
bigpCiB7Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7CisgICAgcmVmKCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIHNldE1lZGlhRWxl
bWVudChudWxscHRyKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsKK30KKwogCitXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQoKQorICAgIDptX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpCit7CiAgICAgaW5pdFVJ
U2NyZWVuKCk7CiAgICAgaW5pdFVJVmlldygpOwogICAgIGluaXRVSUNvbG9yKCk7CkBAIC0zNTEs
MTUgKzM1MCwxMzEgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVZQbGF5ZXJDb250cm9s
bGVyU3RhdHVzKSB7CiAgICAgaW5pdEFWVmFsdWVUaW1pbmcoKTsKICAgICBpbml0VUlWaWV3Q29u
dHJvbGxlcigpOwogICAgIGluaXRBVlBsYXllckxheWVyKCk7CisgICAgCisgICAgbV9wbGF5ZXJD
b250cm9sbGVyID0gW1tbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sK
KyAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsID0gbW9kZWw7CisgICAgbV9wbGF5ZXJDb250cm9s
bGVyLmdldCgpLmRlbGVnYXRlID0gbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0
aW9uKQoreworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI3MDE3IHVzZSBjb3JyZWN0IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBh
bGwgdGhlc2UKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkuY29udGVudER1cmF0aW9uID0g
ZHVyYXRpb247CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLm1heFRpbWUgPSBkdXJhdGlv
bjsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkuY29udGVudER1cmF0aW9uV2l0aGluRW5k
VGltZXMgPSBkdXJhdGlvbjsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkubG9hZGVkVGlt
ZVJhbmdlcyA9IEBbQDAsIEAoZHVyYXRpb24pXTsKKyAgICAKKyAgICAvLyBGSVhNRTogd2UgdGFr
ZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KKyAgICBtX3Bs
YXllckNvbnRyb2xsZXIuZ2V0KCkuY2FuUGxheSA9IFlFUzsKKyAgICBtX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCkuY2FuUGF1c2UgPSBZRVM7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLmNh
blRvZ2dsZVBsYXliYWNrID0gWUVTOworICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS5oYXNF
bmFibGVkQXVkaW8gPSBZRVM7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLmNhblNlZWsg
PSBZRVM7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLm1pblRpbWUgPSAwOworICAgIG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKS5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNS
ZWFkeVRvUGxheTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sK
KyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAoIVttX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCkgcmF0ZV0pID8gTkFOIDogYW5jaG9yVGltZTsKKyAgICBBVlZhbHVlVGltaW5nICp0
aW1pbmcgPSBbY2xhc3NBVlZhbHVlVGltaW5nIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1
cnJlbnRUaW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsKKyAg
ICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkudGltaW5nID0gdGltaW5nOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBm
bG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnJhdGUg
PSBpc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLjsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgp
Lmhhc0VuYWJsZWRWaWRlbyA9IGhhc1ZpZGVvOworICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQo
KS5jb250ZW50RGltZW5zaW9ucyA9IENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXIoUGxhdGZv
cm1MYXllciogdmlkZW9MYXllcikKK3sKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnBs
YXllckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbdmlkZW9MYXllciByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnBsYXllckxheWVy
ID0gKENBTGF5ZXI8QVZQbGF5ZXJMYXllcj4qKXZpZGVvTGF5ZXI7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbihzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbikKK3sKKyAgICBVSVNjcmVlbiogc2NyZWVuID0gW2NsYXNzVUlT
Y3JlZW4gbWFpblNjcmVlbl07CisgICAgCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IFtbW2Ns
YXNzQVZQbGF5ZXJWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpLnBsYXllckNvbnRyb2xsZXIgPSAoQVZQ
bGF5ZXJDb250cm9sbGVyICopbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKFttX3BsYXllclZpZXdDb250cm9sbGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KV0pCisgICAgICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVy
LmdldCgpLmRlbGVnYXRlID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAgICAgICAKKyAg
ICAgICAgbV92aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tjbGFzc1VJVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgCisgICAgICAgIG1fd2luZG93ID0gW1tbY2xhc3NVSVdp
bmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2NyZWVuIGJvdW5kc11dIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgbV93aW5kb3cuZ2V0KCkuYmFja2dyb3VuZENvbG9yID0gW2NsYXNzVUlDb2xvciBj
bGVhckNvbG9yXTsKKyAgICAgICAgbV93aW5kb3cuZ2V0KCkucm9vdFZpZXdDb250cm9sbGVyID0g
bV92aWV3Q29udHJvbGxlci5nZXQoKTsKKyAgICAgICAgW21fd2luZG93IG1ha2VLZXlBbmRWaXNp
YmxlXTsKKyAgICAgICAgCisgICAgICAgIFttX3ZpZXdDb250cm9sbGVyLmdldCgpIHByZXNlbnRW
aWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpIGFuaW1hdGVkOllFUyBj
b21wbGV0aW9uOm5pbF07CisgICAgICAgIGNvbXBsZXRpb24oKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sK
KyAgICBlbnRlckZ1bGxzY3JlZW4oW10oKXt9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb24pCit7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyID0gbmlsOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gcmVmVGhpcyA9IHRoaXM7CisgICAgCisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
W3JlZlRoaXMtPm1fdmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5pbWF0ZWQ6
WUVTIGNvbXBsZXRpb246XnsKKyAgICAgICAgICAgIHJlZlRoaXMtPm1fd2luZG93LmdldCgpLmhp
ZGRlbiA9IFlFUzsKKyAgICAgICAgICAgIHJlZlRoaXMtPm1fd2luZG93LmdldCgpLnJvb3RWaWV3
Q29udHJvbGxlciA9IG5pbDsKKyAgICAgICAgICAgIHJlZlRoaXMtPm1fcGxheWVyVmlld0NvbnRy
b2xsZXIgPSBuaWw7CisgICAgICAgICAgICByZWZUaGlzLT5tX3ZpZXdDb250cm9sbGVyID0gbmls
OworICAgICAgICAgICAgcmVmVGhpcy0+bV93aW5kb3cgPSBuaWw7CisgICAgICAgICAgICBpZiAo
cmVmVGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgICAgICAgICByZWZUaGlz
LT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgICAgICAg
ICAgY29tcGxldGlvbigpOworICAgICAgICB9XTsKKyAgICB9KTsKK30KKworCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgZXhp
dEZ1bGxzY3JlZW4oW10oKXt9KTsKK30KKworCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlcgoreworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBfbWVkaWFF
bGVtZW50OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2lu
dGVyZmFjZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IF9tb2RlbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgIHJldHVybiBzZWxmOwog
fQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBzZWxmLndpbmRvdyA9IG5pbDsKLSAgICBzZWxm
LnZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgPSBu
aWw7Ci0gICAgc2VsZi5wbGF5ZXJDb250cm9sbGVyID0gbmlsOwogICAgIF9tZWRpYUVsZW1lbnQg
PSBudWxscHRyOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTM3Niw0NyArNDkxLDI2IEBA
IHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0YXR1cykgewog
CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlTY3JlZW4gKilzY3JlZW4KIHsKLSAgICBpZiAo
IXNjcmVlbikKLSAgICAgICAgc2NyZWVuID0gW2NsYXNzVUlTY3JlZW4gbWFpblNjcmVlbl07Ci0K
LSAgICBzZWxmLnBsYXllckNvbnRyb2xsZXIgPSBbW1tXZWJBVlBsYXllckNvbnRyb2xsZXIgYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICBzZWxmLnBsYXllckNvbnRyb2xsZXIubWVkaWFF
bGVtZW50ID0gX21lZGlhRWxlbWVudDsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgPSBb
W1tjbGFzc0FWUGxheWVyVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgc2VsZi5wbGF5ZXJWaWV3Q29udHJvbGxlci5wbGF5ZXJDb250cm9sbGVyID0gKEFW
UGxheWVyQ29udHJvbGxlciAqKXNlbGYucGxheWVyQ29udHJvbGxlcjsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChbc2VsZi5wbGF5ZXJWaWV3Q29udHJvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHNldERlbGVnYXRlOildKQotICAgICAgICAgICAgc2VsZi5wbGF5ZXJWaWV3Q29udHJv
bGxlci5kZWxlZ2F0ZSA9IHNlbGYucGxheWVyQ29udHJvbGxlcjsKLSAgICAgICAKLSAgICAgICAg
c2VsZi52aWV3Q29udHJvbGxlciA9IFtbW2NsYXNzVUlWaWV3Q29udHJvbGxlciBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOwotICAgICAgICAKLSAgICAgICAgc2VsZi53aW5kb3cgPSBbW1tjbGFz
c1VJV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzY3JlZW4gYm91bmRzXV0gYXV0b3JlbGVh
c2VdOwotICAgICAgICBzZWxmLndpbmRvdy5iYWNrZ3JvdW5kQ29sb3IgPSBbY2xhc3NVSUNvbG9y
IGNsZWFyQ29sb3JdOwotICAgICAgICBzZWxmLndpbmRvdy5yb290Vmlld0NvbnRyb2xsZXIgPSAo
VUlWaWV3Q29udHJvbGxlciAqKXNlbGYudmlld0NvbnRyb2xsZXI7Ci0gICAgICAgIFtzZWxmLndp
bmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgICAgIAotICAgICAgICBbc2VsZi52aWV3Q29u
dHJvbGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXI6c2VsZi5wbGF5ZXJWaWV3Q29udHJvbGxlciBh
bmltYXRlZDpZRVMgY29tcGxldGlvbjpuaWxdOwotICAgIH0pOworICAgIFVOVVNFRF9QQVJBTShz
Y3JlZW4pOworICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQpOworICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5nZXQoKSk7CisgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVsLmdldCgpKTsKKyAgICBfbW9kZWwtPnNldE1lZGlhRWxl
bWVudChfbWVkaWFFbGVtZW50LmdldCgpKTsKKyAgICBfaW50ZXJmYWNlLT5lbnRlckZ1bGxzY3Jl
ZW4oKTsKIH0KIAogLSAodm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIHNlbGYucGxheWVyQ29u
dHJvbGxlci5tZWRpYUVsZW1lbnQgPSBudWxscHRyOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgW3NlbGYudmlld0NvbnRyb2xsZXIg
ZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246XnsKLSAgICAgICAg
ICAgIHNlbGYud2luZG93LmhpZGRlbiA9IFlFUzsKLSAgICAgICAgICAgIHNlbGYud2luZG93LnJv
b3RWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2VsZi5w
bGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICAgICAgICAgIHNlbGYudmlld0NvbnRyb2xs
ZXIgPSBuaWw7Ci0gICAgICAgICAgICBzZWxmLndpbmRvdyA9IG5pbDsKLSAgICAgICAgICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICAgICAgICAgIF9tZWRpYUVsZW1lbnQgPSBudWxscHRyOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgfV07CisgICAgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlciogc3Ryb25nU2VsZiA9IFtzZWxmIHJldGFpbl07CisgICAgCisg
ICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4oWz1dKCl7CisgICAgICAgIHN0cm9uZ1NlbGYt
Pl9tb2RlbC0+c2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgICAgICBzdHJvbmdTZWxmLT5f
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKKyAgICAgICAg
c3Ryb25nU2VsZi0+X21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0
cik7CisgICAgICAgIHN0cm9uZ1NlbGYtPl9tb2RlbCA9IG51bGxwdHI7CisgICAgICAgIHN0cm9u
Z1NlbGYtPl9pbnRlcmZhY2UgPSBudWxscHRyOworICAgICAgICBbc3Ryb25nU2VsZiByZWxlYXNl
XTsKICAgICB9KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222537</attachid>
            <date>2014-01-28 17:47:51 -0800</date>
            <delta_ts>2014-01-30 11:10:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127762-20140128174753.patch</filename>
            <type>text/plain</type>
            <size>57015</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc5NjM0MzQ5MWMxZTQ1
YTM1MjFkYmU3M2ZhMTk1MzA1NmRmMmIwNS4uYjQ3YzZkMmQyODc5MTY1MTU0ZDljZTY2OGE3Mjg2
ZjI0Y2ZmYTQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE0LTAxLTI4ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyIHNlcGFyYXRpbmcgQVZLaXQgZnJvbSBNZWRpYUVsZW1lbnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQgaW1wbGVtZW50YXRpb24gaW50byB0
d28gYWJzdHJhY3QgaW50ZXJmYWNlcyB3aXRoIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uczogCisg
ICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UsIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJBVktpdC5tbToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBpbml0XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGVhbGxv
Y10pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNj
cmVlbjpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVs
bHNjcmVlbl0pOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW06IEFkZGVkLgorICAgICAgICAo
TlNfRU5VTSk6CisgICAgICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBpbml0XSk6CisgICAg
ICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFW
UGxheWVyQ29udHJvbGxlciBmb3J3YXJkaW5nVGFyZ2V0Rm9yU2VsZWN0b3I6XSk6CisgICAgICAg
ICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBwbGF5ZXJWaWV3Q29udHJvbGxlcjpzaG91bGREaXNt
aXNzV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHBsYXk6
XSk6CisgICAgICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBwYXVzZTpdKToKKyAgICAgICAg
KC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHRvZ2dsZVBsYXliYWNrOl0pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckNvbnRyb2xsZXIgaXNQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFWUGxheWVy
Q29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoK1tXZWJBVlBsYXllckNvbnRyb2xs
ZXIga2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFW
UGxheWVyQ29udHJvbGxlciBzZWVrVG9UaW1lOl0pOgorICAgICAgICAoOm1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9MYXllcik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmguCisgICAgICAgIChX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsU2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpkaWRFeGl0RnVsbHNjcmVlbik6
CisKIDIwMTQtMDEtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIElEQjogUmVtb3ZlIHVudXNlZCBjb25jZXB0IG9mICJjdXJzb3IgcHJlZmV0Y2giCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MWQ1MDA1NDRiNmUzMDE3Yjc0ZjMzNDhhZjdmYTIyNTgwMmNkMTQxMC4uMGYwNTM0NDEwZTg0MWQz
OTIzZjVmNjM5YjIwMzExZDRkYzllOGFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI5Niw2ICsxMjk2LDEyIEBACiAJCTNG
MkIzM0VGMTY1QUYxNTYwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0YyQjMzRUExNjVBRjE1
NTAwRTM5ODdDIC8qIEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87IH07CiAJCTNGNDJCMzFE
MTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDJCMzFCMTg4
MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRjQyQjMxRTE4
ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgx
MTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsg
fTsKKwkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzRkJDNEFFQzE4OTg4MTBF
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRUYxODk4ODEzODAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRUQxODk4ODEzODAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OworCQkzRkJDNEFGMDE4
OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVFMTg5
ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNGQkM0QUYz
MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5
ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsg
fTsKKwkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE2MTU5
RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovOyB9OwogCQkzRkZG
RjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZGRjlBNzE1OUQ5QTU1MDAy
MEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87IH07CiAJCTNGRkZGOUFEMTU5RDlC
MDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8q
IFZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi87IH07CkBAIC04MTE4LDYgKzgxMjQsMTIgQEAK
IAkJM0YyQjMzRUExNjVBRjE1NTAwRTM5ODdDIC8qIEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFB
QyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lmg7IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBhdGggPSBp
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFF
RDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1
NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBwYXRo
ID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3
cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0
Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5
QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0
U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc5MzgsNiArMTc5NTAsMTIgQEAKIAkJCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8sCiAJCQkJM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLywKIAkJ
CQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovLAorCQkJCTNGQkM0
QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJ
CTNGQkM0QUVCMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uu
aCAqLywKKwkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmggKi8sCisJCQkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
LAorCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMjM1MjUsNiArMjM1NDMsNyBAQAogCQkJCUE3NEJCNzZCMTNCREE4NjMw
MEZGN0JGMCAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAwNUU2NERCIC8qIEV4Y2VwdGlvbkhlYWRlcnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBDMTQ1QUJD
MTMwMDVFNjREQiAvKiBFeGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MDI0NTc1MjE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjM4MDksNiArMjM4MjgsNyBAQAogCQkJCTk3N0IzODc1MTIyODgzRTkwMEI4
MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg3NjEy
Mjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MTM2OUQ4MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MU2VsZWN0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBODBDRDYzMzEwMDBGQURBNzUg
LyogSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRENFMTJGMEUy
ODMwMEMxMzM3OSAvKiBIVE1MU291cmNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4
QUQ2NzUxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDAyMyw2ICsyNDA0Myw3IEBACiAJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYw
NzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1
ODEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0ZCQzRBRjAxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVEMjEyQjAz
Rjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRkIxQTY2
MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1OUE4NjAwODExOURBRkExMDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MjM1LDYgKzI0MjU2LDcgQEAKIAkJCQk2RUJGMEU3NzEy
QTk4Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzMUM0RTU0MTZFMDJCNDAwMDJGNzk1NyAvKiBKU09FU1RleHR1cmVIYWxmRmxvYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc3QTE3QUE3MTJGMjhCMkEwMDRFMDJGNiAvKiBKU09FU1ZlcnRleEFy
cmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZERjZCQUY5MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBOTMyNjcxNjcwM0JBOTAwODk4MkRDIC8qIEpTT2Zm
bGluZUF1ZGlvQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRFQTYyNDMxNTIxMDJFMjAw
NDc5REYwIC8qIEpTT3NjaWxsYXRvck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2OTMsNiAr
Mjc3MTUsNyBAQAogCQkJCTI0RDkxMjk1MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMkY2OTgwQUI3NzE5NTAwMjJF
RkFEIC8qIEpTU1ZHQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5QzMxODExMDZF
MDAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkz
RkJDNEFFRjE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0QzNjBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDM4
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJGQTNEM0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWRCb29sZWFuLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjg2ODUsNiArMjg3MDgsNyBAQAogCQkJCUIyNTU5OTg0MEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUVFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQ3MTlFQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxQTE4ODMyMkVC
MDBDOTU0QjUgLyogSlNUb3VjaExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NEZFMkIx
ODYzODcwRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJTW9kdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3OUYxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUxpZ2h0RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAppbmRleCA4NDJhY2E5
ZjZlZWFlNzcyNzlkNTA3NTcwNjViMmQ1YTc0ZGFkZjM3Li4wMjg3MTg2NjI0YTBjNWVmMTgxMTNk
ZTU0ZTY4NTMwYTk3MWE5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oCkBAIC0y
OCwxOSArMjgsMTMgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CiAKLUBjbGFzcyBVSVNj
cmVlbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLX0K
K09CSkNfQ0xBU1MgVUlTY3JlZW47CiAKIEBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciA6IE5TT2JqZWN0Ci0KIC0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQ7CiAtIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiltZWRpYUVsZW1lbnQ7Ci0KIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVNjcmVlbiAq
KXNjcmVlbjsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQppbmRleCAyYzQ3NTU5NTQzYzM0MWNkZjg3YzYzZWE0NmI3YzVjMmY3NGE4
MWMxLi43NDlmMDQwZTc0Yzc1NmU4YTZmYzQ5MWMxZWM5YmYwZmI4ZTk5N2NhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTI5LDMxMiArMjksMTggQEAKIAogI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmgiCiAKLSNpbXBvcnQgIkRPTUV2ZW50
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPENvcmVNZWRpYS9DTVRp
bWUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50
TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1l
bnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvT2JqQ0V2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckVsZW1lbnQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVNPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQotU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKLQotU09GVF9MSU5LX0ZS
QU1FV09SSyhBVktpdCkKLVNPRlRfTElOS19DTEFTUyhBVktpdCwgQVZQbGF5ZXJDb250cm9sbGVy
KQotU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVlBsYXllclZpZXdDb250cm9sbGVyKQotU09GVF9M
SU5LX0NMQVNTKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJ
S2l0KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNjcmVlbikKLVNPRlRfTElOS19DTEFTUyhV
SUtpdCwgVUlXaW5kb3cpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlldykKLVNPRlRfTElO
S19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwg
VUlDb2xvcikKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhDb3JlTWVkaWEpCi1TT0ZUX0xJTksoQ29y
ZU1lZGlhLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMsIENNVGltZSwgKEZsb2F0NjQgc2Vjb25kcywg
aW50MzJfdCBwcmVmZXJyZWRUaW1lU2NhbGUpLCAoc2Vjb25kcywgcHJlZmVycmVkVGltZVNjYWxl
KSkKLVNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUdldFNlY29uZHMsIEZsb2F0NjQsIChDTVRp
bWUgdGltZSksICh0aW1lKSkKLQotQGludGVyZmFjZSBBVlZhbHVlVGltaW5nIDogTlNPYmplY3Qg
PE5TQ29kaW5nLCBOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmc+Ci0rIChpZCl2YWx1ZVRpbWlu
Z1dpdGhBbmNob3JWYWx1ZTooZG91YmxlKWFuY2hvclZhbHVlIGFuY2hvclRpbWVTdGFtcDooTlNU
aW1lSW50ZXJ2YWwpIHRpbWVTdGFtcCByYXRlOihkb3VibGUpcmF0ZTsKLSsgKE5TVGltZUludGVy
dmFsKWN1cnJlbnRUaW1lU3RhbXA7Ci1AZW5kCi0KLUBwcm90b2NvbCBBVlBsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUKLUBlbmQKLQotQHByb3RvY29sIEFWUGxheWVyTGF5ZXIKLUBlbmQKLQot
QGludGVyZmFjZSBBVlBsYXllckNvbnRyb2xsZXIgOiBVSVJlc3BvbmRlcgotQGVuZAotCi1AaW50
ZXJmYWNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCi1AcHJvcGVy
dHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4g
ZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBBVlBsYXllckNvbnRyb2xs
ZXIgKnBsYXllckNvbnRyb2xsZXI7Ci1AZW5kCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNzYWxSZWFzb24pIHsKLSAgICBBVlBsYXllclZp
ZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uRG9uZUJ1dHRvblRhcHBlZCwKLSAgICBBVlBsYXll
clZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2Vp
dmVkLAotICAgIEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNzYWxSZWFzb25FcnJvcgotfSBO
U19FTlVNX0FWQUlMQUJMRV9JT1MoOF8wKTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
QVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzKSB7Ci0gICAgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVz
VW5rbm93biwKLSAgICBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNMb2FkaW5nLAotICAgIEFWUGxh
eWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5LAotICAgIEFWUGxheWVyQ29udHJvbGxlclN0
YXR1c0ZhaWxlZAotfSBOU19FTlVNX0FWQUlMQUJMRSgxMF8xMCwgOF8wKTsKLQotQGludGVyZmFj
ZSBXZWJBVlBsYXllckNvbnRyb2xsZXIgOiBOU09iamVjdCA8RE9NRXZlbnRMaXN0ZW5lciwgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPgotCi1AcHJvcGVydHkocmV0YWluKSBBVlBsYXll
ckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKLUBwcm9wZXJ0eShyZXRhaW4pIENB
TGF5ZXI8QVZQbGF5ZXJMYXllcj4gKnBsYXllckxheWVyOwotCi1AcHJvcGVydHkgQk9PTCBjYW5Q
bGF5OwotQHByb3BlcnR5KGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKLUBwcm9wZXJ0
eSBCT09MIGNhblBhdXNlOwotQHByb3BlcnR5IEJPT0wgY2FuVG9nZ2xlUGxheWJhY2s7Ci1AcHJv
cGVydHkgZG91YmxlIHJhdGU7Ci1AcHJvcGVydHkgQk9PTCBjYW5TZWVrOwotQHByb3BlcnR5IE5T
VGltZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKLUBwcm9wZXJ0eSBOU1NpemUgY29udGVudERp
bWVuc2lvbnM7Ci1AcHJvcGVydHkgQk9PTCBoYXNFbmFibGVkQXVkaW87Ci1AcHJvcGVydHkgQk9P
TCBoYXNFbmFibGVkVmlkZW87Ci1AcHJvcGVydHkgTlNUaW1lSW50ZXJ2YWwgbWluVGltZTsKLUBw
cm9wZXJ0eSBOU1RpbWVJbnRlcnZhbCBtYXhUaW1lOwotQHByb3BlcnR5IE5TVGltZUludGVydmFs
IGNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzOwotQHByb3BlcnR5KHJldGFpbikgTlNBcnJh
eSAqbG9hZGVkVGltZVJhbmdlczsKLUBwcm9wZXJ0eSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXMg
c3RhdHVzOwotQHByb3BlcnR5KHJldGFpbikgQVZWYWx1ZVRpbWluZyAqdGltaW5nOwotCi0tICh2
b2lkKWhhbmRsZUV2ZW50OihET01FdmVudCAqKWV2dDsKLQotLSAoQk9PTClwbGF5ZXJWaWV3Q29u
dHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNo
b3VsZERpc21pc3NXaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVh
c29uKXJlYXNvbjsKLQotQGVuZAotCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllckNvbnRy
b2xsZXIKLXsKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsKLSAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gX2xpc3RlbmVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
c2VsZjsKLSAgICAKLSAgICBpbml0QVZQbGF5ZXJDb250cm9sbGVyKCk7Ci0gICAgc2VsZi5wbGF5
ZXJDb250cm9sbGVyUHJveHkgPSBbW2NsYXNzQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0
XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgc2VsZi5w
bGF5ZXJDb250cm9sbGVyUHJveHkgPSBuaWw7Ci0gICAgc2VsZi5wbGF5ZXJMYXllciA9IG5pbDsK
LSAgICBzZWxmLmxvYWRlZFRpbWVSYW5nZXMgPSBuaWw7Ci0gICAgc2VsZi50aW1pbmcgPSBuaWw7
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClmb3J3YXJkaW5nVGFyZ2V0Rm9yU2Vs
ZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rvcik7Ci0gICAg
cmV0dXJuIHNlbGYucGxheWVyQ29udHJvbGxlclByb3h5OwotfQotCi0tIChCT09MKXBsYXllclZp
ZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2hvdWxkRGlzbWlzc1dpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNz
YWxSZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVy
KTsKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKLQotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBfbWVkaWFFbGVtZW50LT5wYXVzZSgpOwotICAgICAgICBfbWVkaWFFbGVtZW50LT5leGl0
RnVsbHNjcmVlbigpOwotICAgIH0pOwotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClwbGF5
OihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cGxheSgpOwotICAgIH0pOwotfQotCi0tICh2
b2lkKXBhdXNlOihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICB9KTsK
LX0KLQotLSAodm9pZCl0b2dnbGVQbGF5YmFjazooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbmRlcik7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgIH0pOwotfQotCi0tIChCT09MKWlzUGxheWluZwotewot
ICAgIHJldHVybiBbc2VsZiByYXRlXSAhPSAwOwotfQotCi0tICh2b2lkKXNldFBsYXlpbmc6KEJP
T0wpcGxheWluZwotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAocGxheWluZykK
LSAgICAgICAgICAgIF9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICB9KTsKLX0KLQotKyAoTlNTZXQgKilr
ZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1BsYXlpbmcKLXsKLSAgICByZXR1cm4gW05TU2V0IHNl
dFdpdGhPYmplY3Q6QCJyYXRlIl07Ci19Ci0KLS0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50
ZXJ2YWwpdGltZQotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBfbWVkaWFFbGVtZW50
LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZCl1cGRhdGVUaW1p
bmdXaXRoQ3VycmVudFRpbWU6KE5TVGltZUludGVydmFsKWN1cnJlbnRUaW1lCi17Ci0gICAgTlNU
aW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gKCFbc2VsZiByYXRlXSkgPyBOQU4gOiBbY2xh
c3NBVlZhbHVlVGltaW5nIGN1cnJlbnRUaW1lU3RhbXBdOwotICAgIEFWVmFsdWVUaW1pbmcgKnRp
bWluZyA9IFtjbGFzc0FWVmFsdWVUaW1pbmcgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3Vy
cmVudFRpbWUKLSAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsK
LSAgICBbc2VsZiBzZXRUaW1pbmc6dGltaW5nXTsKLX0KLQotLSAoZG91YmxlKWVmZmVjdGl2ZVJh
dGUKLXsKLSAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+aXNQbGF5aW5nKCkgPyBfbWVkaWFFbGVt
ZW50LT5wbGF5YmFja1JhdGUoKSA6IDAuOwotfQotCi0tICh2b2lkKXVwZGF0ZUR1cmF0aW9uCi17
Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFsbCB0aGVz
ZQotICAgIE5TVGltZUludGVydmFsIGR1cmF0aW9uID0gX21lZGlhRWxlbWVudC0+ZHVyYXRpb24o
KTsKLSAgICBzZWxmLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIHNlbGYubWF4VGlt
ZSA9IGR1cmF0aW9uOwotICAgIHNlbGYuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBk
dXJhdGlvbjsKLSAgICBzZWxmLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKGR1cmF0aW9uKV07
Ci19Ci0KLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihQYXNzUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+KXBhc3NlZE1lZGlhRWxlbWVudAotewotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBt
ZWRpYUVsZW1lbnQgPSBwYXNzZWRNZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoX21lZGlhRWxlbWVu
dCA9PSBtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX21lZGlh
RWxlbWVudCAmJiBfbGlzdGVuZXIpCi0gICAgewotICAgICAgICBfbWVkaWFFbGVtZW50LT5yZW1v
dmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LCBfbGlzdGVu
ZXIuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkucGF1c2VFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxzZSk7Ci0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBs
YXlFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQt
PnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwgX2xpc3Rl
bmVyLmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxz
ZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChfbWVkaWFFbGVtZW50KQotICAgIHsKLSAgICAgICAg
W3NlbGYucGxheWVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgICAgICBfbWVkaWFF
bGVtZW50LT5yZXR1cm5QbGF0Zm9ybUxheWVyKHNlbGYucGxheWVyTGF5ZXIpOwotICAgICAgICBz
ZWxmLnBsYXllckxheWVyID0gbmlsOwotICAgIH0KLSAgICAKLSAgICBfbWVkaWFFbGVtZW50ID0g
bWVkaWFFbGVtZW50OwotICAgIF9saXN0ZW5lciA9IG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCFf
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfbGlzdGVuZXIgPSBPYmpDRXZl
bnRMaXN0ZW5lcjo6d3JhcChzZWxmKTsKLQotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsIF9saXN0ZW5lciwgZmFsc2Up
OwotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhdXNl
RXZlbnQsIF9saXN0ZW5lciwgZmFsc2UpOwotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCwgX2xpc3RlbmVyLCBmYWxzZSk7Ci0gICAgX21l
ZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50
LCBfbGlzdGVuZXIsIGZhbHNlKTsKLSAgICBfbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQsIF9saXN0ZW5lciwgZmFsc2UpOwotCi0gICAg
W3NlbGYgdXBkYXRlRHVyYXRpb25dOwotICAgIHNlbGYuY2FuUGxheSA9IFlFUzsKLSAgICBzZWxm
LmNhblBhdXNlID0gWUVTOwotICAgIHNlbGYuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAg
c2VsZi5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgc2VsZi5jYW5TZWVrID0gWUVTOwotICAg
IHNlbGYubWluVGltZSA9IDA7Ci0gICAgc2VsZi5yYXRlID0gW3NlbGYgZWZmZWN0aXZlUmF0ZV07
Ci0gICAgc2VsZi5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsK
LQotICAgIHNlbGYucGxheWVyTGF5ZXIgPSAoQ0FMYXllcjxBVlBsYXllckxheWVyPiAqKV9tZWRp
YUVsZW1lbnQtPmJvcnJvd1BsYXRmb3JtTGF5ZXIoKTsKLSAgICBBU1NFUlQoW3NlbGYucGxheWVy
TGF5ZXIgaXNLaW5kT2ZDbGFzczpjbGFzc0FWUGxheWVyTGF5ZXJdKTsKLSAgICBbc2VsZi5wbGF5
ZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBbc2VsZiB1cGRhdGVUaW1pbmdX
aXRoQ3VycmVudFRpbWU6X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKV07Ci0KLSAgICBpZiAo
aXNIVE1MVmlkZW9FbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxW
aWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChfbWVkaWFFbGVt
ZW50LmdldCgpKTsKLSAgICAgICAgc2VsZi5oYXNFbmFibGVkVmlkZW8gPSBZRVM7Ci0gICAgICAg
IHNlbGYuY29udGVudERpbWVuc2lvbnMgPSBDR1NpemVNYWtlKHZpZGVvRWxlbWVudC0+dmlkZW9X
aWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwotICAgIH0KLX0KLQotLSAodm9p
ZCloYW5kbGVFdmVudDooRE9NRXZlbnQgKilldm50Ci17Ci0gICAgRXZlbnQqIGV2ZW50ID0gY29y
ZShldm50KTsKLSAgICAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0
ZXJzOCgpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5kdXJhdGlv
bmNoYW5nZUV2ZW50KQotICAgICAgICBbc2VsZiB1cGRhdGVEdXJhdGlvbl07Ci0gICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAotICAgICAgICB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50KQotICAgICAgICBzZWxmLnJh
dGUgPSBbc2VsZiBlZmZlY3RpdmVSYXRlXTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpCi0gICAgICAgIFtzZWxmIHVwZGF0ZVRpbWlu
Z1dpdGhDdXJyZW50VGltZTpfbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpXTsKLX0KLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgKCkgPFVJVmlld0Nv
bnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+Ci1AcHJvcGVydHkocmV0YWluKSBVSVdpbmRv
dyAqd2luZG93OwotQHByb3BlcnR5KHJldGFpbikgVUlWaWV3Q29udHJvbGxlciAqdmlld0NvbnRy
b2xsZXI7Ci1AcHJvcGVydHkocmV0YWluKSBBVlBsYXllclZpZXdDb250cm9sbGVyICpwbGF5ZXJW
aWV3Q29udHJvbGxlcjsKLUBwcm9wZXJ0eShyZXRhaW4pIFdlYkFWUGxheWVyQ29udHJvbGxlciAq
cGxheWVyQ29udHJvbGxlcjsKLUBlbmQKLQogQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIKIHsKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxl
bWVudDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9pbnRl
cmZhY2U7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBf
bW9kZWw7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0zNDIsMjQgKzQ4LDExIEBAIHR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0YXR1cykgewogICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
aW5pdFVJU2NyZWVuKCk7Ci0gICAgaW5pdFVJVmlldygpOwotICAgIGluaXRVSUNvbG9yKCk7Ci0g
ICAgaW5pdFVJV2luZG93KCk7Ci0gICAgaW5pdEFWUGxheWVyQ29udHJvbGxlcigpOwotICAgIGlu
aXRBVlBsYXllclZpZXdDb250cm9sbGVyKCk7Ci0gICAgaW5pdEFWVmFsdWVUaW1pbmcoKTsKLSAg
ICBpbml0VUlWaWV3Q29udHJvbGxlcigpOwotICAgIGluaXRBVlBsYXllckxheWVyKCk7CiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIHNlbGYud2luZG93ID0g
bmlsOwotICAgIHNlbGYudmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgc2VsZi5wbGF5ZXJWaWV3
Q29udHJvbGxlciA9IG5pbDsKLSAgICBzZWxmLnBsYXllckNvbnRyb2xsZXIgPSBuaWw7CiAgICAg
X21lZGlhRWxlbWVudCA9IG51bGxwdHI7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMzc2
LDQ3ICs2OSwyOCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBBVlBsYXllckNvbnRyb2xs
ZXJTdGF0dXMpIHsKIAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJU2NyZWVuICopc2NyZWVu
CiB7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHNjcmVlbiA9IFtjbGFzc1VJU2NyZWVuIG1h
aW5TY3JlZW5dOwotCi0gICAgc2VsZi5wbGF5ZXJDb250cm9sbGVyID0gW1tbV2ViQVZQbGF5ZXJD
b250cm9sbGVyIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgc2VsZi5wbGF5ZXJDb250
cm9sbGVyLm1lZGlhRWxlbWVudCA9IF9tZWRpYUVsZW1lbnQ7Ci0KLSAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBzZWxmLnBsYXllclZpZXdD
b250cm9sbGVyID0gW1tbY2xhc3NBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07Ci0gICAgICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIucGxheWVyQ29u
dHJvbGxlciA9IChBVlBsYXllckNvbnRyb2xsZXIgKilzZWxmLnBsYXllckNvbnRyb2xsZXI7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoW3NlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXREZWxlZ2F0ZTopXSkKLSAgICAgICAgICAgIHNlbGYucGxh
eWVyVmlld0NvbnRyb2xsZXIuZGVsZWdhdGUgPSBzZWxmLnBsYXllckNvbnRyb2xsZXI7Ci0gICAg
ICAgCi0gICAgICAgIHNlbGYudmlld0NvbnRyb2xsZXIgPSBbW1tjbGFzc1VJVmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgCi0gICAgICAgIHNlbGYud2lu
ZG93ID0gW1tbY2xhc3NVSVdpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2NyZWVuIGJvdW5k
c11dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgc2VsZi53aW5kb3cuYmFja2dyb3VuZENvbG9yID0g
W2NsYXNzVUlDb2xvciBjbGVhckNvbG9yXTsKLSAgICAgICAgc2VsZi53aW5kb3cucm9vdFZpZXdD
b250cm9sbGVyID0gKFVJVmlld0NvbnRyb2xsZXIgKilzZWxmLnZpZXdDb250cm9sbGVyOwotICAg
ICAgICBbc2VsZi53aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgICAgICAKLSAgICAgICAg
W3NlbGYudmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyOnNlbGYucGxheWVyVmll
d0NvbnRyb2xsZXIgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKLSAgICB9KTsKKyAgICBV
TlVTRURfUEFSQU0oc2NyZWVuKTsKKyAgICBfaW50ZXJmYWNlID0gYWRvcHRSZWYobmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KTsKKyAgICBfbW9kZWwgPSBhZG9wdFJlZihuZXcg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQpOworICAgIF9tb2RlbC0+c2V0V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZhY2UuZ2V0KCkpOworICAgIF9pbnRlcmZh
Y2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9tb2RlbC5nZXQoKSk7CisgICAgX21vZGVs
LT5zZXRNZWRpYUVsZW1lbnQoX21lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgX2ludGVyZmFjZS0+
ZW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KIHsKLSAgICBz
ZWxmLnBsYXllckNvbnRyb2xsZXIubWVkaWFFbGVtZW50ID0gbnVsbHB0cjsKLQotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIFtzZWxmLnZp
ZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9u
Ol57Ci0gICAgICAgICAgICBzZWxmLndpbmRvdy5oaWRkZW4gPSBZRVM7Ci0gICAgICAgICAgICBz
ZWxmLndpbmRvdy5yb290Vmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgICAgICAgICBzZWxm
LnZpZXdDb250cm9sbGVyID0gbmlsOwotICAgICAgICAgICAgc2VsZi53aW5kb3cgPSBuaWw7Ci0g
ICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICBfbWVkaWFFbGVtZW50
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgIH1dOwor
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIqIHN0cm9uZ1NlbGYgPSBbc2VsZiByZXRh
aW5dOworICAgIAorICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKFs9XSgpeworICAgICAg
ICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9tb2RlbC0+c2V0TWVk
aWFFbGVtZW50KG51bGxwdHIpOworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2ludGVyZmFjZS0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7CisgICAgICAgICAgICBzdHJvbmdT
ZWxmLT5fbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRyKTsKKyAg
ICAgICAgICAgIHN0cm9uZ1NlbGYtPl9tb2RlbCA9IG51bGxwdHI7CisgICAgICAgICAgICBzdHJv
bmdTZWxmLT5faW50ZXJmYWNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFtzdHJvbmdTZWxmIHJl
bGVhc2VdOworICAgICAgICB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBkZDk3YmM1YjFmZWMwM2RhN2UxOTA3MGQ1ZmNlYjY1YzdmZTcxNmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Vf
aAorI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VfaAorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorLy8gQ2hhbmdlcyBoZXJlIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCitjbGFzcyBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91Ymxl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGlt
ZSwgZG91YmxlIGFuY2hvclRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXIoUGxhdGZvcm1MYXllciopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllcklEKHVpbnQzMl90KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhp
dEZ1bGxzY3JlZW4oKSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZTE0NjgyMTYwZmUzNTA2MDY4NzJkOWQ5MDRl
OWZlNmEzOWQ1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0X2gKKyNkZWZpbmUgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29u
dHJvbGxlcjsKK09CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1Mg
VUlWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlXaW5kb3c7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOworICAgIAorY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4geworICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJv
bGxlcjsKKyAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3
Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJv
bGxlcjsKKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2luZG93OworICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOworICAgIAorcHVibGljOgorICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CisgICAgdmlydHVhbCB+V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKSB7IH0KKyAgICB2b2lkIHNldFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgCisgICAgdm9pZCBz
ZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91
YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9MYXllcihQbGF0Zm9ybUxheWVy
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWaWRlb0xheWVySUQodWludDMyX3QgdmlkZW9Db250
ZXh0SUQpIG92ZXJyaWRlIHtVTlVTRURfUEFSQU0odmlkZW9Db250ZXh0SUQpO307CisgICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbihz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbik7CisgICAgdm9pZCBleGl0RnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb24pOworfTsKKworfQorCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTc2NGU4MmU1ZDRhNWQwZDRlNzBmNTVj
MDJmYzUyYWY4M2I3NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCkBAIC0wLDAgKzEsMzE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW1w
b3J0ICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCA8Q29yZU1lZGlhL0NNVGltZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1
bi5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NPRlRfTElOS19GUkFN
RVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5
ZXJMYXllcikKKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVktpdCkKK1NPRlRfTElOS19DTEFTUyhB
VktpdCwgQVZQbGF5ZXJDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVlBsYXll
clZpZXdDb250cm9sbGVyKQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVlZhbHVlVGltaW5nKQor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNj
cmVlbikKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlXaW5kb3cpCitTT0ZUX0xJTktfQ0xBU1Mo
VUlLaXQsIFVJVmlldykKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikK
K1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikKKworU09GVF9MSU5LX0ZSQU1FV09SSyhD
b3JlTWVkaWEpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMsIENN
VGltZSwgKEZsb2F0NjQgc2Vjb25kcywgaW50MzJfdCBwcmVmZXJyZWRUaW1lU2NhbGUpLCAoc2Vj
b25kcywgcHJlZmVycmVkVGltZVNjYWxlKSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUdl
dFNlY29uZHMsIEZsb2F0NjQsIChDTVRpbWUgdGltZSksICh0aW1lKSkKKworQGludGVyZmFjZSBB
VlZhbHVlVGltaW5nIDogTlNPYmplY3QgPE5TQ29kaW5nLCBOU0NvcHlpbmcsIE5TTXV0YWJsZUNv
cHlpbmc+CisrIChpZCl2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTooZG91YmxlKWFuY2hvclZh
bHVlIGFuY2hvclRpbWVTdGFtcDooTlNUaW1lSW50ZXJ2YWwpIHRpbWVTdGFtcCByYXRlOihkb3Vi
bGUpcmF0ZTsKKysgKE5TVGltZUludGVydmFsKWN1cnJlbnRUaW1lU3RhbXA7CitAZW5kCisKK0Bw
cm90b2NvbCBBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKK0BlbmQKKworQHByb3RvY29s
IEFWUGxheWVyTGF5ZXIKK0BlbmQKKworQGludGVyZmFjZSBBVlBsYXllckNvbnRyb2xsZXIgOiBV
SVJlc3BvbmRlcgorQGVuZAorCitAaW50ZXJmYWNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXIgOiBV
SVZpZXdDb250cm9sbGVyCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEFWUGxheWVy
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
c3Ryb25nKSBBVlBsYXllckNvbnRyb2xsZXIgKnBsYXllckNvbnRyb2xsZXI7CitAZW5kCisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNzYWxS
ZWFzb24pIHsKKyAgICBBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uRG9uZUJ1
dHRvblRhcHBlZCwKKyAgICBBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uUmVt
b3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkLAorICAgIEFWUGxheWVyVmlld0NvbnRyb2xsZXJE
aXNtaXNzYWxSZWFzb25FcnJvcgorfSBOU19FTlVNX0FWQUlMQUJMRV9JT1MoOF8wKTsKKwordHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzKSB7CisgICAg
QVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzVW5rbm93biwKKyAgICBBVlBsYXllckNvbnRyb2xsZXJT
dGF0dXNMb2FkaW5nLAorICAgIEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5LAor
ICAgIEFWUGxheWVyQ29udHJvbGxlclN0YXR1c0ZhaWxlZAorfSBOU19FTlVNX0FWQUlMQUJMRSgx
MF8xMCwgOF8wKTsKKworQGludGVyZmFjZSBXZWJBVlBsYXllckNvbnRyb2xsZXIgOiBOU09iamVj
dCA8QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPgorCitAcHJvcGVydHkocmV0YWluKSBB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKK0Bwcm9wZXJ0eShyZXRh
aW4pIENBTGF5ZXI8QVZQbGF5ZXJMYXllcj4gKnBsYXllckxheWVyOworQHByb3BlcnR5KGFzc2ln
bikgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwqIGRlbGVnYXRlOworCitAcHJvcGVydHkgQk9PTCBj
YW5QbGF5OworQHByb3BlcnR5KGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKK0Bwcm9w
ZXJ0eSBCT09MIGNhblBhdXNlOworQHByb3BlcnR5IEJPT0wgY2FuVG9nZ2xlUGxheWJhY2s7CitA
cHJvcGVydHkgZG91YmxlIHJhdGU7CitAcHJvcGVydHkgQk9PTCBjYW5TZWVrOworQHByb3BlcnR5
IE5TVGltZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKK0Bwcm9wZXJ0eSBOU1NpemUgY29udGVu
dERpbWVuc2lvbnM7CitAcHJvcGVydHkgQk9PTCBoYXNFbmFibGVkQXVkaW87CitAcHJvcGVydHkg
Qk9PTCBoYXNFbmFibGVkVmlkZW87CitAcHJvcGVydHkgTlNUaW1lSW50ZXJ2YWwgbWluVGltZTsK
K0Bwcm9wZXJ0eSBOU1RpbWVJbnRlcnZhbCBtYXhUaW1lOworQHByb3BlcnR5IE5TVGltZUludGVy
dmFsIGNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzOworQHByb3BlcnR5KHJldGFpbikgTlNB
cnJheSAqbG9hZGVkVGltZVJhbmdlczsKK0Bwcm9wZXJ0eSBBVlBsYXllckNvbnRyb2xsZXJTdGF0
dXMgc3RhdHVzOworQHByb3BlcnR5KHJldGFpbikgQVZWYWx1ZVRpbWluZyAqdGltaW5nOworCist
IChCT09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxh
eWVyVmlld0NvbnRyb2xsZXIgc2hvdWxkRGlzbWlzc1dpdGhSZWFzb246KEFWUGxheWVyVmlld0Nv
bnRyb2xsZXJEaXNtaXNzYWxSZWFzb24pcmVhc29uOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBVlBsYXllckNvbnRyb2xsZXIKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgCisg
ICAgaW5pdEFWUGxheWVyQ29udHJvbGxlcigpOworICAgIHNlbGYucGxheWVyQ29udHJvbGxlclBy
b3h5ID0gW1tjbGFzc0FWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNlbGYuZGVsZWdhdGUgPSBuaWw7
CisgICAgc2VsZi5wbGF5ZXJDb250cm9sbGVyUHJveHkgPSBuaWw7CisgICAgc2VsZi5wbGF5ZXJM
YXllciA9IG5pbDsKKyAgICBzZWxmLmxvYWRlZFRpbWVSYW5nZXMgPSBuaWw7CisgICAgc2VsZi50
aW1pbmcgPSBuaWw7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChpZClmb3J3YXJkaW5n
VGFyZ2V0Rm9yU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIFVOVVNFRF9QQVJBTShzZWxl
Y3Rvcik7CisgICAgcmV0dXJuIHNlbGYucGxheWVyQ29udHJvbGxlclByb3h5OworfQorCistIChC
T09MKXBsYXllclZpZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVy
Vmlld0NvbnRyb2xsZXIgc2hvdWxkRGlzbWlzc1dpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRy
b2xsZXJEaXNtaXNzYWxSZWFzb24pcmVhc29uCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZp
ZXdDb250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKKyAgICBzZWxmLmRlbGVn
YXRlLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZv
aWQpcGxheTooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgc2Vs
Zi5kZWxlZ2F0ZS0+cGxheSgpOworfQorCistICh2b2lkKXBhdXNlOihpZClzZW5kZXIKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBzZWxmLmRlbGVnYXRlLT5wYXVzZSgpOworfQor
CistICh2b2lkKXRvZ2dsZVBsYXliYWNrOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0o
c2VuZGVyKTsKKyAgICBzZWxmLmRlbGVnYXRlLT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKworLSAo
Qk9PTClpc1BsYXlpbmcKK3sKKyAgICByZXR1cm4gW3NlbGYgcmF0ZV0gIT0gMDsKK30KKworLSAo
dm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcKK3sKKyAgICBpZiAocGxheWluZykKKyAgICAg
ICAgc2VsZi5kZWxlZ2F0ZS0+cGxheSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWxm
LmRlbGVnYXRlLT5wYXVzZSgpOworICAgICAgICAgICAgfQorCisrIChOU1NldCAqKWtleVBhdGhz
Rm9yVmFsdWVzQWZmZWN0aW5nUGxheWluZworeworICAgIHJldHVybiBbTlNTZXQgc2V0V2l0aE9i
amVjdDpAInJhdGUiXTsKK30KKworLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZhbCl0
aW1lCit7CisgICAgc2VsZi5kZWxlZ2F0ZS0+c2Vla1RvVGltZSh0aW1lKTsKK30KKworQGVuZAor
CitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQoKQorOm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cikKK3sKKyAgICBp
bml0VUlTY3JlZW4oKTsKKyAgICBpbml0VUlWaWV3KCk7CisgICAgaW5pdFVJQ29sb3IoKTsKKyAg
ICBpbml0VUlXaW5kb3coKTsKKyAgICBpbml0QVZQbGF5ZXJDb250cm9sbGVyKCk7CisgICAgaW5p
dEFWUGxheWVyVmlld0NvbnRyb2xsZXIoKTsKKyAgICBpbml0QVZWYWx1ZVRpbWluZygpOworICAg
IGluaXRVSVZpZXdDb250cm9sbGVyKCk7CisgICAgaW5pdEFWUGxheWVyTGF5ZXIoKTsKKyAgICAK
KyAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBbW1tXZWJBVlBsYXllckNvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwqIG1vZGVsKQoreworICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgPSBtb2RlbDsKKyAgICBt
X3BsYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlv
bihkb3VibGUgZHVyYXRpb24pCit7CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2Yg
ZHVyYXRpb24gZm9yIGFsbCB0aGVzZQorICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS5jb250
ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkubWF4
VGltZSA9IGR1cmF0aW9uOworICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS5jb250ZW50RHVy
YXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworICAgIG1fcGxheWVyQ29udHJvbGxlci5n
ZXQoKS5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChkdXJhdGlvbildOworICAgIAorICAgIC8v
IEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJl
YWR5LgorICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS5jYW5QbGF5ID0gWUVTOworICAgIG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKS5jYW5QYXVzZSA9IFlFUzsKKyAgICBtX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCkuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7CisgICAgbV9wbGF5ZXJDb250cm9s
bGVyLmdldCgpLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCkuY2FuU2VlayA9IFlFUzsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkubWluVGlt
ZSA9IDA7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnN0YXR1cyA9IEFWUGxheWVyQ29u
dHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBh
bmNob3JUaW1lKQoreworICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICghW21f
cGxheWVyQ29udHJvbGxlci5nZXQoKSByYXRlXSkgPyBOQU4gOiBhbmNob3JUaW1lOworICAgIEFW
VmFsdWVUaW1pbmcgKnRpbWluZyA9IFtjbGFzc0FWVmFsdWVUaW1pbmcgdmFsdWVUaW1pbmdXaXRo
QW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFt
cCByYXRlOjBdOworICAgIG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS50aW1pbmcgPSB0aW1pbmc7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUoYm9v
bCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBtX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCkucmF0ZSA9IGlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9v
bCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICBtX3BsYXllckNv
bnRyb2xsZXIuZ2V0KCkuaGFzRW5hYmxlZFZpZGVvID0gaGFzVmlkZW87CisgICAgbV9wbGF5ZXJD
b250cm9sbGVyLmdldCgpLmNvbnRlbnREaW1lbnNpb25zID0gQ0dTaXplTWFrZSh3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Vmlk
ZW9MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQoreworICAgIFttX3BsYXllckNvbnRy
b2xsZXIuZ2V0KCkucGxheWVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFt2aWRl
b0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0
KCkucGxheWVyTGF5ZXIgPSAoQ0FMYXllcjxBVlBsYXllckxheWVyPiopdmlkZW9MYXllcjsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVu
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uKQoreworICAgIFVJU2NyZWVuKiBzY3Jl
ZW4gPSBbY2xhc3NVSVNjcmVlbiBtYWluU2NyZWVuXTsKKyAgICAKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBtX3BsYXllclZpZXdDb250
cm9sbGVyID0gW1tbY2xhc3NBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCkucGxheWVyQ29u
dHJvbGxlciA9IChBVlBsYXllckNvbnRyb2xsZXIgKiltX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7
CisgICAgICAgIAorICAgICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXREZWxlZ2F0ZTopXSkKKyAgICAgICAgICAgIG1fcGxheWVy
Vmlld0NvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7
CisgICAgICAgIAorICAgICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW2NsYXNzVUlW
aWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICAKKyAgICAgICAgbV93aW5kb3cg
PSBbW1tjbGFzc1VJV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzY3JlZW4gYm91bmRzXV0g
YXV0b3JlbGVhc2VdOworICAgICAgICBtX3dpbmRvdy5nZXQoKS5iYWNrZ3JvdW5kQ29sb3IgPSBb
Y2xhc3NVSUNvbG9yIGNsZWFyQ29sb3JdOworICAgICAgICBtX3dpbmRvdy5nZXQoKS5yb290Vmll
d0NvbnRyb2xsZXIgPSBtX3ZpZXdDb250cm9sbGVyLmdldCgpOworICAgICAgICBbbV93aW5kb3cg
bWFrZUtleUFuZFZpc2libGVdOworICAgICAgICAKKyAgICAgICAgW21fdmlld0NvbnRyb2xsZXIu
Z2V0KCkgcHJlc2VudFZpZXdDb250cm9sbGVyOm1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCkg
YW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKKyAgICAgICAgY29tcGxldGlvbigpOworICAg
IH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW4oKQoreworICAgIGVudGVyRnVsbHNjcmVlbihbXSgpe30pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbikKK3sKKyAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBuaWw7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiByZWZUaGlzID0g
dGhpczsKKyAgICAKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBbcmVmVGhpcy0+bV92aWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRy
b2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpeeworICAgICAgICAgcmVmVGhpcy0+bV93aW5k
b3cuZ2V0KCkuaGlkZGVuID0gWUVTOworICAgICAgICAgcmVmVGhpcy0+bV93aW5kb3cuZ2V0KCku
cm9vdFZpZXdDb250cm9sbGVyID0gbmlsOworICAgICAgICAgcmVmVGhpcy0+bV9wbGF5ZXJWaWV3
Q29udHJvbGxlciA9IG5pbDsKKyAgICAgICAgIHJlZlRoaXMtPm1fdmlld0NvbnRyb2xsZXIgPSBu
aWw7CisgICAgICAgICByZWZUaGlzLT5tX3dpbmRvdyA9IG5pbDsKKyAgICAgICAgIGlmIChyZWZU
aGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICAgcmVmVGhpcy0+bV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgIGNvbXBsZXRpb24o
KTsKKyAgICAgICAgIH1dOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgZXhpdEZ1bGxzY3JlZW4oW10o
KXt9KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3MDMyNjA2MGRhNmQ4M2I1
MjMxZTRmZjZlMmY4NmFiMmIzNzE5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsX2gKKyNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENo
YW5nZXMgaGVyZSBzaG91bGQgYmUgcmVmbGVjdGVkIGluIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW4KK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdEV4aXRGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwbGF5
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dG9nZ2xlUGxheVN0YXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGRvdWJs
ZSB0aW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOwor
fTsKKworfQorCisKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jM2M1OGYwMTlhMTlhZmJlMThiMmFkZWY5NmViM2VmMjI3ODZi
NTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCisjZGVmaW5lIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50X2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPFdl
YkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlOworCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIg
eworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKKyAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV9ib3Jyb3dlZFZpZGVvTGF5ZXI7CisgICAgYm9vbCBtX2lz
TGlzdGVuaW5nOworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U7CisgICAgCitwdWJsaWM6CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudCgpIHsgfQorICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
KFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2UgPSBpbnRlcmZhY2U7fQorICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxN
ZWRpYUVsZW1lbnQqKTsKKyAgICAKKyAgICB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIG92ZXJyaWRlCisgICAgICAgIHty
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7
fQorCisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0
b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRp
bWUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK307CisKK30KKwor
I2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUwM2RiMmIwNzVlMjViMTk1MGI0ZmUxYjhlNTdiMzllOTg5NGUxYmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQuaCIKKworI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJD
b3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVz
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hU
TUxWaWRlb0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZv
dW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVlZh
bHVlVGltaW5nKQorCitAaW50ZXJmYWNlIEFWVmFsdWVUaW1pbmcgOiBOU09iamVjdCA8TlNDb2Rp
bmcsIE5TQ29weWluZywgTlNNdXRhYmxlQ29weWluZz4KKysgKGlkKXZhbHVlVGltaW5nV2l0aEFu
Y2hvclZhbHVlOihkb3VibGUpYW5jaG9yVmFsdWUgYW5jaG9yVGltZVN0YW1wOihOU1RpbWVJbnRl
cnZhbCkgdGltZVN0YW1wIHJhdGU6KGRvdWJsZSlyYXRlOworKyAoTlNUaW1lSW50ZXJ2YWwpY3Vy
cmVudFRpbWVTdGFtcDsKK0BlbmQKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKzpFdmVudExpc3RlbmVy
KEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQorLG1faXNMaXN0ZW5pbmd7ZmFs
c2V9Cit7CisgICAgaW5pdEFWUGxheWVyTGF5ZXIoKTsKKyAgICBpbml0QVZWYWx1ZVRpbWluZygp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRp
YUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQoreworICAgIGlmIChtX21l
ZGlhRWxlbWVudCA9PSBtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgeworICAgICAgICBtX21lZGlhRWxl
bWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVu
dCwgdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkucGF1c2VFdmVudCwgdGhpcywgZmFsc2UpOworICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucGxheUV2ZW50LCB0
aGlzLCBmYWxzZSk7CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVF
dmVudCwgdGhpcywgZmFsc2UpOworICAgIH0KKyAgICBtX2lzTGlzdGVuaW5nID0gZmFsc2U7Cisg
ICAgCisgICAgaWYgKCEhbV9tZWRpYUVsZW1lbnQgJiYgISFtX2JvcnJvd2VkVmlkZW9MYXllcikg
eworICAgICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAgICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9MYXllcihudWxscHRyKTsKKyAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnJldHVyblBsYXRmb3JtTGF5ZXIobV9ib3Jyb3dlZFZpZGVvTGF5
ZXIuZ2V0KCkpOworICAgICAgICBtX2JvcnJvd2VkVmlkZW9MYXllci5jbGVhcigpOworICAgIH0K
KyAgICAKKyAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudDsKKyAgICAKKyAgICBpZiAo
IW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9tZWRpYUVsZW1l
bnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsIHRo
aXMsIGZhbHNlKTsKKyAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkucGF1c2VFdmVudCwgdGhpcywgZmFsc2UpOworICAgIG1fbWVkaWFFbGVtZW50LT5hZGRF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAgICBt
X21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0
ZW5pbmcgPSB0cnVlOworICAgIAorICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkg
eworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRp
YUVsZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0UmF0ZShtX21lZGlhRWxlbWVudC0+aXNQbGF5aW5nKCksIG1fbWVkaWFFbGVtZW50LT5w
bGF5YmFja1JhdGUoKSk7CisgICAgICAgIAorICAgICAgICBtX2JvcnJvd2VkVmlkZW9MYXllciA9
IG1fbWVkaWFFbGVtZW50LT5ib3Jyb3dQbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIEFTU0VSVChb
bV9ib3Jyb3dlZFZpZGVvTGF5ZXIuZ2V0KCkgaXNLaW5kT2ZDbGFzczpjbGFzc0FWUGxheWVyTGF5
ZXJdKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldFZpZGVvTGF5ZXIo
bV9ib3Jyb3dlZFZpZGVvTGF5ZXIuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UtPnNldEN1cnJlbnRUaW1lKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50
VGltZSgpLCBbY2xhc3NBVlZhbHVlVGltaW5nIGN1cnJlbnRUaW1lU3RhbXBdKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7
CisgICAgICAgICAgICBIVE1MVmlkZW9FbGVtZW50ICp2aWRlb0VsZW1lbnQgPSB0b0hUTUxWaWRl
b0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UtPnNldFZpZGVvRGltZW5zaW9ucyh0cnVlLCB2aWRlb0VsZW1lbnQtPnZp
ZGVvV2lkdGgoKSwgdmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxl
RXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgTE9HKE1lZGlhLCAiaGFuZGxlRXZlbnQgJXMiLCBldmVudC0+dHlwZSgpLmNoYXJhY3Rl
cnM4KCkpOworICAgIAorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5kdXJh
dGlvbmNoYW5nZUV2ZW50KQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0
RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkpOworICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgICAgICB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgICAgICB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKG1fbWVkaWFFbGVtZW50LT5pc1BsYXlpbmco
KSwgbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpKTsKKyAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpCisgICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVu
dFRpbWUoKSwgW2NsYXNzQVZWYWx1ZVRpbWluZyBjdXJyZW50VGltZVN0YW1wXSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbFNj
cmVlbigpCit7CisgICAgcmVmKCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIG1fbWVk
aWFFbGVtZW50LT5wYXVzZSgpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6cGxheSgpIHsKKyAgICByZWYoKTsKKyAgICBXZWJUaHJl
YWRSdW4oXnsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgZGVyZWYo
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6cGF1c2UoKQoreworICAgIHJlZigpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGF1c2UoKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRl
KCkKK3sKKyAgICByZWYoKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBkZXJlZigpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQoreworICAgIHJlZigpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBt
X21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7CisgICAgICAgIGRlcmVmKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmRp
ZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICByZWYoKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAg
ICAgICAgc2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgICAgICBkZXJlZigpOworICAgIH0p
OworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222689</attachid>
            <date>2014-01-30 11:10:50 -0800</date>
            <delta_ts>2014-04-18 20:49:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127762-20140130111051.patch</filename>
            <type>text/plain</type>
            <size>56934</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc5NjM0MzQ5MWMxZTQ1
YTM1MjFkYmU3M2ZhMTk1MzA1NmRmMmIwNS4uYjQ3YzZkMmQyODc5MTY1MTU0ZDljZTY2OGE3Mjg2
ZjI0Y2ZmYTQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE0LTAxLTI4ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyIHNlcGFyYXRpbmcgQVZLaXQgZnJvbSBNZWRpYUVsZW1lbnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQgaW1wbGVtZW50YXRpb24gaW50byB0
d28gYWJzdHJhY3QgaW50ZXJmYWNlcyB3aXRoIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uczogCisg
ICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UsIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJBVktpdC5tbToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBpbml0XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGVhbGxv
Y10pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNj
cmVlbjpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVs
bHNjcmVlbl0pOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOjp+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW06IEFkZGVkLgorICAgICAgICAo
TlNfRU5VTSk6CisgICAgICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBpbml0XSk6CisgICAg
ICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFW
UGxheWVyQ29udHJvbGxlciBmb3J3YXJkaW5nVGFyZ2V0Rm9yU2VsZWN0b3I6XSk6CisgICAgICAg
ICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBwbGF5ZXJWaWV3Q29udHJvbGxlcjpzaG91bGREaXNt
aXNzV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHBsYXk6
XSk6CisgICAgICAgICgtW1dlYkFWUGxheWVyQ29udHJvbGxlciBwYXVzZTpdKToKKyAgICAgICAg
KC1bV2ViQVZQbGF5ZXJDb250cm9sbGVyIHRvZ2dsZVBsYXliYWNrOl0pOgorICAgICAgICAoLVtX
ZWJBVlBsYXllckNvbnRyb2xsZXIgaXNQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFWUGxheWVy
Q29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoK1tXZWJBVlBsYXllckNvbnRyb2xs
ZXIga2V5UGF0aHNGb3JWYWx1ZXNBZmZlY3RpbmdQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFW
UGxheWVyQ29udHJvbGxlciBzZWVrVG9UaW1lOl0pOgorICAgICAgICAoOm1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9MYXllcik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZL
aXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmguCisgICAgICAgIChX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsU2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpkaWRFeGl0RnVsbHNjcmVlbik6
CisKIDIwMTQtMDEtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIElEQjogUmVtb3ZlIHVudXNlZCBjb25jZXB0IG9mICJjdXJzb3IgcHJlZmV0Y2giCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MWQ1MDA1NDRiNmUzMDE3Yjc0ZjMzNDhhZjdmYTIyNTgwMmNkMTQxMC4uMGYwNTM0NDEwZTg0MWQz
OTIzZjVmNjM5YjIwMzExZDRkYzllOGFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI5Niw2ICsxMjk2LDEyIEBACiAJCTNG
MkIzM0VGMTY1QUYxNTYwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0YyQjMzRUExNjVBRjE1
NTAwRTM5ODdDIC8qIEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87IH07CiAJCTNGNDJCMzFE
MTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDJCMzFCMTg4
MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRjQyQjMxRTE4
ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgx
MTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsg
fTsKKwkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzRkJDNEFFQzE4OTg4MTBF
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJM0ZCQzRBRUYxODk4ODEzODAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRBRUQxODk4ODEzODAwNDZFRTM4IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tICovOyB9OworCQkzRkJDNEFGMDE4
OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVFMTg5
ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTNGQkM0QUYz
MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5
ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsg
fTsKKwkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE2MTU5
RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovOyB9OwogCQkzRkZG
RjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkZGRjlBNzE1OUQ5QTU1MDAy
MEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87IH07CiAJCTNGRkZGOUFEMTU5RDlC
MDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8q
IFZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgKi87IH07CkBAIC04MTE4LDYgKzgxMjQsMTIgQEAK
IAkJM0YyQjMzRUExNjVBRjE1NTAwRTM5ODdDIC8qIEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGNDJCMzFCMTg4MTE5MUIwMDI3OEFB
QyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lmg7IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBhdGggPSBp
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzggLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRkJDNEFF
RDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0ZCQzRBRjExODk4ODE1
NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBwYXRo
ID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3
cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0
Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5
QTcxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZGRkY5QUIxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0
U3R5bGVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc5MzgsNiArMTc5NTAsMTIgQEAKIAkJCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8sCiAJCQkJM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLywKIAkJ
CQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovLAorCQkJCTNGQkM0
QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovLAorCQkJ
CTNGQkM0QUVCMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uu
aCAqLywKKwkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8q
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmggKi8sCisJCQkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
LAorCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMjM1MjUsNiArMjM1NDMsNyBAQAogCQkJCUE3NEJCNzZCMTNCREE4NjMw
MEZGN0JGMCAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAwNUU2NERCIC8qIEV4Y2VwdGlvbkhlYWRlcnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBDMTQ1QUJD
MTMwMDVFNjREQiAvKiBFeGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MDI0NTc1MjE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjM4MDksNiArMjM4MjgsNyBAQAogCQkJCTk3N0IzODc1MTIyODgzRTkwMEI4
MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg3NjEy
Mjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MTM2OUQ4MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MU2VsZWN0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNBODBDRDYzMzEwMDBGQURBNzUg
LyogSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRENFMTJGMEUy
ODMwMEMxMzM3OSAvKiBIVE1MU291cmNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4
QUQ2NzUxNDEzMEE4RDAwQzdDQUUzIC8qIEhUTUxTcGFuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDAyMyw2ICsyNDA0Myw3IEBACiAJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYw
NzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1
ODEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJM0ZCQzRBRjAxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVEMjEyQjAz
Rjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRkIxQTY2
MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1OUE4NjAwODExOURBRkExMDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MjM1LDYgKzI0MjU2LDcgQEAKIAkJCQk2RUJGMEU3NzEy
QTk4Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzMUM0RTU0MTZFMDJCNDAwMDJGNzk1NyAvKiBKU09FU1RleHR1cmVIYWxmRmxvYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc3QTE3QUE3MTJGMjhCMkEwMDRFMDJGNiAvKiBKU09FU1ZlcnRleEFy
cmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZERjZCQUY5MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBOTMyNjcxNjcwM0JBOTAwODk4MkRDIC8qIEpTT2Zm
bGluZUF1ZGlvQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRFQTYyNDMxNTIxMDJFMjAw
NDc5REYwIC8qIEpTT3NjaWxsYXRvck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2OTMsNiAr
Mjc3MTUsNyBAQAogCQkJCTI0RDkxMjk1MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMkY2OTgwQUI3NzE5NTAwMjJF
RkFEIC8qIEpTU1ZHQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFENzE5QzMxODExMDZF
MDAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkz
RkJDNEFFRjE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0QzNjBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDM4
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJGQTNEM0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWRCb29sZWFuLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjg2ODUsNiArMjg3MDgsNyBAQAogCQkJCUIyNTU5OTg0MEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUVFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQ3MTlFQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzRkJDNEFGMzE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxQTE4ODMyMkVC
MDBDOTU0QjUgLyogSlNUb3VjaExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NEZFMkIx
ODYzODcwRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJTW9kdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3OUYxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUxpZ2h0RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAppbmRleCA4NDJhY2E5
ZjZlZWFlNzcyNzlkNTA3NTcwNjViMmQ1YTc0ZGFkZjM3Li4wMjg3MTg2NjI0YTBjNWVmMTgxMTNk
ZTU0ZTY4NTMwYTk3MWE5N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oCkBAIC0y
OCwxOSArMjgsMTMgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8d3RmL1JlZlB0
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CiAKLUBjbGFzcyBVSVNj
cmVlbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLX0K
K09CSkNfQ0xBU1MgVUlTY3JlZW47CiAKIEBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciA6IE5TT2JqZWN0Ci0KIC0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQ7CiAtIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiltZWRpYUVsZW1lbnQ7Ci0KIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVNjcmVlbiAq
KXNjcmVlbjsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQppbmRleCAyYzQ3NTU5NTQzYzM0MWNkZjg3YzYzZWE0NmI3YzVjMmY3NGE4
MWMxLi4wMTRjOTQwYjJmYmI2NzYwYzgwMWNjMmFhNzY2NzE0ODczMGZiMWZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTI5LDMxMiArMjksMTggQEAKIAogI2ltcG9ydCAi
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmgiCiAKLSNpbXBvcnQgIkRPTUV2ZW50
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPENvcmVNZWRpYS9DTVRp
bWUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50
TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1l
bnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvT2JqQ0V2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckVsZW1lbnQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVNPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQotU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKLQotU09GVF9MSU5LX0ZS
QU1FV09SSyhBVktpdCkKLVNPRlRfTElOS19DTEFTUyhBVktpdCwgQVZQbGF5ZXJDb250cm9sbGVy
KQotU09GVF9MSU5LX0NMQVNTKEFWS2l0LCBBVlBsYXllclZpZXdDb250cm9sbGVyKQotU09GVF9M
SU5LX0NMQVNTKEFWS2l0LCBBVlZhbHVlVGltaW5nKQotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJ
S2l0KQotU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVNjcmVlbikKLVNPRlRfTElOS19DTEFTUyhV
SUtpdCwgVUlXaW5kb3cpCi1TT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlldykKLVNPRlRfTElO
S19DTEFTUyhVSUtpdCwgVUlWaWV3Q29udHJvbGxlcikKLVNPRlRfTElOS19DTEFTUyhVSUtpdCwg
VUlDb2xvcikKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhDb3JlTWVkaWEpCi1TT0ZUX0xJTksoQ29y
ZU1lZGlhLCBDTVRpbWVNYWtlV2l0aFNlY29uZHMsIENNVGltZSwgKEZsb2F0NjQgc2Vjb25kcywg
aW50MzJfdCBwcmVmZXJyZWRUaW1lU2NhbGUpLCAoc2Vjb25kcywgcHJlZmVycmVkVGltZVNjYWxl
KSkKLVNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUdldFNlY29uZHMsIEZsb2F0NjQsIChDTVRp
bWUgdGltZSksICh0aW1lKSkKLQotQGludGVyZmFjZSBBVlZhbHVlVGltaW5nIDogTlNPYmplY3Qg
PE5TQ29kaW5nLCBOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmc+Ci0rIChpZCl2YWx1ZVRpbWlu
Z1dpdGhBbmNob3JWYWx1ZTooZG91YmxlKWFuY2hvclZhbHVlIGFuY2hvclRpbWVTdGFtcDooTlNU
aW1lSW50ZXJ2YWwpIHRpbWVTdGFtcCByYXRlOihkb3VibGUpcmF0ZTsKLSsgKE5TVGltZUludGVy
dmFsKWN1cnJlbnRUaW1lU3RhbXA7Ci1AZW5kCi0KLUBwcm90b2NvbCBBVlBsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGUKLUBlbmQKLQotQHByb3RvY29sIEFWUGxheWVyTGF5ZXIKLUBlbmQKLQot
QGludGVyZmFjZSBBVlBsYXllckNvbnRyb2xsZXIgOiBVSVJlc3BvbmRlcgotQGVuZAotCi1AaW50
ZXJmYWNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCi1AcHJvcGVy
dHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4g
ZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBBVlBsYXllckNvbnRyb2xs
ZXIgKnBsYXllckNvbnRyb2xsZXI7Ci1AZW5kCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNzYWxSZWFzb24pIHsKLSAgICBBVlBsYXllclZp
ZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uRG9uZUJ1dHRvblRhcHBlZCwKLSAgICBBVlBsYXll
clZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uUmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2Vp
dmVkLAotICAgIEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNzYWxSZWFzb25FcnJvcgotfSBO
U19FTlVNX0FWQUlMQUJMRV9JT1MoOF8wKTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
QVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzKSB7Ci0gICAgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVz
VW5rbm93biwKLSAgICBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNMb2FkaW5nLAotICAgIEFWUGxh
eWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5LAotICAgIEFWUGxheWVyQ29udHJvbGxlclN0
YXR1c0ZhaWxlZAotfSBOU19FTlVNX0FWQUlMQUJMRSgxMF8xMCwgOF8wKTsKLQotQGludGVyZmFj
ZSBXZWJBVlBsYXllckNvbnRyb2xsZXIgOiBOU09iamVjdCA8RE9NRXZlbnRMaXN0ZW5lciwgQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlPgotCi1AcHJvcGVydHkocmV0YWluKSBBVlBsYXll
ckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXJQcm94eTsKLUBwcm9wZXJ0eShyZXRhaW4pIENB
TGF5ZXI8QVZQbGF5ZXJMYXllcj4gKnBsYXllckxheWVyOwotCi1AcHJvcGVydHkgQk9PTCBjYW5Q
bGF5OwotQHByb3BlcnR5KGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWluZzsKLUBwcm9wZXJ0
eSBCT09MIGNhblBhdXNlOwotQHByb3BlcnR5IEJPT0wgY2FuVG9nZ2xlUGxheWJhY2s7Ci1AcHJv
cGVydHkgZG91YmxlIHJhdGU7Ci1AcHJvcGVydHkgQk9PTCBjYW5TZWVrOwotQHByb3BlcnR5IE5T
VGltZUludGVydmFsIGNvbnRlbnREdXJhdGlvbjsKLUBwcm9wZXJ0eSBOU1NpemUgY29udGVudERp
bWVuc2lvbnM7Ci1AcHJvcGVydHkgQk9PTCBoYXNFbmFibGVkQXVkaW87Ci1AcHJvcGVydHkgQk9P
TCBoYXNFbmFibGVkVmlkZW87Ci1AcHJvcGVydHkgTlNUaW1lSW50ZXJ2YWwgbWluVGltZTsKLUBw
cm9wZXJ0eSBOU1RpbWVJbnRlcnZhbCBtYXhUaW1lOwotQHByb3BlcnR5IE5TVGltZUludGVydmFs
IGNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzOwotQHByb3BlcnR5KHJldGFpbikgTlNBcnJh
eSAqbG9hZGVkVGltZVJhbmdlczsKLUBwcm9wZXJ0eSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXMg
c3RhdHVzOwotQHByb3BlcnR5KHJldGFpbikgQVZWYWx1ZVRpbWluZyAqdGltaW5nOwotCi0tICh2
b2lkKWhhbmRsZUV2ZW50OihET01FdmVudCAqKWV2dDsKLQotLSAoQk9PTClwbGF5ZXJWaWV3Q29u
dHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNo
b3VsZERpc21pc3NXaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVh
c29uKXJlYXNvbjsKLQotQGVuZAotCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllckNvbnRy
b2xsZXIKLXsKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsKLSAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gX2xpc3RlbmVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
c2VsZjsKLSAgICAKLSAgICBpbml0QVZQbGF5ZXJDb250cm9sbGVyKCk7Ci0gICAgc2VsZi5wbGF5
ZXJDb250cm9sbGVyUHJveHkgPSBbW2NsYXNzQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0
XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgc2VsZi5w
bGF5ZXJDb250cm9sbGVyUHJveHkgPSBuaWw7Ci0gICAgc2VsZi5wbGF5ZXJMYXllciA9IG5pbDsK
LSAgICBzZWxmLmxvYWRlZFRpbWVSYW5nZXMgPSBuaWw7Ci0gICAgc2VsZi50aW1pbmcgPSBuaWw7
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClmb3J3YXJkaW5nVGFyZ2V0Rm9yU2Vs
ZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rvcik7Ci0gICAg
cmV0dXJuIHNlbGYucGxheWVyQ29udHJvbGxlclByb3h5OwotfQotCi0tIChCT09MKXBsYXllclZp
ZXdDb250cm9sbGVyOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2hvdWxkRGlzbWlzc1dpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJEaXNtaXNz
YWxSZWFzb24pcmVhc29uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVy
KTsKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKLQotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBfbWVkaWFFbGVtZW50LT5wYXVzZSgpOwotICAgICAgICBfbWVkaWFFbGVtZW50LT5leGl0
RnVsbHNjcmVlbigpOwotICAgIH0pOwotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClwbGF5
OihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cGxheSgpOwotICAgIH0pOwotfQotCi0tICh2
b2lkKXBhdXNlOihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICB9KTsK
LX0KLQotLSAodm9pZCl0b2dnbGVQbGF5YmFjazooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbmRlcik7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgIH0pOwotfQotCi0tIChCT09MKWlzUGxheWluZwotewot
ICAgIHJldHVybiBbc2VsZiByYXRlXSAhPSAwOwotfQotCi0tICh2b2lkKXNldFBsYXlpbmc6KEJP
T0wpcGxheWluZwotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAocGxheWluZykK
LSAgICAgICAgICAgIF9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKLSAgICB9KTsKLX0KLQotKyAoTlNTZXQgKilr
ZXlQYXRoc0ZvclZhbHVlc0FmZmVjdGluZ1BsYXlpbmcKLXsKLSAgICByZXR1cm4gW05TU2V0IHNl
dFdpdGhPYmplY3Q6QCJyYXRlIl07Ci19Ci0KLS0gKHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50
ZXJ2YWwpdGltZQotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBfbWVkaWFFbGVtZW50
LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZCl1cGRhdGVUaW1p
bmdXaXRoQ3VycmVudFRpbWU6KE5TVGltZUludGVydmFsKWN1cnJlbnRUaW1lCi17Ci0gICAgTlNU
aW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gKCFbc2VsZiByYXRlXSkgPyBOQU4gOiBbY2xh
c3NBVlZhbHVlVGltaW5nIGN1cnJlbnRUaW1lU3RhbXBdOwotICAgIEFWVmFsdWVUaW1pbmcgKnRp
bWluZyA9IFtjbGFzc0FWVmFsdWVUaW1pbmcgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3Vy
cmVudFRpbWUKLSAgICAgIGFuY2hvclRpbWVTdGFtcDphbmNob3JUaW1lU3RhbXAgcmF0ZTowXTsK
LSAgICBbc2VsZiBzZXRUaW1pbmc6dGltaW5nXTsKLX0KLQotLSAoZG91YmxlKWVmZmVjdGl2ZVJh
dGUKLXsKLSAgICByZXR1cm4gX21lZGlhRWxlbWVudC0+aXNQbGF5aW5nKCkgPyBfbWVkaWFFbGVt
ZW50LT5wbGF5YmFja1JhdGUoKSA6IDAuOwotfQotCi0tICh2b2lkKXVwZGF0ZUR1cmF0aW9uCi17
Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFsbCB0aGVz
ZQotICAgIE5TVGltZUludGVydmFsIGR1cmF0aW9uID0gX21lZGlhRWxlbWVudC0+ZHVyYXRpb24o
KTsKLSAgICBzZWxmLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIHNlbGYubWF4VGlt
ZSA9IGR1cmF0aW9uOwotICAgIHNlbGYuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBk
dXJhdGlvbjsKLSAgICBzZWxmLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKGR1cmF0aW9uKV07
Ci19Ci0KLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihQYXNzUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+KXBhc3NlZE1lZGlhRWxlbWVudAotewotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBt
ZWRpYUVsZW1lbnQgPSBwYXNzZWRNZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoX21lZGlhRWxlbWVu
dCA9PSBtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX21lZGlh
RWxlbWVudCAmJiBfbGlzdGVuZXIpCi0gICAgewotICAgICAgICBfbWVkaWFFbGVtZW50LT5yZW1v
dmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50LCBfbGlzdGVu
ZXIuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkucGF1c2VFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxzZSk7Ci0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBs
YXlFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQt
PnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCwgX2xpc3Rl
bmVyLmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIF9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCwgX2xpc3RlbmVyLmdldCgpLCBmYWxz
ZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChfbWVkaWFFbGVtZW50KQotICAgIHsKLSAgICAgICAg
W3NlbGYucGxheWVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgICAgICBfbWVkaWFF
bGVtZW50LT5yZXR1cm5QbGF0Zm9ybUxheWVyKHNlbGYucGxheWVyTGF5ZXIpOwotICAgICAgICBz
ZWxmLnBsYXllckxheWVyID0gbmlsOwotICAgIH0KLSAgICAKLSAgICBfbWVkaWFFbGVtZW50ID0g
bWVkaWFFbGVtZW50OwotICAgIF9saXN0ZW5lciA9IG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCFf
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfbGlzdGVuZXIgPSBPYmpDRXZl
bnRMaXN0ZW5lcjo6d3JhcChzZWxmKTsKLQotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQsIF9saXN0ZW5lciwgZmFsc2Up
OwotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhdXNl
RXZlbnQsIF9saXN0ZW5lciwgZmFsc2UpOwotICAgIF9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCwgX2xpc3RlbmVyLCBmYWxzZSk7Ci0gICAgX21l
ZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50
LCBfbGlzdGVuZXIsIGZhbHNlKTsKLSAgICBfbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQsIF9saXN0ZW5lciwgZmFsc2UpOwotCi0gICAg
W3NlbGYgdXBkYXRlRHVyYXRpb25dOwotICAgIHNlbGYuY2FuUGxheSA9IFlFUzsKLSAgICBzZWxm
LmNhblBhdXNlID0gWUVTOwotICAgIHNlbGYuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7Ci0gICAg
c2VsZi5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgc2VsZi5jYW5TZWVrID0gWUVTOwotICAg
IHNlbGYubWluVGltZSA9IDA7Ci0gICAgc2VsZi5yYXRlID0gW3NlbGYgZWZmZWN0aXZlUmF0ZV07
Ci0gICAgc2VsZi5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsK
LQotICAgIHNlbGYucGxheWVyTGF5ZXIgPSAoQ0FMYXllcjxBVlBsYXllckxheWVyPiAqKV9tZWRp
YUVsZW1lbnQtPmJvcnJvd1BsYXRmb3JtTGF5ZXIoKTsKLSAgICBBU1NFUlQoW3NlbGYucGxheWVy
TGF5ZXIgaXNLaW5kT2ZDbGFzczpjbGFzc0FWUGxheWVyTGF5ZXJdKTsKLSAgICBbc2VsZi5wbGF5
ZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBbc2VsZiB1cGRhdGVUaW1pbmdX
aXRoQ3VycmVudFRpbWU6X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKV07Ci0KLSAgICBpZiAo
aXNIVE1MVmlkZW9FbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxW
aWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChfbWVkaWFFbGVt
ZW50LmdldCgpKTsKLSAgICAgICAgc2VsZi5oYXNFbmFibGVkVmlkZW8gPSBZRVM7Ci0gICAgICAg
IHNlbGYuY29udGVudERpbWVuc2lvbnMgPSBDR1NpemVNYWtlKHZpZGVvRWxlbWVudC0+dmlkZW9X
aWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwotICAgIH0KLX0KLQotLSAodm9p
ZCloYW5kbGVFdmVudDooRE9NRXZlbnQgKilldm50Ci17Ci0gICAgRXZlbnQqIGV2ZW50ID0gY29y
ZShldm50KTsKLSAgICAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0
ZXJzOCgpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5kdXJhdGlv
bmNoYW5nZUV2ZW50KQotICAgICAgICBbc2VsZiB1cGRhdGVEdXJhdGlvbl07Ci0gICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVudAotICAgICAgICB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50KQotICAgICAgICBzZWxmLnJh
dGUgPSBbc2VsZiBlZmZlY3RpdmVSYXRlXTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpCi0gICAgICAgIFtzZWxmIHVwZGF0ZVRpbWlu
Z1dpdGhDdXJyZW50VGltZTpfbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpXTsKLX0KLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgKCkgPFVJVmlld0Nv
bnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+Ci1AcHJvcGVydHkocmV0YWluKSBVSVdpbmRv
dyAqd2luZG93OwotQHByb3BlcnR5KHJldGFpbikgVUlWaWV3Q29udHJvbGxlciAqdmlld0NvbnRy
b2xsZXI7Ci1AcHJvcGVydHkocmV0YWluKSBBVlBsYXllclZpZXdDb250cm9sbGVyICpwbGF5ZXJW
aWV3Q29udHJvbGxlcjsKLUBwcm9wZXJ0eShyZXRhaW4pIFdlYkFWUGxheWVyQ29udHJvbGxlciAq
cGxheWVyQ29udHJvbGxlcjsKLUBlbmQKLQogQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIKIHsKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxl
bWVudDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9pbnRl
cmZhY2U7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBf
bW9kZWw7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0zNDIsMjQgKzQ4LDExIEBAIHR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0YXR1cykgewogICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
aW5pdFVJU2NyZWVuKCk7Ci0gICAgaW5pdFVJVmlldygpOwotICAgIGluaXRVSUNvbG9yKCk7Ci0g
ICAgaW5pdFVJV2luZG93KCk7Ci0gICAgaW5pdEFWUGxheWVyQ29udHJvbGxlcigpOwotICAgIGlu
aXRBVlBsYXllclZpZXdDb250cm9sbGVyKCk7Ci0gICAgaW5pdEFWVmFsdWVUaW1pbmcoKTsKLSAg
ICBpbml0VUlWaWV3Q29udHJvbGxlcigpOwotICAgIGluaXRBVlBsYXllckxheWVyKCk7CiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIHNlbGYud2luZG93ID0g
bmlsOwotICAgIHNlbGYudmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgc2VsZi5wbGF5ZXJWaWV3
Q29udHJvbGxlciA9IG5pbDsKLSAgICBzZWxmLnBsYXllckNvbnRyb2xsZXIgPSBuaWw7CiAgICAg
X21lZGlhRWxlbWVudCA9IG51bGxwdHI7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMzc2
LDQ3ICs2OSwyOCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBBVlBsYXllckNvbnRyb2xs
ZXJTdGF0dXMpIHsKIAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJU2NyZWVuICopc2NyZWVu
CiB7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHNjcmVlbiA9IFtjbGFzc1VJU2NyZWVuIG1h
aW5TY3JlZW5dOwotCi0gICAgc2VsZi5wbGF5ZXJDb250cm9sbGVyID0gW1tbV2ViQVZQbGF5ZXJD
b250cm9sbGVyIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgc2VsZi5wbGF5ZXJDb250
cm9sbGVyLm1lZGlhRWxlbWVudCA9IF9tZWRpYUVsZW1lbnQ7Ci0KLSAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBzZWxmLnBsYXllclZpZXdD
b250cm9sbGVyID0gW1tbY2xhc3NBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07Ci0gICAgICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIucGxheWVyQ29u
dHJvbGxlciA9IChBVlBsYXllckNvbnRyb2xsZXIgKilzZWxmLnBsYXllckNvbnRyb2xsZXI7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoW3NlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXREZWxlZ2F0ZTopXSkKLSAgICAgICAgICAgIHNlbGYucGxh
eWVyVmlld0NvbnRyb2xsZXIuZGVsZWdhdGUgPSBzZWxmLnBsYXllckNvbnRyb2xsZXI7Ci0gICAg
ICAgCi0gICAgICAgIHNlbGYudmlld0NvbnRyb2xsZXIgPSBbW1tjbGFzc1VJVmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgCi0gICAgICAgIHNlbGYud2lu
ZG93ID0gW1tbY2xhc3NVSVdpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2NyZWVuIGJvdW5k
c11dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgc2VsZi53aW5kb3cuYmFja2dyb3VuZENvbG9yID0g
W2NsYXNzVUlDb2xvciBjbGVhckNvbG9yXTsKLSAgICAgICAgc2VsZi53aW5kb3cucm9vdFZpZXdD
b250cm9sbGVyID0gKFVJVmlld0NvbnRyb2xsZXIgKilzZWxmLnZpZXdDb250cm9sbGVyOwotICAg
ICAgICBbc2VsZi53aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgICAgICAKLSAgICAgICAg
W3NlbGYudmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyOnNlbGYucGxheWVyVmll
d0NvbnRyb2xsZXIgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKLSAgICB9KTsKKyAgICBV
TlVTRURfUEFSQU0oc2NyZWVuKTsKKyAgICBfaW50ZXJmYWNlID0gYWRvcHRSZWYobmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KTsKKyAgICBfbW9kZWwgPSBhZG9wdFJlZihuZXcg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQpOworICAgIF9tb2RlbC0+c2V0V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZhY2UuZ2V0KCkpOworICAgIF9pbnRlcmZh
Y2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9tb2RlbC5nZXQoKSk7CisgICAgX21vZGVs
LT5zZXRNZWRpYUVsZW1lbnQoX21lZGlhRWxlbWVudC5nZXQoKSk7CisgICAgX2ludGVyZmFjZS0+
ZW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KIHsKLSAgICBz
ZWxmLnBsYXllckNvbnRyb2xsZXIubWVkaWFFbGVtZW50ID0gbnVsbHB0cjsKLQotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIFtzZWxmLnZp
ZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9u
Ol57Ci0gICAgICAgICAgICBzZWxmLndpbmRvdy5oaWRkZW4gPSBZRVM7Ci0gICAgICAgICAgICBz
ZWxmLndpbmRvdy5yb290Vmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNlbGYucGxheWVyVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgICAgICAgICBzZWxm
LnZpZXdDb250cm9sbGVyID0gbmlsOwotICAgICAgICAgICAgc2VsZi53aW5kb3cgPSBuaWw7Ci0g
ICAgICAgICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgICAgICAgICBfbWVkaWFFbGVtZW50
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgIH1dOwor
ICAgIF9fYmxvY2sgUmV0YWluUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXI+IHByb3Rl
Y3R7c2VsZn07CisgICAgCisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4oXnsKKyAgICAg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgICAgICBfbW9kZWwtPnNldE1lZGlhRWxlbWVudChu
dWxscHRyKTsKKyAgICAgICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKG51bGxwdHIpOworICAgICAgICAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UobnVsbHB0cik7CisgICAgICAgICAgICBfbW9kZWwgPSBudWxscHRyOworICAgICAg
ICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDY0MTVmZTY0OTMxOTFlMTBmMTJiZjJlNmViOGMzZTQzMGJmNTA4NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZV9oCisjZGVm
aW5lIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZV9oCisKKyNpZiBQTEFURk9STShJT1MpCisK
KyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgeworcHVibGljOgorICAg
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSgpIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJl
bnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVv
TGF5ZXIoUGxhdGZvcm1MYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXll
cklEKHVpbnQzMl90KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbigpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSA9IDA7Cit9OworCit9CisKKyNl
bmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDIz
YWE0ZmM2ZTFjMzBiN2YyZjBiMzE1NTg2YzI4ZjI2MThmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0X2gK
KyNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXRfaAorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUxh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitP
QkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsKK09CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3
Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgVUlX
aW5kb3c7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOworICAgIAorY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKKyAgICA6
IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKKyAgICAsIHB1YmxpYyBSZWZDb3Vu
dGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CisgICAgICAgIAorICAgIFJl
dGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVyQ29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJWaWV3Q29udHJvbGxlcjsK
KyAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gbV92aWV3Q29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8VUlXaW5kb3c+IG1fd2luZG93OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsOworICAgIAorcHVibGljOgorICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKSB7IH0KKyAgICB2b2lkIHNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CisgICAgCisgICAgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRSYXRlKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Vmlk
ZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0VmlkZW9MYXllcihQbGF0Zm9ybUxheWVyKikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRWaWRlb0xheWVySUQodWludDMyX3QgdmlkZW9Db250ZXh0SUQpIG92ZXJy
aWRlIHtVTlVTRURfUEFSQU0odmlkZW9Db250ZXh0SUQpO307CisgICAgdm9pZCBlbnRlckZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbihzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbik7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b24pOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjUyZmJlY2QwZjVjZDBhYTc3ZGRlNDcyMTllZDk0MDgxYTk2ZTk0
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2ltcG9ydCAiY29uZmlnLmgi
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgPENvcmVNZWRpYS9D
TVRpbWUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRh
dGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCisKK1NP
RlRfTElOS19GUkFNRVdPUksoQVZLaXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZLaXQsIEFWUGxheWVy
Q29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZQbGF5ZXJWaWV3Q29udHJvbGxl
cikKK1NPRlRfTElOS19DTEFTUyhBVktpdCwgQVZWYWx1ZVRpbWluZykKKworU09GVF9MSU5LX0ZS
QU1FV09SSyhVSUtpdCkKK1NPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlTY3JlZW4pCitTT0ZUX0xJ
TktfQ0xBU1MoVUlLaXQsIFVJV2luZG93KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSVZpZXcp
CitTT0ZUX0xJTktfQ0xBU1MoVUlLaXQsIFVJVmlld0NvbnRyb2xsZXIpCitTT0ZUX0xJTktfQ0xB
U1MoVUlLaXQsIFVJQ29sb3IpCisKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1lZGlhKQorU09G
VF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lTWFrZVdpdGhTZWNvbmRzLCBDTVRpbWUsIChGbG9hdDY0
IHNlY29uZHMsIGludDMyX3QgcHJlZmVycmVkVGltZVNjYWxlKSwgKHNlY29uZHMsIHByZWZlcnJl
ZFRpbWVTY2FsZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVHZXRTZWNvbmRzLCBGbG9h
dDY0LCAoQ01UaW1lIHRpbWUpLCAodGltZSkpCisKK0BpbnRlcmZhY2UgQVZWYWx1ZVRpbWluZyA6
IE5TT2JqZWN0IDxOU0NvZGluZywgTlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nPgorKyAoaWQp
dmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6KGRvdWJsZSlhbmNob3JWYWx1ZSBhbmNob3JUaW1l
U3RhbXA6KE5TVGltZUludGVydmFsKSB0aW1lU3RhbXAgcmF0ZTooZG91YmxlKXJhdGU7CisrIChO
U1RpbWVJbnRlcnZhbCljdXJyZW50VGltZVN0YW1wOworQGVuZAorCitAcHJvdG9jb2wgQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCitAZW5kCisKK0Bwcm90b2NvbCBBVlBsYXllckxheWVy
CitAZW5kCisKK0BpbnRlcmZhY2UgQVZQbGF5ZXJDb250cm9sbGVyIDogVUlSZXNwb25kZXIKK0Bl
bmQKKworQGludGVyZmFjZSBBVlBsYXllclZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxl
cgorQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxBVlBsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGU+IGRlbGVnYXRlOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgQVZQbGF5
ZXJDb250cm9sbGVyICpwbGF5ZXJDb250cm9sbGVyOworQGVuZAorCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29uKSB7CisgICAg
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckRpc21pc3NhbFJlYXNvbkRvbmVCdXR0b25UYXBwZWQsCisg
ICAgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRpc21pc3NhbFJlYXNvblJlbW90ZUNvbnRyb2xTdG9w
RXZlbnRSZWNlaXZlZCwKKyAgICBBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlzc2FsUmVhc29u
RXJyb3IKK30gTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDhfMCk7CisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIEFWUGxheWVyQ29udHJvbGxlclN0YXR1cykgeworICAgIEFWUGxheWVyQ29udHJv
bGxlclN0YXR1c1Vua25vd24sCisgICAgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzTG9hZGluZywK
KyAgICBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheSwKKyAgICBBVlBsYXllckNv
bnRyb2xsZXJTdGF0dXNGYWlsZWQKK30gTlNfRU5VTV9BVkFJTEFCTEUoMTBfMTAsIDhfMCk7CisK
K0BpbnRlcmZhY2UgV2ViQVZQbGF5ZXJDb250cm9sbGVyIDogTlNPYmplY3QgPEFWUGxheWVyVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKworQHByb3BlcnR5KHJldGFpbikgQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyUHJveHk7CitAcHJvcGVydHkocmV0YWluKSBDQUxheWVyPEFW
UGxheWVyTGF5ZXI+ICpwbGF5ZXJMYXllcjsKK0Bwcm9wZXJ0eShhc3NpZ24pIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKiBkZWxlZ2F0ZTsKKworQHByb3BlcnR5IEJPT0wgY2FuUGxheTsKK0Bwcm9w
ZXJ0eShnZXR0ZXI9aXNQbGF5aW5nKSBCT09MIHBsYXlpbmc7CitAcHJvcGVydHkgQk9PTCBjYW5Q
YXVzZTsKK0Bwcm9wZXJ0eSBCT09MIGNhblRvZ2dsZVBsYXliYWNrOworQHByb3BlcnR5IGRvdWJs
ZSByYXRlOworQHByb3BlcnR5IEJPT0wgY2FuU2VlazsKK0Bwcm9wZXJ0eSBOU1RpbWVJbnRlcnZh
bCBjb250ZW50RHVyYXRpb247CitAcHJvcGVydHkgTlNTaXplIGNvbnRlbnREaW1lbnNpb25zOwor
QHByb3BlcnR5IEJPT0wgaGFzRW5hYmxlZEF1ZGlvOworQHByb3BlcnR5IEJPT0wgaGFzRW5hYmxl
ZFZpZGVvOworQHByb3BlcnR5IE5TVGltZUludGVydmFsIG1pblRpbWU7CitAcHJvcGVydHkgTlNU
aW1lSW50ZXJ2YWwgbWF4VGltZTsKK0Bwcm9wZXJ0eSBOU1RpbWVJbnRlcnZhbCBjb250ZW50RHVy
YXRpb25XaXRoaW5FbmRUaW1lczsKK0Bwcm9wZXJ0eShyZXRhaW4pIE5TQXJyYXkgKmxvYWRlZFRp
bWVSYW5nZXM7CitAcHJvcGVydHkgQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzIHN0YXR1czsKK0Bw
cm9wZXJ0eShyZXRhaW4pIEFWVmFsdWVUaW1pbmcgKnRpbWluZzsKKworLSAoQk9PTClwbGF5ZXJW
aWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9s
bGVyIHNob3VsZERpc21pc3NXaXRoUmVhc29uOihBVlBsYXllclZpZXdDb250cm9sbGVyRGlzbWlz
c2FsUmVhc29uKXJlYXNvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWUGxheWVyQ29u
dHJvbGxlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICAKKyAgICBpbml0QVZQbGF5ZXJD
b250cm9sbGVyKCk7CisgICAgc2VsZi5wbGF5ZXJDb250cm9sbGVyUHJveHkgPSBbW2NsYXNzQVZQ
bGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgc2VsZi5kZWxlZ2F0ZSA9IG5pbDsKKyAgICBzZWxmLnBsYXll
ckNvbnRyb2xsZXJQcm94eSA9IG5pbDsKKyAgICBzZWxmLnBsYXllckxheWVyID0gbmlsOworICAg
IHNlbGYubG9hZGVkVGltZVJhbmdlcyA9IG5pbDsKKyAgICBzZWxmLnRpbWluZyA9IG5pbDsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKGlkKWZvcndhcmRpbmdUYXJnZXRGb3JTZWxlY3Rv
cjooU0VMKXNlbGVjdG9yCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdG9yKTsKKyAgICByZXR1
cm4gc2VsZi5wbGF5ZXJDb250cm9sbGVyUHJveHk7Cit9CisKKy0gKEJPT0wpcGxheWVyVmlld0Nv
bnRyb2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBz
aG91bGREaXNtaXNzV2l0aFJlYXNvbjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRpc21pc3NhbFJl
YXNvbilyZWFzb24KK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwor
ICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIEFTU0VSVChzZWxmLmRlbGVnYXRlKTsKKyAg
ICBzZWxmLmRlbGVnYXRlLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyAgICByZXR1cm4gTk87
Cit9CisKKy0gKHZvaWQpcGxheTooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgQVNTRVJUKHNlbGYuZGVsZWdhdGUpOworICAgIHNlbGYuZGVsZWdhdGUtPnBsYXko
KTsKK30KKworLSAodm9pZClwYXVzZTooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNl
bmRlcik7CisgICAgQVNTRVJUKHNlbGYuZGVsZWdhdGUpOworICAgIHNlbGYuZGVsZWdhdGUtPnBh
dXNlKCk7Cit9CisKKy0gKHZvaWQpdG9nZ2xlUGxheWJhY2s6KGlkKXNlbmRlcgoreworICAgIFVO
VVNFRF9QQVJBTShzZW5kZXIpOworICAgIEFTU0VSVChzZWxmLmRlbGVnYXRlKTsKKyAgICBzZWxm
LmRlbGVnYXRlLT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKworLSAoQk9PTClpc1BsYXlpbmcKK3sK
KyAgICByZXR1cm4gW3NlbGYgcmF0ZV0gIT0gMDsKK30KKworLSAodm9pZClzZXRQbGF5aW5nOihC
T09MKXBsYXlpbmcKK3sKKyAgICBBU1NFUlQoc2VsZi5kZWxlZ2F0ZSk7CisgICAgaWYgKHBsYXlp
bmcpCisgICAgICAgIHNlbGYuZGVsZWdhdGUtPnBsYXkoKTsKKyAgICBlbHNlCisgICAgICAgIHNl
bGYuZGVsZWdhdGUtPnBhdXNlKCk7CisgICAgfQorCisrIChOU1NldCAqKWtleVBhdGhzRm9yVmFs
dWVzQWZmZWN0aW5nUGxheWluZworeworICAgIHJldHVybiBbTlNTZXQgc2V0V2l0aE9iamVjdDpA
InJhdGUiXTsKK30KKworLSAodm9pZClzZWVrVG9UaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lCit7
CisgICAgQVNTRVJUKHNlbGYuZGVsZWdhdGUpOworICAgIHNlbGYuZGVsZWdhdGUtPnNlZWtUb1Rp
bWUodGltZSk7Cit9CisKK0BlbmQKKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkKKyAgICA6IG1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwobnVsbHB0cikKK3sKKyAgICBpbml0VUlTY3JlZW4oKTsKKyAgICBpbml0VUlWaWV3
KCk7CisgICAgaW5pdFVJQ29sb3IoKTsKKyAgICBpbml0VUlXaW5kb3coKTsKKyAgICBpbml0QVZQ
bGF5ZXJDb250cm9sbGVyKCk7CisgICAgaW5pdEFWUGxheWVyVmlld0NvbnRyb2xsZXIoKTsKKyAg
ICBpbml0QVZWYWx1ZVRpbWluZygpOworICAgIGluaXRVSVZpZXdDb250cm9sbGVyKCk7CisgICAg
aW5pdEFWUGxheWVyTGF5ZXIoKTsKKyAgICAKKyAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBhZG9w
dE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsID0gbW9kZWw7CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0g
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbDsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIFdlYkFWUGxh
eWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQo
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNzAxNyB1c2UgY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkdXJhdGlvbiBmb3Ig
YWxsIHRoZXNlCisgICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlv
bjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJD
b250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CisgICAg
cGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChkdXJhdGlvbildOwor
ICAgIAorICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBs
YXliYWNrIGlzIHJlYWR5LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAg
ICBwbGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIu
Y2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVk
QXVkaW8gPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBs
YXllckNvbnRyb2xsZXIubWluVGltZSA9IDA7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMg
PSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1l
U3RhbXAgPSAhW21fcGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Cisg
ICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2NsYXNzQVZWYWx1ZVRpbWluZyB2YWx1ZVRpbWlu
Z1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5j
aG9yVGltZVN0YW1wIHJhdGU6MF07CisgICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnRpbWlu
ZyA9IHRpbWluZzsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIG1fcGxh
eWVyQ29udHJvbGxlci5nZXQoKS5yYXRlID0gaXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC47
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGlt
ZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAg
IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKS5oYXNFbmFibGVkVmlkZW8gPSBoYXNWaWRlbzsKKyAg
ICBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCkuY29udGVudERpbWVuc2lvbnMgPSBDR1NpemVNYWtl
KHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRWaWRlb0xheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgW21f
cGxheWVyQ29udHJvbGxlci5nZXQoKS5wbGF5ZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgW3ZpZGVvTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIEFTU0VSVChbdmlk
ZW9MYXllciBpc0tpbmRPZkNsYXNzOltjbGFzc0FWUGxheWVyTGF5ZXIgY2xhc3NdXQorICAgICAg
ICB8fCAoW3ZpZGVvTGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dICYmIFt2aWRl
b0xheWVyIGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woQVZQbGF5ZXJMYXllcildKSk7Cisg
ICAgbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpLnBsYXllckxheWVyID0gKENBTGF5ZXI8QVZQbGF5
ZXJMYXllcj4qKXZpZGVvTGF5ZXI7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bikKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICAKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gW1tbY2xh
c3NBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCkucGxheWVyQ29udHJvbGxlciA9IChBVlBs
YXllckNvbnRyb2xsZXIgKiltX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoW21fcGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzZXREZWxlZ2F0ZTopXSkKKyAgICAgICAgICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIu
Z2V0KCkuZGVsZWdhdGUgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgIAorICAg
ICAgICBtX3ZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW2NsYXNzVUlWaWV3Q29udHJvbGxlciBh
bGxvY10gaW5pdF0pOworICAgICAgICAKKyAgICAgICAgbV93aW5kb3cgPSBbW1tjbGFzc1VJV2lu
ZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOltbY2xhc3NVSVNjcmVlbiBtYWluU2NyZWVuXSBib3Vu
ZHNdXSBhdXRvcmVsZWFzZV07CisgICAgICAgIG1fd2luZG93LmdldCgpLmJhY2tncm91bmRDb2xv
ciA9IFtjbGFzc1VJQ29sb3IgY2xlYXJDb2xvcl07CisgICAgICAgIG1fd2luZG93LmdldCgpLnJv
b3RWaWV3Q29udHJvbGxlciA9IG1fdmlld0NvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgIFttX3dp
bmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07CisgICAgICAgIAorICAgICAgICBbbV92aWV3Q29udHJv
bGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXI6bV9wbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKSBh
bmltYXRlZDpZRVMgY29tcGxldGlvbjpuaWxdOworICAgICAgICBjb21wbGV0aW9uKCk7CisgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBlbnRlckZ1bGxzY3Jl
ZW4oXnsgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4
aXRGdWxsc2NyZWVuKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uKQoreworICAgIG1f
cGxheWVyQ29udHJvbGxlci5jbGVhcigpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiBwcm90ZWN0KHRoaXMpOworICAgIAorICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIFttX3ZpZXdDb250
cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57Cisg
ICAgICAgICAgICBtX3dpbmRvdy5nZXQoKS5oaWRkZW4gPSBZRVM7CisgICAgICAgICAgICBtX3dp
bmRvdy5nZXQoKS5yb290Vmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAgICAgICAgICBtX3BsYXll
clZpZXdDb250cm9sbGVyID0gbmlsOworICAgICAgICAgICAgbV92aWV3Q29udHJvbGxlciA9IG5p
bDsKKyAgICAgICAgICAgIG1fd2luZG93ID0gbmlsOworICAgICAgICAgICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwpCisgICAgICAgICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+
ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKKyAgICAgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICAgICAgfV07CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBl
eGl0RnVsbHNjcmVlbiheeyB9KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJl
M2ZlYzdiNWE4MzRmNzE3ZGU2OGQwN2JlYjA4NjQ1ZDYyMGRjMzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworCisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsX2gKKyNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xl
UGxheVN0YXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgPSAwOworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMzYzU4ZjAxOWExOWFmYmUxOGIyYWRlZjk2ZWIzZWYyMjc4NmI1NGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVu
dExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUxheWVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U7CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGlj
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CisgICAgUmVm
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0
Zm9ybUxheWVyPiBtX2JvcnJvd2VkVmlkZW9MYXllcjsKKyAgICBib29sIG1faXNMaXN0ZW5pbmc7
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZTsKKyAgICAKK3B1YmxpYzoKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudCgpOworICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
KCkgeyB9CisgICAgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZSA9IGludGVyZmFjZTt9CisgICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCopOworICAgIAorICAgIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkNvcmU6OkV2ZW50Kikgb3ZlcnJpZGU7CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgb3ZlcnJpZGUKKyAgICAgICAge3JldHVybiBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykgPT0gJnJoczt9CisKKyAgICB2
b2lkIHJlcXVlc3RFeGl0RnVsbFNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgcGxheSgpIG92
ZXJyaWRlOworICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlT
dGF0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpOworfTsKKworfQorCisjZW5kaWYKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBm
MDNiZTYzNjUwODE3NGFlNWVlNjg2YzE1OGU2Y2FjM2IzNmRjMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudC5tbQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgorCisj
aW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRE9NRXZl
bnRMaXN0ZW5lci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9FdmVudExpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlVGhyZWFkUnVuLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKQorICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKKyAgICAsIG1faXNMaXN0
ZW5pbmd7ZmFsc2V9Cit7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCit7
CisgICAgaWYgKG1fbWVkaWFFbGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1faXNMaXN0ZW5pbmcpIHsKKyAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmR1cmF0aW9u
Y2hhbmdlRXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhdXNlRXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBs
YXlFdmVudCwgdGhpcywgZmFsc2UpOworICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50LCB0aGlzLCBmYWxzZSk7Cisg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS50
aW1ldXBkYXRlRXZlbnQsIHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9
IGZhbHNlOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50ICYmIG1fYm9ycm93ZWRWaWRlb0xheWVy
KSB7CisgICAgICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0xheWVyKG51bGxwdHIpOworICAg
ICAgICBtX21lZGlhRWxlbWVudC0+cmV0dXJuUGxhdGZvcm1MYXllcihtX2JvcnJvd2VkVmlkZW9M
YXllci5nZXQoKSk7CisgICAgICAgIG1fYm9ycm93ZWRWaWRlb0xheWVyLmNsZWFyKCk7CisgICAg
fQorCisgICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCwgdGhpcywgZmFsc2Up
OworICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYXVz
ZUV2ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCwgdGhpcywgZmFsc2UpOworICAgIG1fbWVkaWFFbGVt
ZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIHRoaXMs
IGZhbHNlKTsKKyAgICBtX21lZGlhRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkudGltZXVwZGF0ZUV2ZW50LCB0aGlzLCBmYWxzZSk7CisgICAgbV9pc0xpc3RlbmluZyA9IHRy
dWU7CisKKyAgICBpZiAoIW1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRp
YUVsZW1lbnQtPmR1cmF0aW9uKCkpOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRSYXRlKG1fbWVkaWFFbGVtZW50LT5pc1BsYXlpbmcoKSwgbV9tZWRpYUVsZW1lbnQtPnBsYXli
YWNrUmF0ZSgpKTsKKworICAgIG1fYm9ycm93ZWRWaWRlb0xheWVyID0gbV9tZWRpYUVsZW1lbnQt
PmJvcnJvd1BsYXRmb3JtTGF5ZXIoKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+
c2V0VmlkZW9MYXllcihtX2JvcnJvd2VkVmlkZW9MYXllci5nZXQoKSk7CisKKyAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9tZWRpYUVsZW1lbnQtPmN1cnJl
bnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSk7CisK
KyAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG1fbWVkaWFFbGVtZW50LmdldCgpKSkgeworICAg
ICAgICBIVE1MVmlkZW9FbGVtZW50ICp2aWRlb0VsZW1lbnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQo
bV9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCB2
aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOworICAgIH0KK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coTWVkaWEsICJoYW5kbGVFdmVu
dCAlcyIsIGV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisgICAgCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpCisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVy
YXRpb24oKSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGF1
c2VFdmVudAorICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wbGF5RXZl
bnQKKyAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZShtX21lZGlh
RWxlbWVudC0+aXNQbGF5aW5nKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50
KQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5wYXVzZSgpOworICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigp
OworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
K3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnBhdXNlKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRl
KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
ZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVu
KF57CisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKKyAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIHNldE1lZGlhRWxlbWVudChudWxscHRyKTsK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>