<?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>132568</bug_id>
          
          <creation_ts>2014-05-05 09:21:45 -0700</creation_ts>
          <short_desc>[Mac, iOS] REGRESSION: Improve YouTube compatibility in WK2</short_desc>
          <delta_ts>2014-05-07 15:00:23 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>sam</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1006645</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-05 09:21:45 -0700</bug_when>
    <thetext>Since WK2 doesn&apos;t support plugins, we need to handle YouTube URLs differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006646</commentid>
    <comment_count>1</comment_count>
      <attachid>230833</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-05 09:30:09 -0700</bug_when>
    <thetext>Created attachment 230833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006647</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-05 09:31:01 -0700</bug_when>
    <thetext>This patch is mainly just moving code so that WK1 and WK2 can share the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006648</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-05 09:31:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/11464344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006686</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-05-05 11:49:35 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Since WK2 doesn&apos;t support plugins, we need to handle YouTube URLs differently.

Just to be clear...WebKit2 does support plug-ins, just not WebKit Plug-ins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006689</commentid>
    <comment_count>5</comment_count>
      <attachid>230833</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-05-05 11:50:52 -0700</bug_when>
    <thetext>Comment on attachment 230833
Patch

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

&gt; Source/WebCore/platform/mac/WebCoreNSURLExtras.h:53
&gt; +NSURL *webkitYouTubeURL(NSURL *);

This is definitely the wrong layer for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007108</commentid>
    <comment_count>6</comment_count>
      <attachid>230939</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 15:37:18 -0700</bug_when>
    <thetext>Created attachment 230939
(Exposed symbols we don&apos;t need anymore)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007112</commentid>
    <comment_count>7</comment_count>
      <attachid>230941</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 15:45:19 -0700</bug_when>
    <thetext>Created attachment 230941
(Exported an iOS Symbol we don&apos;t need anymore)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007115</commentid>
    <comment_count>8</comment_count>
      <attachid>230944</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 15:52:04 -0700</bug_when>
    <thetext>Created attachment 230944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007166</commentid>
    <comment_count>9</comment_count>
      <attachid>230944</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-06 18:11:56 -0700</bug_when>
    <thetext>Comment on attachment 230944
Patch

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

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:30
&gt; +#include &quot;ScriptState.h&quot;

Why is this include needed?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:31
&gt; +#include &lt;bindings/ScriptObject.h&gt;

Why is this include needed?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:32
&gt; +#include &lt;wtf/RefCounted.h&gt;

This include is not needed.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:33
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Why is this include needed?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:51
&gt; +    YouTubePluginReplacement();

What is this default constructor needed for?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:56
&gt; +    virtual bool installReplacement(ShadowRoot*) override;
&gt; +
&gt; +    virtual bool willCreateRenderer() override { return m_videoElement; }
&gt; +    virtual RenderPtr&lt;RenderElement&gt; createElementRenderer(HTMLPlugInElement&amp;, PassRef&lt;RenderStyle&gt;) override;

Can these overrides be private instead of public?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:58
&gt; +    YouTubeEmbedShadowElement* parentElement() { return m_videoElement.get(); }

Can this ever be null?

It’s very confusing to call this function parentElement, when m_parentElement is something different.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:60
&gt; +    return mimeType == &quot;application/x-shockwave-flash&quot;
&gt; +        || mimeType == &quot;application/futuresplash&quot;;

MIME types normally aren’t case sensitive. Why is this doing a case sensitive check?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:65
&gt; +    return extension == &quot;spl&quot; || extension == &quot;swf&quot;;

Extensions normally aren’t case sensitive. Why is this doing a case sensitive check?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:68
&gt; +static NSMutableArray* kit(const Vector&lt;String&gt;&amp; vector)

This is a questionable function name in WebKit, but really lame in WebCore. I guess we can leave it, though.

None of this code follows our rule for where to put a &quot;*&quot; in an Objective-C type like NSMutableArray *.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:70
&gt; +    unsigned len = vector.size();

Can we just call this &quot;size&quot; instead of an abbreviated name len.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:73
&gt; +    for (unsigned x = 0; x &lt; len; x++)
&gt; +        [array addObject:vector[x]];

Should use a modern for loop instead.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:78
&gt; +    : PluginReplacement()

Why do we need to explicitly initialize the base class like this?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:87
&gt; +    , m_videoElement(nullptr)

No need for this. RefPtr is initialized to null even if you don’T initialize it explicitly.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:98
&gt; +    if (m_videoElement)
&gt; +        return m_videoElement-&gt;createElementRenderer(std::move(style));
&gt; +
&gt; +    return nullptr;

I prefer early return for the error case rather than for the success case.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:101
&gt; +static NSString* objectForKey(CFDictionaryRef dict, NSString* key)

I suggest naming this dictionary rather than &quot;dict&quot;.

But also, do we really need this function just to do a type cast? It’s also lame that this returns NSString *. Do we have a guarantee that it&apos;s a string?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:110
&gt; +    root-&gt;appendChild(m_videoElement.get(), ASSERT_NO_EXCEPTION);

No need for ASSERT_NO_EXCEPTION here. It’s the default.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:127
&gt; +    m_videoElement-&gt;appendChild(iframeElement, ASSERT_NO_EXCEPTION);

No need for ASSERT_NO_EXCEPTION here. It’s the default.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:137
&gt; +    ASSERT(videoID &amp;&amp; [videoID length] &gt; 0 &amp;&amp; ![videoID isEqualToString:@&quot;/&quot;]);

This should be three assertions.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:149
&gt; +    NSString* scheme = [url.scheme lowercaseString];
&gt; +    if (![scheme isEqualToString:@&quot;http&quot;] &amp;&amp; ![scheme isEqualToString:@&quot;https&quot;])
&gt; +        return nullptr;

WebCore::URL does operations like this better. It’s strange that this is all done with the Objective-C classes.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:167
&gt; +        if (videoID &amp;&amp; ![videoID isEqualToString:@&quot;/&quot;])
&gt; +            return createYouTubeURL(videoID, nil);
&gt; +        return nullptr;

Again, I prefer to put error cases first with early return.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:228
&gt; +    NSURL* srcURL = [NSURL URLWithString:srcString];

It’s really strange to be using NSURL here instead of WebCore::URL.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:261
&gt; +    NSString* embedSrc = query ? [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@?%@&quot;, videoID, query] : [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@&quot;, videoID];
&gt; +    
&gt; +    return embedSrc;

Seems like this should just be a return statement

&gt; Source/WebCore/platform/mac/WebCoreNSURLExtras.h:54
&gt; +NSDictionary *queryKeysAndValues(NSString*);
&gt; +NSString *unescapedQueryValue(NSString*);

Missing spaces here in NSString *.

At some point we should just use WebCore::URL for all of this. It doesn’t make sense to convert everything to NSString and NSURL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007196</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-05-06 20:48:36 -0700</bug_when>
    <thetext>I&apos;d really like this cleaned up not to use Objective-C before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007209</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 21:18:58 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 230944 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230944&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:30
&gt; &gt; +#include &quot;ScriptState.h&quot;
&gt; &gt; +#include &lt;bindings/ScriptObject.h&gt;
&gt; &gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; &gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Why [are these] include[s] needed?

They aren&apos;t needed. I&apos;ll remove them.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:51
&gt; &gt; +    YouTubePluginReplacement();
&gt; 
&gt; What is this default constructor needed for?

It&apos;s not needed. I&apos;ll remove.

&gt; &gt; +    virtual bool willCreateRenderer() override { return m_videoElement; }
&gt; &gt; +    virtual RenderPtr&lt;RenderElement&gt; createElementRenderer(HTMLPlugInElement&amp;, PassRef&lt;RenderStyle&gt;) override;
&gt; 
&gt; Can these overrides be private instead of public?

Yes, I&apos;ll move them.
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:58
&gt; &gt; +    YouTubeEmbedShadowElement* parentElement() { return m_videoElement.get(); }
&gt; 
&gt; Can this ever be null?

Yes -- it is none before the layout phase where the video element is generated.

&gt; It’s very confusing to call this function parentElement, when m_parentElement is something different.

I&apos;m using this naming based on the QuickTimePluginReplacement, upon which this code is based. However, the YouTube plugin doesn&apos;t need it, so I&apos;ll just remove the code.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:60
&gt; &gt; +    return mimeType == &quot;application/x-shockwave-flash&quot;
&gt; &gt; +        || mimeType == &quot;application/futuresplash&quot;;
&gt; 
&gt; MIME types normally aren’t case sensitive. Why is this doing a case sensitive check?

Good point! Fixed.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:65
&gt; &gt; +    return extension == &quot;spl&quot; || extension == &quot;swf&quot;;
&gt; 
&gt; Extensions normally aren’t case sensitive. Why is this doing a case sensitive check?

Ditto.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:68
&gt; &gt; +static NSMutableArray* kit(const Vector&lt;String&gt;&amp; vector)
&gt; 
&gt; This is a questionable function name in WebKit, but really lame in WebCore. I guess we can leave it, though.

I&apos;ll rename this to &quot;toNSMutableArray&quot; to be a little clearer.

&gt; None of this code follows our rule for where to put a &quot;*&quot; in an Objective-C type like NSMutableArray *.

I&apos;ll fix that.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:73
&gt; &gt; +    for (unsigned x = 0; x &lt; len; x++)
&gt; &gt; +        [array addObject:vector[x]];
&gt; 
&gt; Should use a modern for loop instead.

Done.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:78
&gt; &gt; +    : PluginReplacement()
&gt; 
&gt; Why do we need to explicitly initialize the base class like this?

I don&apos;t think we do. I&apos;ve removed it.
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:87
&gt; &gt; +    , m_videoElement(nullptr)
&gt; 
&gt; No need for this. RefPtr is initialized to null even if you don’T initialize it explicitly.

Done.
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:98
&gt; &gt; +    if (m_videoElement)
&gt; &gt; +        return m_videoElement-&gt;createElementRenderer(std::move(style));
&gt; &gt; +
&gt; &gt; +    return nullptr;
&gt; 
&gt; I prefer early return for the error case rather than for the success case.

Done.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:101
&gt; &gt; +static NSString* objectForKey(CFDictionaryRef dict, NSString* key)
&gt; 
&gt; I suggest naming this dictionary rather than &quot;dict&quot;.

Done.

&gt; But also, do we really need this function just to do a type cast? It’s also lame that this returns NSString *. Do we have a guarantee that it&apos;s a string?

Yes. We build this dictionary ourselves from two Vectors of Strings. This could probably be replaced with a HashMap, but I was trying to retain as much of the existing Cocoa-based code for this iteration. We can follow-up with a second refactoring to pure C++ types once this initial functionality is in place.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:110
&gt; &gt; +    root-&gt;appendChild(m_videoElement.get(), ASSERT_NO_EXCEPTION);
&gt; 
&gt; No need for ASSERT_NO_EXCEPTION here. It’s the default.

Done (and the other case);
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:137
&gt; &gt; +    ASSERT(videoID &amp;&amp; [videoID length] &gt; 0 &amp;&amp; ![videoID isEqualToString:@&quot;/&quot;]);
&gt; 
&gt; This should be three assertions.

Done.
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:149
&gt; &gt; +    NSString* scheme = [url.scheme lowercaseString];
&gt; &gt; +    if (![scheme isEqualToString:@&quot;http&quot;] &amp;&amp; ![scheme isEqualToString:@&quot;https&quot;])
&gt; &gt; +        return nullptr;
&gt; 
&gt; WebCore::URL does operations like this better. It’s strange that this is all done with the Objective-C classes.

I&apos;d prefer to do the conversion to C++ as a second step. This is almost all existing code moved from WebKit, so I&apos;d like to get this refactoring done first, then convert to C++.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:167
&gt; &gt; +        if (videoID &amp;&amp; ![videoID isEqualToString:@&quot;/&quot;])
&gt; &gt; +            return createYouTubeURL(videoID, nil);
&gt; &gt; +        return nullptr;
&gt; 
&gt; Again, I prefer to put error cases first with early return.

Done.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:228
&gt; &gt; +    NSURL* srcURL = [NSURL URLWithString:srcString];
&gt; 
&gt; It’s really strange to be using NSURL here instead of WebCore::URL.

See above. This is existing NSURL-based code, and I didn&apos;t want to add more complexity to the change.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:261
&gt; &gt; +    NSString* embedSrc = query ? [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@?%@&quot;, videoID, query] : [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@&quot;, videoID];
&gt; &gt; +    
&gt; &gt; +    return embedSrc;
&gt; 
&gt; Seems like this should just be a return statement

Done.

&gt; &gt; Source/WebCore/platform/mac/WebCoreNSURLExtras.h:54
&gt; &gt; +NSDictionary *queryKeysAndValues(NSString*);
&gt; &gt; +NSString *unescapedQueryValue(NSString*);
&gt; 
&gt; Missing spaces here in NSString *.

Done.

&gt; At some point we should just use WebCore::URL for all of this. It doesn’t make sense to convert everything to NSString and NSURL.

Agreed. How about if I do that next?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007210</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 21:19:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I&apos;d really like this cleaned up not to use Objective-C before landing.

*Sigh*.

Okay Sam, JavaScript it is!  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007215</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-06 21:53:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; I&apos;d really like this cleaned up not to use Objective-C before landing.
&gt; 
&gt; *Sigh*.
&gt; 
&gt; Okay Sam, JavaScript it is!  :-)

There could be performance issues on pages with large numbers of YouTube videos in &lt;enbed&gt; tags!   :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007225</commentid>
    <comment_count>14</comment_count>
      <attachid>230944</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-05-06 23:03:50 -0700</bug_when>
    <thetext>Comment on attachment 230944
Patch

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

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:260
&gt; +    // Transform the youtubeURL (youtube:VideoID) to iframe embed url which has the format: http://www.youtube.com/embed/VideoID
&gt; +    NSString* srcPath = srcURL.path;
&gt; +    NSString* videoID = [[youTubeURL absoluteString] substringFromIndex:[[youTubeURL scheme] length] + 1];
&gt; +    NSRange rangeOfVideoIDInPath = [srcPath rangeOfString:videoID];
&gt; +    if (rangeOfVideoIDInPath.location == NSNotFound)
&gt; +        return srcString;
&gt; +    
&gt; +    ASSERT(rangeOfVideoIDInPath.length);
&gt; +    
&gt; +    // From the original URL, we need to get the part before /path/VideoId.
&gt; +    NSRange rangeOfPathBeforeVideoID = [srcString rangeOfString:[srcPath substringToIndex:rangeOfVideoIDInPath.location]];
&gt; +    ASSERT(rangeOfPathBeforeVideoID.length);
&gt; +    
&gt; +    NSString* srcURLPrefix = [srcString substringToIndex:rangeOfPathBeforeVideoID.location];
&gt; +    NSString* query = srcURL.query;
&gt; +
&gt; +    // By default, the iframe will display information like the video title and uploader on top of the video. Don&apos;t display
&gt; +    // them if the embeding html doesn&apos;t specify it.
&gt; +    if (query &amp;&amp; query.length &amp;&amp; [query rangeOfString:@&quot;showinfo&quot;].location == NSNotFound)
&gt; +        query = [query stringByAppendingFormat:@&quot;&amp;showinfo=0&quot;];
&gt; +    else
&gt; +        query = @&quot;showinfo=0&quot;;
&gt; +    
&gt; +    // Append the query string if it is valid. Some sites apparently forget to add &quot;?&quot; for the query string, in that case,
&gt; +    // we will discard the parameters in the url.
&gt; +    // See: &lt;rdar://problem/11535155&gt; [Bincompat] Regression: SC2Casts app: Videos don&apos;t play in SC2Casts
&gt; +    NSString* embedSrc = query ? [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@?%@&quot;, videoID, query] : [srcURLPrefix stringByAppendingFormat:@&quot;/embed/%@&quot;, videoID];
&gt; +    

Is this all Obj-C for a reason, or just because it was moved? I don&apos;t see why any of this has to be platform-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007226</commentid>
    <comment_count>15</comment_count>
      <attachid>230944</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-06 23:05:48 -0700</bug_when>
    <thetext>Comment on attachment 230944
Patch

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

&gt;&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.mm:260
&gt;&gt; +    
&gt; 
&gt; Is this all Obj-C for a reason, or just because it was moved? I don&apos;t see why any of this has to be platform-specific.

It&apos;s because it was moved. I was hoping to avoid rewriting the entire thing just to correct the lack of WK2 support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007345</commentid>
    <comment_count>16</comment_count>
      <attachid>230944</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-05-07 09:37:03 -0700</bug_when>
    <thetext>Comment on attachment 230944
Patch

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

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:66
&gt; +    RefPtr&lt;YouTubeEmbedShadowElement&gt; m_videoElement;

Nit: This ins&apos;t a &lt;video&gt; element, so I think &quot;m_videoElement&quot; is the not the right name to use. Maybe &quot;m_embedShadowElement&quot; instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007347</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-07 09:38:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 230944 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230944&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:66
&gt; &gt; +    RefPtr&lt;YouTubeEmbedShadowElement&gt; m_videoElement;
&gt; 
&gt; Nit: This ins&apos;t a &lt;video&gt; element, so I think &quot;m_videoElement&quot; is the not the right name to use. Maybe &quot;m_embedShadowElement&quot; instead?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007396</commentid>
    <comment_count>18</comment_count>
      <attachid>231009</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-07 12:03:05 -0700</bug_when>
    <thetext>Created attachment 231009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007401</commentid>
    <comment_count>19</comment_count>
      <attachid>231009</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-05-07 12:51:54 -0700</bug_when>
    <thetext>Comment on attachment 231009
Patch

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

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:65
&gt; +    for (size_t i = 0; i &lt; paramNames.size(); ++i)

This could use a modern for loop instead.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:73
&gt; +    if (!m_videoElement)

Something like m_embedShadowElement would be a better name since it isn&apos;t a video element.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:137
&gt; +        unsigned indexAfterEqual = equalLocation + 1;

why unsigned for indexAfterEqual and size_t for equalSearchLocation?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:143
&gt; +        unsigned keyLocation = equalSearchLocation;
&gt; +        unsigned keyLength = equalLocation - equalSearchLocation;

Ditto.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:164
&gt; +        // At the end.

Nit: this comment doesn&apos;t add much.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:179
&gt; +    return input.startsWith(prefix, true);

The bool parameter to startsWith is for case-sensitivity, so this *is* doing a case sensitive search. This or the function name is wrong.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:235
&gt; +            const auto&amp; queryDict = queryKeysAndValues(query);

Nit: &quot;Dict&quot; -&gt;  &quot;Dictionary&quot;

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:242
&gt; +                const auto&amp; fragmentDict = queryKeysAndValues(url.fragmentIdentifier());

Ditto.

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:272
&gt; +                const auto&amp; queryDict = queryKeysAndValues(query);
&gt; +                String videoID;
&gt; +                const auto&amp; videoValue = queryDict.find(&quot;v&quot;);
&gt; +                if (videoValue != queryDict.end())
&gt; +                    videoID = videoValue-&gt;value;
&gt; +                
&gt; +                if (!videoID.isEmpty()) {
&gt; +                    String timeID;
&gt; +                    const auto&amp; timeValue = queryDict.find(&quot;t&quot;);
&gt; +                    if (timeValue != queryDict.end())
&gt; +                        timeID = timeValue-&gt;value;
&gt; +                    
&gt; +                    return createYouTubeURL(videoID, timeID);
&gt; +                }
&gt; +            }

Can this logic be put into a function and shared with the &quot;/watch&quot; url code above?

&gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:56
&gt; +    static void registerPluginReplacement(PluginReplacementRegistrar);
&gt; +    static bool supportsMimeType(const String&amp;);
&gt; +    static bool supportsFileExtension(const String&amp;);
&gt; +    static bool supportsURL(const URL&amp;);
&gt; +    
&gt; +    static PassRefPtr&lt;PluginReplacement&gt; create(HTMLPlugInElement&amp;, const Vector&lt;String&gt;&amp; paramNames, const Vector&lt;String&gt;&amp; paramValues);
&gt; +
&gt; +    virtual bool installReplacement(ShadowRoot*) override;
&gt; +    
&gt; +    String youTubeURL(const String&amp; rawURL);
&gt; +    
&gt; +    typedef HashMap&lt;String, String&gt; KeyValueMap;

I think these can all be marked private.

&gt; Source/WebKit/mac/ChangeLog:11
&gt; +        * Misc/WebNSURLExtras.mm: Move useful code to WebCore so that it can
&gt; +        be shared with WK2.

Is this comment still true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007416</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-07 13:27:39 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 231009 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231009&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:65
&gt; &gt; +    for (size_t i = 0; i &lt; paramNames.size(); ++i)
&gt; 
&gt; This could use a modern for loop instead.
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:73
&gt; &gt; +    if (!m_videoElement)
&gt; 
&gt; Something like m_embedShadowElement would be a better name since it isn&apos;t a video element.

Done!

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:137
&gt; &gt; +        unsigned indexAfterEqual = equalLocation + 1;
&gt; 
&gt; why unsigned for indexAfterEqual and size_t for equalSearchLocation?

This is some crud left over from when I ported the Objective C code. I&apos;ll correct this.
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:164
&gt; &gt; +        // At the end.
&gt; 
&gt; Nit: this comment doesn&apos;t add much.

Yuck! It&apos;s gone.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:179
&gt; &gt; +    return input.startsWith(prefix, true);
&gt; 
&gt; The bool parameter to startsWith is for case-sensitivity, so this *is* doing a case sensitive search. This or the function name is wrong.

The signature for &quot;startsWith&quot; is:

bool startsWith(const String&amp;, bool caseSensitive);

I meant to use &quot;false&apos; for the caseSensitive flag.

Good catch!
 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:235
&gt; &gt; +            const auto&amp; queryDict = queryKeysAndValues(query);
&gt; 
&gt; Nit: &quot;Dict&quot; -&gt;  &quot;Dictionary&quot;
&gt; 
&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:242
&gt; &gt; +                const auto&amp; fragmentDict = queryKeysAndValues(url.fragmentIdentifier());
&gt; 
&gt; Ditto.

Fixed.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.cpp:272
&gt; &gt; +                const auto&amp; queryDict = queryKeysAndValues(query);
&gt; &gt; +                String videoID;
&gt; &gt; +                const auto&amp; videoValue = queryDict.find(&quot;v&quot;);
&gt; &gt; +                if (videoValue != queryDict.end())
&gt; &gt; +                    videoID = videoValue-&gt;value;
&gt; &gt; +                
&gt; &gt; +                if (!videoID.isEmpty()) {
&gt; &gt; +                    String timeID;
&gt; &gt; +                    const auto&amp; timeValue = queryDict.find(&quot;t&quot;);
&gt; &gt; +                    if (timeValue != queryDict.end())
&gt; &gt; +                        timeID = timeValue-&gt;value;
&gt; &gt; +                    
&gt; &gt; +                    return createYouTubeURL(videoID, timeID);
&gt; &gt; +                }
&gt; &gt; +            }
&gt; 
&gt; Can this logic be put into a function and shared with the &quot;/watch&quot; url code above?

Sure.

&gt; &gt; Source/WebCore/Modules/plugins/YouTubePluginReplacement.h:56
&gt; &gt; +    static void registerPluginReplacement(PluginReplacementRegistrar);
&gt; &gt; +    static bool supportsMimeType(const String&amp;);
&gt; &gt; +    static bool supportsFileExtension(const String&amp;);
&gt; &gt; +    static bool supportsURL(const URL&amp;);
&gt; &gt; +    
&gt; &gt; +    static PassRefPtr&lt;PluginReplacement&gt; create(HTMLPlugInElement&amp;, const Vector&lt;String&gt;&amp; paramNames, const Vector&lt;String&gt;&amp; paramValues);
&gt; &gt; +
&gt; &gt; +    virtual bool installReplacement(ShadowRoot*) override;
&gt; &gt; +    
&gt; &gt; +    String youTubeURL(const String&amp; rawURL);
&gt; &gt; +    
&gt; &gt; +    typedef HashMap&lt;String, String&gt; KeyValueMap;
&gt; 
&gt; I think these can all be marked private.

All except &apos;registerPluginReplacement&apos;. Done!

&gt; &gt; Source/WebKit/mac/ChangeLog:11
&gt; &gt; +        * Misc/WebNSURLExtras.mm: Move useful code to WebCore so that it can
&gt; &gt; +        be shared with WK2.
&gt; 
&gt; Is this comment still true?

Nope. The code has been deleted. I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007450</commentid>
    <comment_count>21</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-05-07 15:00:23 -0700</bug_when>
    <thetext>Committed r168442: &lt;http://trac.webkit.org/changeset/168442&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230833</attachid>
            <date>2014-05-05 09:30:09 -0700</date>
            <delta_ts>2014-05-06 15:37:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132568-20140505092948.patch</filename>
            <type>text/plain</type>
            <size>25880</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA1LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVT
U0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOiBBZGQgbWlzc2luZyBleHBvcnQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU1VSTEV4dHJhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNV
UkxFeHRyYXMubW06IE1vdmUgc29tZSB1c2VmdWwgVVJMIGxvZ2ljIGZyb20KKyAgICAgICAgV2Vi
S2l0IHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgZWFzaWx5IHNoYXJlZCB3aXRoIFdLMi4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVlvdVR1YmVVUkwpOiBNb3ZlZCBmcm9tIFdlYkNvcmUvTWlzYy9X
ZWJOU1VSTEV4dHJhcy5oLgorICAgICAgICAoV2ViQ29yZTo6dW5lc2NhcGVkUXVlcnlWYWx1ZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cXVlcnlLZXlzQW5kVmFsdWVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjp3ZWJraXRZb3VUdWJlVVJMKTogRGl0dG8uCisKIDIwMTQtMDUtMDUg
IFJhZHUgU3RhdmlsYSAgPHN0YXZpbGFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9u
c10gRWxlbWVudHMgd2l0aCBvdmVyZmxvdzphdXRvIGFyZSBub3QgcGFpbnRlZCBpbnNpZGUgcmVn
aW9ucyB3aGVuIGZvbGxvd2luZyBhIGZsb2F0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTY4Mjg3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTcyNCw2ICs3MjQsNyBAQCBfX1pON1dlYkNvcmUxNnNjcmlwdE5hbWVUb0NvZGVF
UktOM1dURjZTCiBfX1pON1dlYkNvcmUxNnN0YXJ0T2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQ
b3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2
dGhyZWFkR2xvYmFsRGF0YUV2CiBfX1pON1dlYkNvcmUxNnRvQ0FGaWxsTW9kZVR5cGVFTlNfMTlQ
bGF0Zm9ybUNBQW5pbWF0aW9uMTJGaWxsTW9kZVR5cGVFCitfX1pON1dlYkNvcmUxNndlYmtpdFlv
dVR1YmVVUkxFUDVOU1VSTAogX19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTI0Z2V0RnJv
bVBlcnNpc3RlbnRTdG9yYWdlRVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFCiBfX1pON1dlYkNvcmUx
N0NyZWRlbnRpYWxTdG9yYWdlM2dldEVSS05TXzE1UHJvdGVjdGlvblNwYWNlRQogX19aTjdXZWJD
b3JlMTdET01JbXBsZW1lbnRhdGlvbjEzaXNYTUxNSU1FVHlwZUVSS04zV1RGNlN0cmluZ0UKQEAg
LTc3OCw2ICs3NzksNyBAQCBfX1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFwaEVSS05TXzE1
CiBfX1pON1dlYkNvcmUxOG1ha2VBbGxEaXJlY3Rvcmllc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTE4cGx1Z2luU2NyaXB0T2JqZWN0RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzEzSlNIVE1M
RWxlbWVudEUKIF9fWk43V2ViQ29yZTE4cHJveHlTZXJ2ZXJzRm9yVVJMRVJLTlNfM1VSTEVQS05T
XzE3TmV0d29ya2luZ0NvbnRleHRFCitfX1pON1dlYkNvcmUxOHF1ZXJ5S2V5c0FuZFZhbHVlc0VQ
OE5TU3RyaW5nCiBfX1pON1dlYkNvcmUxOHRocm93VGhpc1R5cGVFcnJvckVSTjNKU0M5RXhlY1N0
YXRlRVBLY1M0XwogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZyZXN1bWVBbmlt
YXRpb25zRXYKIF9fWk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjE3c3VzcGVuZEFuaW1h
dGlvbnNFdgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1VSTEV4
dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
TlNVUkxFeHRyYXMuaAkocmV2aXNpb24gMTY4Mjg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkNvcmVOU1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw1ICs0OSw5
IEBAIE5TRGF0YSAqZGF0YUZvclVSTENvbXBvbmVudFR5cGUoTlNVUkwgKiwKIE5TUmFuZ2UgcmFu
Z2VPZlVSTFNjaGVtZShOU1N0cmluZyAqKTsKIEJPT0wgaXNVc2VyVmlzaWJsZVVSTChOU1N0cmlu
ZyAqKTsKIEJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJpbmcgKik7Ci0KKyAgICAKK05T
VVJMICp3ZWJraXRZb3VUdWJlVVJMKE5TVVJMICopOworTlNEaWN0aW9uYXJ5ICpxdWVyeUtleXNB
bmRWYWx1ZXMoTlNTdHJpbmcqKTsKK05TU3RyaW5nICp1bmVzY2FwZWRRdWVyeVZhbHVlKE5TU3Ry
aW5nKik7CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMubW0JKHJldmlzaW9uIDE2
ODI4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk4Niw1ICs5ODYsMTY2IEBAIEJPT0wgbG9va3NMaWtlQWJz
b2x1dGVVUkwoTlNTdHJpbmcgKnN0cmkKICAgICAvLyBUcmltIHdoaXRlc3BhY2UgYmVjYXVzZSBf
d2ViX1VSTFdpdGhTdHJpbmcgYWxsb3dzIHdoaXRlc3BhY2UuCiAgICAgcmV0dXJuIHJhbmdlT2ZV
UkxTY2hlbWUoc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2Uoc3RyaW5nKSkubG9jYXRpb24gIT0g
TlNOb3RGb3VuZDsKIH0KLQorICAgIAorc3RhdGljIGlubGluZSBOU1VSTCAqY3JlYXRlWW91VHVi
ZVVSTChOU1N0cmluZyAqdmlkZW9JRCwgTlNTdHJpbmcgKnRpbWVJRCkKK3sKKyAgICAvLyBUaGlz
IG1ldGhvZCBjcmVhdGVzIGEgeW91dHViZTogVVJMLCB3aGljaCBpcyBhbiBpbnRlcm5hbCBmb3Jt
YXQgdGhhdCBpcyBwYXNzZWQgdG8gWW91VHViZS5hcHAuCisgICAgLy8gSWYgdGhlIGZvcm1hdCBv
ZiB0aGVzZSBpbnRlcm5hbCBsaW5rcyBpcyBjaGFuZ2VkIGJlbG93LCB0aGVuIHRoZSBhcHAgcHJv
YmFibHkgbmVlZHMgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsLgorICAgIAorICAgIEFTU0VSVCh2aWRl
b0lEICYmIFt2aWRlb0lEIGxlbmd0aF0gPiAwICYmICFbdmlkZW9JRCBpc0VxdWFsVG9TdHJpbmc6
QCIvIl0pOworICAgIAorICAgIGlmIChbdGltZUlEIGxlbmd0aF0pCisgICAgICAgIHJldHVybiBb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInlvdXR1YmU6
JUA/dD0lQCIsIHZpZGVvSUQsIHRpbWVJRF1dOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0
cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInlvdXR1YmU6JUAiLCB2aWRlb0lEXV07
Cit9CisgICAgCitOU1N0cmluZyAqdW5lc2NhcGVkUXVlcnlWYWx1ZShOU1N0cmluZyogaW5wdXQp
Cit7CisgICAgTlNNdXRhYmxlU3RyaW5nICpzdHJpbmcgPSBbW1tpbnB1dCBzdHJpbmdCeVJlcGxh
Y2luZ1BlcmNlbnRFc2NhcGVzVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gbXV0
YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoIXN0cmluZykgeworICAgICAgICAvLyBJ
ZiB3ZSBmYWlsZWQgdG8gZGVjb2RlIHRoZSBVUkwgYXMgVVRGOCwgZmFsbCBiYWNrIHRvIExhdGlu
MQorICAgICAgICBzdHJpbmcgPSBbW1tpbnB1dCBzdHJpbmdCeVJlcGxhY2luZ1BlcmNlbnRFc2Nh
cGVzVXNpbmdFbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSBtdXRhYmxlQ29weV0g
YXV0b3JlbGVhc2VdOworICAgICAgICBbc3RyaW5nIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5n
OkAiKyIgd2l0aFN0cmluZzpAIiAiIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSldOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nOwor
fQorICAgIAorTlNEaWN0aW9uYXJ5ICpxdWVyeUtleXNBbmRWYWx1ZXMoTlNTdHJpbmcqIHF1ZXJ5
U3RyaW5nKQoreworICAgIHVuc2lnbmVkIHF1ZXJ5TGVuZ3RoID0gW3F1ZXJ5U3RyaW5nIGxlbmd0
aF07CisgICAgaWYgKCFxdWVyeUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpxdWVyeUtleXNBbmRWYWx1ZXMgPSBuaWw7CisgICAgTlNS
YW5nZSBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgcXVlcnlMZW5ndGgpOworICAg
IAorICAgIHdoaWxlIChlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9uIDwgcXVlcnlMZW5ndGggLSAx
ICYmIGVxdWFsU2VhcmNoUmFuZ2UubGVuZ3RoKSB7CisgICAgICAgIAorICAgICAgICAvLyBTZWFy
Y2ggZm9yICI9Ii4KKyAgICAgICAgTlNSYW5nZSBlcXVhbFJhbmdlID0gW3F1ZXJ5U3RyaW5nIHJh
bmdlT2ZTdHJpbmc6QCI9IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTplcXVhbFNlYXJj
aFJhbmdlXTsKKyAgICAgICAgaWYgKGVxdWFsUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRl
ckVxdWFsID0gZXF1YWxSYW5nZS5sb2NhdGlvbiArIDE7CisgICAgICAgIGlmIChpbmRleEFmdGVy
RXF1YWwgPiBxdWVyeUxlbmd0aCAtIDEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgICAgIC8vIEdldCB0aGUga2V5IGJlZm9yZSB0aGUgIj0iLgorICAgICAgICBOU1JhbmdlIGtl
eVJhbmdlID0gTlNNYWtlUmFuZ2UoZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiwgZXF1YWxSYW5n
ZS5sb2NhdGlvbiAtIGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRpb24pOworICAgICAgICAKKyAgICAg
ICAgLy8gU2VhY2ggZm9yIHRoZSBhbXBlcnNhbmQuCisgICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5k
U2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1YWwsIHF1ZXJ5TGVuZ3RoIC0g
aW5kZXhBZnRlckVxdWFsKTsKKyAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmRSYW5nZSA9IFtxdWVy
eVN0cmluZyByYW5nZU9mU3RyaW5nOkAiJiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6
YW1wZXJzYW5kU2VhcmNoUmFuZ2VdOworICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSB2YWx1
ZSBhZnRlciB0aGUgIj0iLCBiZWZvcmUgdGhlIGFtcGVyc2FuZC4KKyAgICAgICAgTlNSYW5nZSB2
YWx1ZVJhbmdlOworICAgICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkKKyAgICAgICAgICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1
YWwsIGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uIC0gaW5kZXhBZnRlckVxdWFsKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdmFsdWVSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVh
bCwgcXVlcnlMZW5ndGggLSBpbmRleEFmdGVyRXF1YWwpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAvLyBTYXZlIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZS4KKyAgICAgICAgaWYgKGtleVJhbmdl
Lmxlbmd0aCAmJiB2YWx1ZVJhbmdlLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHF1ZXJ5S2V5
c0FuZFZhbHVlcyA9PSBuaWwpCisgICAgICAgICAgICAgICAgcXVlcnlLZXlzQW5kVmFsdWVzID0g
W05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisgICAgICAgICAgICBOU1N0cmluZyAq
a2V5ID0gW1txdWVyeVN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6a2V5UmFuZ2VdIGxvd2VyY2Fz
ZVN0cmluZ107CisgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB1bmVzY2FwZWRRdWVyeVZh
bHVlKFtxdWVyeVN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6dmFsdWVSYW5nZV0pOworICAgICAg
ICAgICAgaWYgKFtrZXkgbGVuZ3RoXSAmJiBbdmFsdWUgbGVuZ3RoXSkKKyAgICAgICAgICAgICAg
ICBbcXVlcnlLZXlzQW5kVmFsdWVzIHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6a2V5XTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhlIGVuZC4KKyAgICAgICAgaWYgKGFtcGVy
c2FuZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZyBhZnRlciB0aGUgYW1wZXJzYW5k
LgorICAgICAgICB1bnNpZ25lZCBpbmRleEFmdGVyQW1wZXJzYW5kID0gYW1wZXJzYW5kUmFuZ2Uu
bG9jYXRpb24gKyAxOworICAgICAgICBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoaW5k
ZXhBZnRlckFtcGVyc2FuZCwgcXVlcnlMZW5ndGggLSBpbmRleEFmdGVyQW1wZXJzYW5kKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHF1ZXJ5S2V5c0FuZFZhbHVlczsKK30KKyAgICAKK05TVVJM
ICp3ZWJraXRZb3VUdWJlVVJMKE5TVVJMICp1cmwpCit7CisgICAgLy8gQmFpbCBvdXQgZWFybHkg
aWYgd2UgYXJlbid0IGV2ZW4gb24gd3d3LnlvdXR1YmUuY29tIG9yIHlvdXR1YmUuY29tLgorICAg
IE5TU3RyaW5nICpzY2hlbWUgPSBbW3VybCBzY2hlbWVdIGxvd2VyY2FzZVN0cmluZ107CisgICAg
aWYgKCFbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSAmJiAhW3NjaGVtZSBpc0VxdWFs
VG9TdHJpbmc6QCJodHRwcyJdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIE5TU3Ry
aW5nICpob3N0TmFtZSA9IFtbdXJsIGhvc3RdIGxvd2VyY2FzZVN0cmluZ107CisgICAgQk9PTCBp
c1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwgPSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAibS55
b3V0dWJlLmNvbSJdOworICAgIEJPT0wgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gW2hvc3ROYW1l
IGlzRXF1YWxUb1N0cmluZzpAInlvdXR1LmJlIl07CisgICAgaWYgKCFpc1lvdVR1YmVNb2JpbGVX
ZWJBcHBVUkwKKyAgICAgICAgJiYgIWlzWW91VHViZVNob3J0ZW5lZFVSTAorICAgICAgICAmJiAh
W2hvc3ROYW1lIGlzRXF1YWxUb1N0cmluZzpAInd3dy55b3V0dWJlLmNvbSJdCisgICAgICAgICYm
ICFbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAieW91dHViZS5jb20iXSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBOU1N0cmluZyAqcGF0aCA9IFt1cmwgcGF0aF07CisgICAgCisg
ICAgLy8gU2hvcnQgVVJMIG9mIHRoZSBmb3JtOiBodHRwOi8veW91dHUuYmUvdjFkMzAxRAorICAg
IGlmIChpc1lvdVR1YmVTaG9ydGVuZWRVUkwpIHsKKyAgICAgICAgTlNTdHJpbmcgKnZpZGVvSUQg
PSBbcGF0aCBsYXN0UGF0aENvbXBvbmVudF07CisgICAgICAgIGlmICh2aWRlb0lEICYmICFbdmlk
ZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91
VHViZVVSTCh2aWRlb0lELCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICAK
KyAgICBOU1N0cmluZyAqcXVlcnkgPSBbdXJsIHF1ZXJ5XTsKKyAgICBOU1N0cmluZyAqZnJhZ21l
bnQgPSBbdXJsIGZyYWdtZW50XTsKKyAgICAKKyAgICAvLyBPbiB0aGUgWW91VHViZSBtb2JpbGUg
d2ViIGFwcCwgdGhlIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBhcmUgcHV0IGludG8gdGhlCisgICAg
Ly8gZnJhZ21lbnQgc28gdGhhdCBvbmUgd2ViIHBhZ2UgaXMgb25seSBldmVyIGxvYWRlZCAoc2Vl
IDxyZGFyOi8vcHJvYmxlbS85NTUwNjM5PikuCisgICAgaWYgKGlzWW91VHViZU1vYmlsZVdlYkFw
cFVSTCkgeworICAgICAgICBOU1JhbmdlIHJhbmdlID0gW2ZyYWdtZW50IHJhbmdlT2ZTdHJpbmc6
QCI/Il07CisgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAg
ICAgICAgICBwYXRoID0gZnJhZ21lbnQ7CisgICAgICAgICAgICBxdWVyeSA9IG5pbDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhdGggPSBbZnJhZ21lbnQgc3Vic3RyaW5nVG9JbmRl
eDpyYW5nZS5sb2NhdGlvbl07CisgICAgICAgICAgICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJp
bmdGcm9tSW5kZXg6KHJhbmdlLmxvY2F0aW9uICsgMSldOworICAgICAgICB9CisgICAgICAgIGZy
YWdtZW50ID0gbmlsOworICAgIH0KKyAgICAKKyAgICBpZiAoW1twYXRoIGxvd2VyY2FzZVN0cmlu
Z10gaXNFcXVhbFRvU3RyaW5nOkAiL3dhdGNoIl0pIHsKKyAgICAgICAgaWYgKFtxdWVyeSBsZW5n
dGhdKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtxdWVyeUtleXNBbmRWYWx1
ZXMocXVlcnkpIG9iamVjdEZvcktleTpAInYiXTsKKyAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7
CisgICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpmcmFnbWVudERpY3QgPSBxdWVyeUtleXNB
bmRWYWx1ZXMoW3VybCBmcmFnbWVudF0pOworICAgICAgICAgICAgICAgIE5TU3RyaW5nICp0aW1l
SUQgPSBbZnJhZ21lbnREaWN0IG9iamVjdEZvcktleTpAInQiXTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0aW1lSUQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNYXkgYmUgYSBuZXctc3R5bGUgbGluayAo
c2VlIDxyZGFyOi8vcHJvYmxlbS83NzMzNjkyPikuCisgICAgICAgIGlmIChbZnJhZ21lbnQgaGFz
UHJlZml4OkAiISJdKSB7CisgICAgICAgICAgICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJpbmdG
cm9tSW5kZXg6MV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChbcXVlcnkgbGVuZ3Ro
XSkgeworICAgICAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqcXVlcnlEaWN0ID0gcXVlcnlLZXlz
QW5kVmFsdWVzKHF1ZXJ5KTsKKyAgICAgICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtx
dWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAidiJdOworICAgICAgICAgICAgICAgIGlmICh2aWRlb0lE
KSB7CisgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICp0aW1lSUQgPSBbcXVlcnlEaWN0IG9i
amVjdEZvcktleTpAInQiXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1
YmVVUkwodmlkZW9JRCwgdGltZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGhhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeChwYXRo
LCBAIi92LyIpIHx8IGhhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeChwYXRoLCBAIi9lLyIpKSB7Cisg
ICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhlc2UgVVJMcyBhcmUgZnVubnkgLSB0aGV5IGRvbid0IGhhdmUg
YSA/IGZvciB0aGUgZmlyc3QgcXVlcnkgcGFyYW1ldGVyLgorICAgICAgICAvLyBTdHJpcCBhbGwg
Y2hhcmFjdGVycyBhZnRlciBhbmQgaW5jbHVkaW5nICcmJyB0byByZW1vdmUgZXh0cmFuZW91cyBw
YXJhbWV0ZXJzIGFmdGVyIHRoZSB2aWRlbyBJRC4KKyAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmQg
PSBbdmlkZW9JRCByYW5nZU9mU3RyaW5nOkAiJiJdOworICAgICAgICBpZiAoYW1wZXJzYW5kLmxv
Y2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgICAgICB2aWRlb0lEID0gW3ZpZGVvSUQgc3Vi
c3RyaW5nVG9JbmRleDphbXBlcnNhbmQubG9jYXRpb25dOworICAgICAgICAKKyAgICAgICAgaWYg
KHZpZGVvSUQpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCBu
aWwpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4Mjg4KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMDUt
MDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hYywg
aU9TXSBSRUdSRVNTSU9OOiBXSzIgWW91VHViZSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI1NjgKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzExNDY0MzQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4p
OiBSZXZpc2UgZm9yIG5ldyBjYWxsCisgICAgICAgIGxvY2F0aW9ucyBvZiBOU1VSTCBleHRlbnNp
b25zIGluIFdlYkNvcmUuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
aW9zL1dlYkZyYW1lTG9hZGVyQ2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpraXQpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlcGxhY2VPYmpl
Y3RPckVtYmVkV2l0aElGcmFtZSk6IEFkZGVkLgorCiAyMDE0LTA1LTA1ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgaU9TIGJ1aWxkLgpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDE2ODI4NykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM4LDkgKzEzMzgsOCBAQCBQYXNzUmVm
UHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIFBsdWdpblZpZXc6OmNyZWF0ZShwbHVnaW5FbGVtZW50LCBwbHVnaW4ucmVsZWFz
ZSgpLCBwYXJhbWV0ZXJzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsdWdpbkVsZW1lbnQp
OwotICAgIHJldHVybiAwOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiByZXBsYWNl
T2JqZWN0T3JFbWJlZFdpdGhJRnJhbWUocGx1Z2luRWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CiAjZW5kaWYKIH0KIApAQCAtMTU5
Niw1ICsxNTk1LDUgQEAgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBXZWJGcgog
ICAgIFJlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjb250ZXh0ID0gV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKG1fZnJhbWUpOwogICAgIHJldHVybiBjb250ZXh0LnJl
bGVhc2UoKTsKIH0KLQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxNjgyODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw2ICsxODYsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
cmVjcmVhdGVQbHVnaW4oV2ViQ29yZTo6V2lkZ2V0Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KSBv
dmVycmlkZTsKICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OldpZGdldD4gcmVwbGFjZU9iamVjdE9yRW1iZWRXaXRoSUZyYW1lKFdlYkNvcmU6
OkhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wgbG9hZE1h
bnVhbGx5KTsKKyNlbmRpZgorICAgIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OldlYkdMTG9hZFBvbGljeSB3ZWJHTFBvbGljeUZvclVSTChjb25zdCBTdHJpbmcmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSByZXNv
bHZlV2ViR0xQb2xpY3lGb3JVUkwoY29uc3QgU3RyaW5nJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJGcmFtZUxv
YWRlckNsaWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJGcmFtZUxvYWRlckNsaWVudElPUy5tbQkocmV2aXNpb24g
MTY4Mjg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3Mv
V2ViRnJhbWVMb2FkZXJDbGllbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDEw
IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0
b3J5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1l
bnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgogI2ltcG9ydCA8V2ViRnJhbWUuaD4KICNpbXBvcnQgPFdlYlBhZ2UuaD4KQEAgLTkzLDcgKzk3
LDY5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3QKICAgICAgICAg
fQogICAgIH0KIH0KLQorICAgIAorc3RhdGljIE5TTXV0YWJsZUFycmF5KiBraXQoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHZlY3RvcikKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2ZWN0b3Iuc2l6ZSgp
OworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTpsZW5dOworICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBsZW47IHgrKykKKyAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDp2ZWN0b3JbeF1dOworICAgIHJldHVybiBhcnJheTsKK30K
KyAgICAKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVwbGFjZU9i
amVjdE9yRW1iZWRXaXRoSUZyYW1lKEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBV
UkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpCit7CisgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gbWltZVR5cGU7CisgICAgCisgICAg
Ly8gU2VlIGlmIHRoaXMgaXMgYSBZb3VUdWJlIEZsYXNoIHBsdWctaW4KKyAgICBpZiAoIVtNSU1F
VHlwZSBpc0VxdWFsVG9TdHJpbmc6QCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzOmtpdChwYXJhbVZhbHVlcykgZm9y
S2V5czpraXQocGFyYW1OYW1lcyldOworICAgIE5TU3RyaW5nICpzcmNTdHJpbmcgPSBbYXR0cmli
dXRlcyBvYmplY3RGb3JLZXk6QCJzcmMiXTsKKyAgICBpZiAoIXNyY1N0cmluZykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgTlNVUkwgKnNyY1VSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOnNyY1N0cmluZ107CisgICAgTlNVUkwgKnlvdXR1YmVVUkwgPSB3ZWJraXRZb3VUdWJl
VVJMKHNyY1VSTCk7CisgICAgaWYgKCFzcmNVUkwgfHwgIXlvdXR1YmVVUkwpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIC8vIFRyYW5zZm9ybSB0aGUgeW91dHViZVVSTCAoeW91
dHViZTpWaWRlb0lEKSB0byBpZnJhbWUgZW1iZWQgdXJsIHdoaWNoIGhhcyB0aGUgZm9ybWF0OiBo
dHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1ZpZGVvSUQKKyAgICBOU1N0cmluZyAqc3JjUGF0
aCA9IFtzcmNVUkwgcGF0aF07CisgICAgTlNTdHJpbmcgKnZpZGVvSUQgPSBbW3lvdXR1YmVVUkwg
YWJzb2x1dGVTdHJpbmddIHN1YnN0cmluZ0Zyb21JbmRleDpbW3lvdXR1YmVVUkwgc2NoZW1lXSBs
ZW5ndGhdICsgMV07CisgICAgTlNSYW5nZSByYW5nZU9mVmlkZW9JREluUGF0aCA9IFtzcmNQYXRo
IHJhbmdlT2ZTdHJpbmc6dmlkZW9JRF07CisgICAgaWYgKHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxv
Y2F0aW9uID09IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAg
IEFTU0VSVChyYW5nZU9mVmlkZW9JREluUGF0aC5sZW5ndGgpOworICAgICAgICAKKyAgICAvLyBG
cm9tIHRoZSBvcmlnaW5hbCBVUkwsIHdlIG5lZWQgdG8gZ2V0IHRoZSBwYXJ0IGJlZm9yZSAvcGF0
aC9WaWRlb0lkLgorICAgIE5TUmFuZ2UgcmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lEID0gW3NyY1N0
cmluZyByYW5nZU9mU3RyaW5nOltzcmNQYXRoIHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2VPZlZpZGVv
SURJblBhdGgubG9jYXRpb25dXTsKKyAgICBBU1NFUlQocmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lE
Lmxlbmd0aCk7CisgICAgICAgIAorICAgIE5TU3RyaW5nICpzcmNVUkxQcmVmaXggPSBbc3JjU3Ry
aW5nIHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lELmxvY2F0aW9uXTsK
KyAgICBOU1N0cmluZyAqcXVlcnkgPSBbc3JjVVJMIHF1ZXJ5XTsKKyAgICAvLyBCeSBkZWZhdWx0
LCB0aGUgaWZyYW1lIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBsaWtlIHRoZSB2aWRlbyB0aXRs
ZSBhbmQgdXBsb2FkZXIgb24gdG9wIG9mIHRoZSB2aWRlby4gRG9uJ3QgZGlzcGxheQorICAgIC8v
IHRoZW0gaWYgdGhlIGVtYmVkaW5nIGh0bWwgZG9lc24ndCBzcGVjaWZ5IGl0LgorICAgIGlmIChx
dWVyeSAmJiBbcXVlcnkgbGVuZ3RoXSAmJiBbcXVlcnkgcmFuZ2VPZlN0cmluZzpAInNob3dpbmZv
Il0ubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcXVlcnkgPSBbcXVlcnkgc3RyaW5n
QnlBcHBlbmRpbmdGb3JtYXQ6QCImc2hvd2luZm89MCJdOworICAgIGVsc2UKKyAgICAgICAgcXVl
cnkgPSBAInNob3dpbmZvPTAiOworICAgIAorICAgIC8vIEFwcGVuZCB0aGUgcXVlcnkgc3RyaW5n
IGlmIGl0IGlzIHZhbGlkLiBTb21lIHNpdGVzIGFwcGFyZW50bHkgZm9yZ2V0IHRvIGFkZCAiPyIg
Zm9yIHRoZSBxdWVyeSBzdHJpbmcsIGluIHRoYXQgY2FzZSwKKyAgICAvLyB3ZSB3aWxsIGRpc2Nh
cmQgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIHVybC4KKyAgICAvLyBTZWU6IDxyZGFyOi8vcHJvYmxl
bS8xMTUzNTE1NT4gW0JpbmNvbXBhdF0gUmVncmVzc2lvbjogU0MyQ2FzdHMgYXBwOiBWaWRlb3Mg
ZG9uJ3QgcGxheSBpbiBTQzJDYXN0cworICAgIE5TU3RyaW5nICplbWJlZFNyYyA9IHF1ZXJ5ID8g
W3NyY1VSTFByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIi9lbWJlZC8lQD8lQCIsIHZp
ZGVvSUQsIHF1ZXJ5XSA6IFtzcmNVUkxQcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIv
ZW1iZWQvJUAiLCB2aWRlb0lEXTsKKyAgICAKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSkgeworICAgICAgICAvLyBDcmVhdGUgYSBzaGFkb3cgc3VidHJlZSBmb3IgdGhlIHBs
dWdpbiBlbGVtZW50LCB0aGUgaWZyYW1lIHBsYXllciBpcyBpbmplY3RlZCBpbiB0aGUgc2hhZG93
IHRyZWUuCisgICAgICAgIHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudCgqZWxlbWVudCkuY3JlYXRl
U2hhZG93SUZyYW1lU3VidHJlZShlbWJlZFNyYyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjgyODgpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAxNC0wNS0wNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBbTWFjLCBpT1NdIFJFR1JFU1NJT046IFdLMiBZb3VUdWJlIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjU2OAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTE0NjQzNDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0cmFzLmg6CisgICAgICAgICogTWlzYy9X
ZWJOU1VSTEV4dHJhcy5tbTogTW92ZSB1c2VmdWwgY29kZSB0byBXZWJDb3JlIHNvIHRoYXQgaXQg
Y2FuCisgICAgICAgIGJlIHNoYXJlZCB3aXRoIFdLMi4KKyAgICAgICAgKC1bTlNVUkwgX3dlYmtp
dF95b3VUdWJlVVJMXSk6CisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfcXVlcnlLZXlzQW5k
VmFsdWVzXSk6CisgICAgICAgIChjcmVhdGVZb3VUdWJlVVJMKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bTlNTdHJpbmcgX3dlYmtpdF91bmVzY2FwZWRRdWVyeVZhbHVlXSk6IERlbGV0ZWQuCisKIDIw
MTQtMDUtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIElt
cGxlbWVudCBuZXcgZGVsZWdhdGUgbWV0aG9kIC1zaGFyaW5nU2VydmljZTpzb3VyY2VGcmFtZU9u
U2NyZWVuRm9yU2hhcmVJdGVtOi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNV
UkxFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJM
RXh0cmFzLmgJKHJldmlzaW9uIDE2ODI4NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
TlNVUkxFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw2IEBAIEBpbnRlcmZh
Y2UgTlNTdHJpbmcgKFdlYk5TVVJMRXh0cmFzKQogLSAoTlNTdHJpbmcgKilfd2Via2l0X3Njcmlw
dElmSmF2YVNjcmlwdFVSTDsKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKLS0gKE5TU3RyaW5nICop
X3dlYmtpdF91bmVzY2FwZWRRdWVyeVZhbHVlOwogLSAoTlNEaWN0aW9uYXJ5ICopX3dlYmtpdF9x
dWVyeUtleXNBbmRWYWx1ZXM7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJOU1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYk5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAxNjgyODcpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsOTggKzI3NCw5
IEBAIC0gKE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJMT3JTY2hlbWVsZXMKIH0KIAogI2lmIFBM
QVRGT1JNKElPUykKLXN0YXRpYyBpbmxpbmUgTlNVUkwgKmNyZWF0ZVlvdVR1YmVVUkwoTlNTdHJp
bmcgKnZpZGVvSUQsIE5TU3RyaW5nICp0aW1lSUQpCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgY3Jl
YXRlcyBhIHlvdXR1YmU6IFVSTCwgd2hpY2ggaXMgYW4gaW50ZXJuYWwgZm9ybWF0IHRoYXQgaXMg
cGFzc2VkIHRvIFlvdVR1YmUuYXBwLgotICAgIC8vIElmIHRoZSBmb3JtYXQgb2YgdGhlc2UgaW50
ZXJuYWwgbGlua3MgaXMgY2hhbmdlZCBiZWxvdywgdGhlbiB0aGUgYXBwIHByb2JhYmx5IG5lZWRz
IHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KLQotICAgIEFTU0VSVCh2aWRlb0lEICYmIFt2aWRlb0lE
IGxlbmd0aF0gPiAwICYmICFbdmlkZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pOwotCi0gICAg
aWYgKFt0aW1lSUQgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5n
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieW91dHViZTolQD90PSVAIiwgdmlkZW9JRCwg
dGltZUlEXV07Ci0gICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAieW91dHViZTolQCIsIHZpZGVvSURdXTsKLX0KLQogLSAoTlNVUkwgKilf
d2Via2l0X3lvdVR1YmVVUkwKIHsKLSAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB3ZSBhcmVuJ3Qg
ZXZlbiBvbiB3d3cueW91dHViZS5jb20gb3IgeW91dHViZS5jb20uCi0gICAgTlNTdHJpbmcgKnNj
aGVtZSA9IFtbc2VsZiBzY2hlbWVdIGxvd2VyY2FzZVN0cmluZ107Ci0gICAgaWYgKCFbc2NoZW1l
IGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSAmJiAhW3NjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJo
dHRwcyJdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNTdHJpbmcgKmhvc3ROYW1lID0g
W1tzZWxmIGhvc3RdIGxvd2VyY2FzZVN0cmluZ107Ci0gICAgQk9PTCBpc1lvdVR1YmVNb2JpbGVX
ZWJBcHBVUkwgPSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAibS55b3V0dWJlLmNvbSJdOwot
ICAgIEJPT0wgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAInlvdXR1LmJlIl07Ci0gICAgaWYgKCFpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwKLSAgICAg
ICAgJiYgIWlzWW91VHViZVNob3J0ZW5lZFVSTAotICAgICAgICAmJiAhW2hvc3ROYW1lIGlzRXF1
YWxUb1N0cmluZzpAInd3dy55b3V0dWJlLmNvbSJdCi0gICAgICAgICYmICFbaG9zdE5hbWUgaXNF
cXVhbFRvU3RyaW5nOkAieW91dHViZS5jb20iXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IE5TU3RyaW5nICpwYXRoID0gW3NlbGYgcGF0aF07Ci0KLSAgICAvLyBTaG9ydCBVUkwgb2YgdGhl
IGZvcm06IGh0dHA6Ly95b3V0dS5iZS92MWQzMDFECi0gICAgaWYgKGlzWW91VHViZVNob3J0ZW5l
ZFVSTCkgewotICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9u
ZW50XTsKLSAgICAgICAgaWYgKHZpZGVvSUQgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmluZzpA
Ii8iXSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgTlNTdHJpbmcgKnF1ZXJ5ID0gW3Nl
bGYgcXVlcnldOwotICAgIE5TU3RyaW5nICpmcmFnbWVudCA9IFtzZWxmIGZyYWdtZW50XTsKLQot
ICAgIC8vIE9uIHRoZSBZb3VUdWJlIG1vYmlsZSB3ZWIgYXBwLCB0aGUgcGF0aCBhbmQgcXVlcnkg
c3RyaW5nIGFyZSBwdXQgaW50byB0aGUKLSAgICAvLyBmcmFnbWVudCBzbyB0aGF0IG9uZSB3ZWIg
cGFnZSBpcyBvbmx5IGV2ZXIgbG9hZGVkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzk1NTA2Mzk+KS4K
LSAgICBpZiAoaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMKSB7Ci0gICAgICAgIE5TUmFuZ2UgcmFu
Z2UgPSBbZnJhZ21lbnQgcmFuZ2VPZlN0cmluZzpAIj8iXTsKLSAgICAgICAgaWYgKHJhbmdlLmxv
Y2F0aW9uID09IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAgIHBhdGggPSBmcmFnbWVudDsKLSAg
ICAgICAgICAgIHF1ZXJ5ID0gbmlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGF0
aCA9IFtmcmFnbWVudCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9uXTsKLSAgICAgICAg
ICAgIHF1ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoocmFuZ2UubG9jYXRpb24g
KyAxKV07Ci0gICAgICAgIH0KLSAgICAgICAgZnJhZ21lbnQgPSBuaWw7Ci0gICAgfQotCi0gICAg
aWYgKFtbcGF0aCBsb3dlcmNhc2VTdHJpbmddIGlzRXF1YWxUb1N0cmluZzpAIi93YXRjaCJdKSB7
Ci0gICAgICAgIGlmIChbcXVlcnkgbGVuZ3RoXSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnZp
ZGVvSUQgPSBbW3F1ZXJ5IF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXSBvYmplY3RGb3JLZXk6
QCJ2Il07Ci0gICAgICAgICAgICBpZiAodmlkZW9JRCkgewotICAgICAgICAgICAgICAgIE5TRGlj
dGlvbmFyeSAqZnJhZ21lbnREaWN0ID0gW1tzZWxmIGZyYWdtZW50XSBfd2Via2l0X3F1ZXJ5S2V5
c0FuZFZhbHVlc107Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnRpbWVJRCA9IFtmcmFnbWVu
dERpY3Qgb2JqZWN0Rm9yS2V5OkAidCJdOwotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVZ
b3VUdWJlVVJMKHZpZGVvSUQsIHRpbWVJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBNYXkgYmUgYSBuZXctc3R5bGUgbGluayAoc2VlIDxyZGFyOi8vcHJvYmxlbS83
NzMzNjkyPikuCi0gICAgICAgIGlmIChbZnJhZ21lbnQgaGFzUHJlZml4OkAiISJdKSB7Ci0gICAg
ICAgICAgICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJpbmdGcm9tSW5kZXg6MV07Ci0KLSAgICAg
ICAgICAgIGlmIChbcXVlcnkgbGVuZ3RoXSkgewotICAgICAgICAgICAgICAgIE5TRGljdGlvbmFy
eSAqcXVlcnlEaWN0ID0gW3F1ZXJ5IF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXTsKLSAgICAg
ICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAi
diJdOwotICAgICAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7Ci0gICAgICAgICAgICAgICAgICAg
IE5TU3RyaW5nICp0aW1lSUQgPSBbcXVlcnlEaWN0IG9iamVjdEZvcktleTpAInQiXTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgdGltZUlEKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKFtwYXRoIF93ZWJfaGFzQ2FzZUluc2Vuc2l0aXZlUHJlZml4OkAiL3YvIl0gfHwgW3BhdGgg
X3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCIvZS8iXSkgewotICAgICAgICBOU1N0cmlu
ZyAqdmlkZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9uZW50XTsKLQotICAgICAgICAvLyBUaGVz
ZSBVUkxzIGFyZSBmdW5ueSAtIHRoZXkgZG9uJ3QgaGF2ZSBhID8gZm9yIHRoZSBmaXJzdCBxdWVy
eSBwYXJhbWV0ZXIuCi0gICAgICAgIC8vIFN0cmlwIGFsbCBjaGFyYWN0ZXJzIGFmdGVyIGFuZCBp
bmNsdWRpbmcgJyYnIHRvIHJlbW92ZSBleHRyYW5lb3VzIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIHZp
ZGVvIElELgotICAgICAgICBOU1JhbmdlIGFtcGVyc2FuZCA9IFt2aWRlb0lEIHJhbmdlT2ZTdHJp
bmc6QCImIl07Ci0gICAgICAgIGlmIChhbXBlcnNhbmQubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkK
LSAgICAgICAgICAgIHZpZGVvSUQgPSBbdmlkZW9JRCBzdWJzdHJpbmdUb0luZGV4OmFtcGVyc2Fu
ZC5sb2NhdGlvbl07Ci0KLSAgICAgICAgaWYgKHZpZGVvSUQpCi0gICAgICAgICAgICByZXR1cm4g
Y3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCBuaWwpOwotICAgIH0KLQotICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIHdlYmtpdFlvdVR1YmVVUkwoc2VsZik7CiB9CiAKICsgKE5TVVJMICopdW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydDooTlNTdHJpbmcgKilyZWxhdGl2ZVBhcnQKQEAgLTQ5Miw2
OSArNDAzLDkgQEAgLSAoTlNTdHJpbmcgKilfd2Via2l0X1VSTEZyYWdtZW50CiAKICNpZiBQTEFU
Rk9STShJT1MpCiAKLS0gKE5TU3RyaW5nICopX3dlYmtpdF91bmVzY2FwZWRRdWVyeVZhbHVlCi17
Ci0gICAgTlNNdXRhYmxlU3RyaW5nICpzdHJpbmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVwbGFjaW5n
UGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBtdXRhYmxl
Q29weV0gYXV0b3JlbGVhc2VdOwotICAgIGlmICghc3RyaW5nKSAvLyBJZiB3ZSBmYWlsZWQgdG8g
ZGVjb2RlIHRoZSBVUkwgYXMgVVRGOCwgZmFsbCBiYWNrIHRvIExhdGluMQotICAgICAgICBzdHJp
bmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVwbGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5n
Ok5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Ci0g
ICAgW3N0cmluZyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpAIisiIHdpdGhTdHJpbmc6QCIg
IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxl
bmd0aF0pXTsKLSAgICByZXR1cm4gc3RyaW5nOwotfQotCiAtIChOU0RpY3Rpb25hcnkgKilfd2Vi
a2l0X3F1ZXJ5S2V5c0FuZFZhbHVlcwogewotICAgIHVuc2lnbmVkIHF1ZXJ5TGVuZ3RoID0gW3Nl
bGYgbGVuZ3RoXTsKLSAgICBpZiAoIXF1ZXJ5TGVuZ3RoKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnF1ZXJ5S2V5c0FuZFZhbHVlcyA9IG5pbDsK
LSAgICBOU1JhbmdlIGVxdWFsU2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBxdWVyeUxlbmd0
aCk7Ci0gICAgCi0gICAgd2hpbGUgKGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRpb24gPCBxdWVyeUxl
bmd0aCAtIDEgJiYgZXF1YWxTZWFyY2hSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAgCi0gICAgICAg
IC8vIFNlYXJjaCBmb3IgIj0iLgotICAgICAgICBOU1JhbmdlIGVxdWFsUmFuZ2UgPSBbc2VsZiBy
YW5nZU9mU3RyaW5nOkAiPSIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6ZXF1YWxTZWFy
Y2hSYW5nZV07Ci0gICAgICAgIGlmIChlcXVhbFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGluZGV4QWZ0
ZXJFcXVhbCA9IGVxdWFsUmFuZ2UubG9jYXRpb24gKyAxOwotICAgICAgICBpZiAoaW5kZXhBZnRl
ckVxdWFsID4gcXVlcnlMZW5ndGggLSAxKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgLy8gR2V0IHRoZSBrZXkgYmVmb3JlIHRoZSAiPSIuCi0g
ICAgICAgIE5TUmFuZ2Uga2V5UmFuZ2UgPSBOU01ha2VSYW5nZShlcXVhbFNlYXJjaFJhbmdlLmxv
Y2F0aW9uLCBlcXVhbFJhbmdlLmxvY2F0aW9uIC0gZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbik7
Ci0gICAgICAgIAotICAgICAgICAvLyBTZWFjaCBmb3IgdGhlIGFtcGVyc2FuZC4KLSAgICAgICAg
TlNSYW5nZSBhbXBlcnNhbmRTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVh
bCwgcXVlcnlMZW5ndGggLSBpbmRleEFmdGVyRXF1YWwpOwotICAgICAgICBOU1JhbmdlIGFtcGVy
c2FuZFJhbmdlID0gW3NlbGYgcmFuZ2VPZlN0cmluZzpAIiYiIG9wdGlvbnM6TlNMaXRlcmFsU2Vh
cmNoIHJhbmdlOmFtcGVyc2FuZFNlYXJjaFJhbmdlXTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdl
dCB0aGUgdmFsdWUgYWZ0ZXIgdGhlICI9IiwgYmVmb3JlIHRoZSBhbXBlcnNhbmQuCi0gICAgICAg
IE5TUmFuZ2UgdmFsdWVSYW5nZTsKLSAgICAgICAgaWYgKGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpCi0gICAgICAgICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFuZ2UoaW5k
ZXhBZnRlckVxdWFsLCBhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiAtIGluZGV4QWZ0ZXJFcXVhbCk7
Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFuZ2UoaW5k
ZXhBZnRlckVxdWFsLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJFcXVhbCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIC8vIFNhdmUgdGhlIGtleSBhbmQgdGhlIHZhbHVlLgotICAgICAgICBp
ZiAoa2V5UmFuZ2UubGVuZ3RoICYmIHZhbHVlUmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgICAgICBp
ZiAocXVlcnlLZXlzQW5kVmFsdWVzID09IG5pbCkKLSAgICAgICAgICAgICAgICBxdWVyeUtleXNB
bmRWYWx1ZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKLSAgICAgICAgICAg
IE5TU3RyaW5nICprZXkgPSBbW3NlbGYgc3Vic3RyaW5nV2l0aFJhbmdlOmtleVJhbmdlXSBsb3dl
cmNhc2VTdHJpbmddOwotICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0gW1tzZWxmIHN1YnN0
cmluZ1dpdGhSYW5nZTp2YWx1ZVJhbmdlXSBfd2Via2l0X3VuZXNjYXBlZFF1ZXJ5VmFsdWVdOwot
ICAgICAgICAgICAgaWYgKFtrZXkgbGVuZ3RoXSAmJiBbdmFsdWUgbGVuZ3RoXSkKLSAgICAgICAg
ICAgICAgICBbcXVlcnlLZXlzQW5kVmFsdWVzIHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6a2V5XTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQXQgdGhlIGVuZC4KLSAgICAgICAgaWYg
KGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZyBhZnRlciB0aGUgYW1w
ZXJzYW5kLgotICAgICAgICB1bnNpZ25lZCBpbmRleEFmdGVyQW1wZXJzYW5kID0gYW1wZXJzYW5k
UmFuZ2UubG9jYXRpb24gKyAxOwotICAgICAgICBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFu
Z2UoaW5kZXhBZnRlckFtcGVyc2FuZCwgcXVlcnlMZW5ndGggLSBpbmRleEFmdGVyQW1wZXJzYW5k
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHF1ZXJ5S2V5c0FuZFZhbHVlczsKKyAgICByZXR1
cm4gcXVlcnlLZXlzQW5kVmFsdWVzKHNlbGYpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9T
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230939</attachid>
            <date>2014-05-06 15:37:18 -0700</date>
            <delta_ts>2014-05-06 15:51:10 -0700</delta_ts>
            <desc>(Exposed symbols we don&apos;t need anymore)</desc>
            <filename>bug-132568-20140506153655.patch</filename>
            <type>text/plain</type>
            <size>47350</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA1LTA2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVT
U0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IHRoZSBjdXN0b20gWW91VHViZSBsb2FkZXIgY29kZSBvdXQgb2YgdGhlIFdlYkZyYW1lTG9hZGVy
Q2xpZW50IGludG8gYQorICAgICAgICBQbHVnaW5SZXBsYWNlbWVudC1iYXNlZCBjbGFzcy4KKwor
ICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnBhcmVudEVs
ZW1lbnQpOgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQ
bHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpraXQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBs
dWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6b2JqZWN0Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVlvdVR1
YmVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50Ojp5b3VUdWJlVVJMKToK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkIG5ldyBleHBvcnQgZnJvbSBXZWJDb3JlLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyZWRQ
bHVnaW5SZXBsYWNlbWVudHMpOiBBZGQgbmV3IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCB0byBy
ZWdpc3RyeS4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRl
cmVyKTogUmVtb3ZlIGN1c3RvbSBZb3VUdWJlIGNvZGUKKyAgICAgICAgbm93IHRoYXQgdGhpcyBs
b2dpYyBpcyBoYW5kbGVkIGluIHRoZSBwbHVnaW4gcmVwbGFjZW1lbnQgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0
cmVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OllvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZUVtYmVkU2hhZG93RWxlbWVu
dDo6c2hhZG93UHNldWRvSWQpOiBVc2UgY29ycmVjdCBwc2V1ZG9JRCBmb3IgdGhlCisgICAgICAg
IHBsdWdpbiByZXBsYWNlbWVudCBhcmNoaXRlY3R1cmUuCisgICAgICAgICogaHRtbC9zaGFkb3cv
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlTlNVUkxFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0
cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6dW5lc2NhcGVkUXVlcnlWYWx1ZSk6IE1vdmVkIGZy
b20gV2ViS2l0L01pc2MvV2ViTlNVUkxFeHRyYXMuCisgICAgICAgIChXZWJDb3JlOjpxdWVyeUtl
eXNBbmRWYWx1ZXMpOiBEaXR0by4KKwogMjAxNC0wNS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENhbid0IG1ha2UgYSBib29raW5nIGF0IHZpcmdpbmFtZXJp
Y2EuY29tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTY4MzcxKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3Nzks
NyBAQCBfX1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFwaEVSS05TXzE1CiBfX1pON1dlYkNv
cmUxOG1ha2VBbGxEaXJlY3Rvcmllc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4cGx1
Z2luU2NyaXB0T2JqZWN0RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzEzSlNIVE1MRWxlbWVudEUKIF9f
Wk43V2ViQ29yZTE4cHJveHlTZXJ2ZXJzRm9yVVJMRVJLTlNfM1VSTEVQS05TXzE3TmV0d29ya2lu
Z0NvbnRleHRFCitfX1pON1dlYkNvcmUxOHF1ZXJ5S2V5c0FuZFZhbHVlc0VQOE5TU3RyaW5nCiBf
X1pON1dlYkNvcmUxOHRocm93VGhpc1R5cGVFcnJvckVSTjNKU0M5RXhlY1N0YXRlRVBLY1M0Xwog
X19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZyZXN1bWVBbmltYXRpb25zRXYKIF9f
Wk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjE3c3VzcGVuZEFuaW1hdGlvbnNFdgpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJl
UGx1Z2luUmVwbGFjZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgWW91VHViZVBsdWdpblJlcGxhY2VtZW50X2gKKyNkZWZpbmUgWW91VHViZVBs
dWdpblJlcGxhY2VtZW50X2gKKworI2luY2x1ZGUgIlBsdWdpblJlcGxhY2VtZW50LmgiCisjaW5j
bHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRPYmplY3QuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxQbHVnSW5FbGVtZW50Owor
Y2xhc3MgSFRNTElGcmFtZUVsZW1lbnQ7CitjbGFzcyBSZW5kZXJFbGVtZW50OworY2xhc3MgUmVu
ZGVyU3R5bGU7CitjbGFzcyBTaGFkb3dSb290OworY2xhc3MgWW91VHViZUVtYmVkU2hhZG93RWxl
bWVudDsKKworY2xhc3MgWW91VHViZVBsdWdpblJlcGxhY2VtZW50IDogcHVibGljIFBsdWdpblJl
cGxhY2VtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclBsdWdpblJlcGxh
Y2VtZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBw
b3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmls
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
bHVnaW5SZXBsYWNlbWVudD4gY3JlYXRlKEhUTUxQbHVnSW5FbGVtZW50JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7
CisgICAgWW91VHViZVBsdWdpblJlcGxhY2VtZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5z
dGFsbFJlcGxhY2VtZW50KFNoYWRvd1Jvb3QqKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9v
bCB3aWxsQ3JlYXRlUmVuZGVyZXIoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvRWxlbWVudDsg
fQorICAgIHZpcnR1YWwgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5k
ZXJlcihIVE1MUGx1Z0luRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KSBvdmVycmlkZTsK
KworICAgIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSB7IHJldHVy
biBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQorCisgICAgU3RyaW5nIHlvdVR1YmVVUkwoY29uc3Qg
U3RyaW5nJiByYXdVUkwpOworCitwcml2YXRlOgorICAgIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dChIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisgICAgSFRNTFBsdWdJbkVsZW1l
bnQqIG1fcGFyZW50RWxlbWVudDsKKyAgICBSZWZQdHI8WW91VHViZUVtYmVkU2hhZG93RWxlbWVu
dD4gbV92aWRlb0VsZW1lbnQ7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gbV9hdHRy
aWJ1dGVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQorCisjaW1wb3J0ICJZb3VUdWJl
UGx1Z2luUmVwbGFjZW1lbnQuaCIKKworI2ltcG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkhUTUxO
YW1lcy5oIgorI2ltcG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxJRnJh
bWVFbGVtZW50LmgiCisjaW1wb3J0ICJKU0RPTUJpbmRpbmcuaCIKKyNpbXBvcnQgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0hUTUxJRnJhbWVFbGVtZW50LmgiCisjaW1wb3J0ICJK
U1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWFpbkZyYW1lLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJSZW5kZXJFbGVtZW50
LmgiCisjaW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW1wb3J0ICJTY3JpcHRTb3VyY2VD
b2RlLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiV2ViQ29yZU5TVVJMRXh0
cmFzLmgiCisjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBvcnQgIllvdVR1
YmVFbWJlZFNoYWRvd0VsZW1lbnQuaCIKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NvcmVN
ZWRpYS5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1N0cmluZy5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgWW91VHViZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBsdWdpblJlcGxhY2Vt
ZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3Ry
YXIoUmVwbGFjZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01pbWVUeXBlLCBzdXBwb3J0c0Zp
bGVFeHRlbnNpb24pKTsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5SZXBsYWNlbWVudD4gWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGUoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFlvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudChwbHVnaW4sIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKSk7Cit9CisKK2Jvb2wgWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCit7CisgICAgcmV0dXJuIG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1m
bGFzaCIKKyAgICAgICAgfHwgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCI7
Cit9CisKK2Jvb2wgWW91VHViZVBsdWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c0ZpbGVFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgcmV0dXJuIGV4dGVuc2lvbiA9PSAi
c3BsIiB8fCBleHRlbnNpb24gPT0gInN3ZiI7Cit9CisKK3N0YXRpYyBOU011dGFibGVBcnJheSog
a2l0KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCit7CisgICAgdW5zaWduZWQgbGVuID0g
dmVjdG9yLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6bGVuXTsKKyAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwg
bGVuOyB4KyspCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmVjdG9yW3hdXTsKKyAgICByZXR1
cm4gYXJyYXk7Cit9CisKK1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6WW91VHViZVBsdWdpblJl
cGxhY2VtZW50KEhUTUxQbHVnSW5FbGVtZW50JiBwbHVnaW4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCisgICAgOiBQ
bHVnaW5SZXBsYWNlbWVudCgpCisgICAgLCBtX3BhcmVudEVsZW1lbnQoJnBsdWdpbikKKyAgICAs
IG1fdmlkZW9FbGVtZW50KG51bGxwdHIpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gcmVpbnRlcnBy
ZXRfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmpl
Y3RzOmtpdChwYXJhbVZhbHVlcykgZm9yS2V5czpraXQocGFyYW1OYW1lcyldKTsKK30KKworWW91
VHViZVBsdWdpblJlcGxhY2VtZW50OjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQoKQorICAgIDog
bV9wYXJlbnRFbGVtZW50KG51bGxwdHIpCisgICAgLCBtX3ZpZGVvRWxlbWVudChudWxscHRyKQor
eworfQorCitSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gWW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgUGFzc1Jl
ZjxSZW5kZXJTdHlsZT4gc3R5bGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChwbHVnaW4sIG1fcGFy
ZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIG1fdmlkZW9FbGVtZW50LT5jcmVhdGVFbGVtZW50UmVuZGVyZXIoc3RkOjptb3Zl
KHN0eWxlKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIE5TU3RyaW5nKiBv
YmplY3RGb3JLZXkoQ0ZEaWN0aW9uYXJ5UmVmIGRpY3QsIE5TU3RyaW5nKiBrZXkpCit7CisgICAg
cmV0dXJuIFtyZWludGVycHJldF9jYXN0PGNvbnN0IE5TRGljdGlvbmFyeSo+KGRpY3QpIG9iamVj
dEZvcktleToga2V5XTsKK30KKworYm9vbCBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3Rh
bGxSZXBsYWNlbWVudChTaGFkb3dSb290KiByb290KQoreworICAgIG1fdmlkZW9FbGVtZW50ID0g
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6Y3JlYXRlKG1fcGFyZW50RWxlbWVudC0+ZG9jdW1l
bnQoKSk7CisKKyAgICByb290LT5hcHBlbmRDaGlsZChtX3ZpZGVvRWxlbWVudC5nZXQoKSwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CisKKyAgICBSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IGlmcmFt
ZUVsZW1lbnQgPSBIVE1MSUZyYW1lRWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6aWZyYW1lVGFn
LCBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlmIChvYmplY3RGb3JLZXkobV9h
dHRyaWJ1dGVzLmdldCgpLCBAIndpZHRoIikpCisgICAgICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OndpZHRoQXR0ciwgQXRvbWljU3RyaW5nKCIxMDAlIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworCisgICAgaWYgKE5TU3RyaW5nKiBoZWln
aHRWYWx1ZSA9IG9iamVjdEZvcktleShtX2F0dHJpYnV0ZXMuZ2V0KCksIEAiaGVpZ2h0IikpIHsK
KyAgICAgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRy
LCBBdG9taWNTdHJpbmcoIm1heC1oZWlnaHQ6IDEwMCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CisgICAgICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhlaWdodEF0dHIsIGhlaWdodFZhbHVlKTsKKyAgICB9CisKKyAgICBOU1N0cmluZyog
c3JjID0gb2JqZWN0Rm9yS2V5KG1fYXR0cmlidXRlcy5nZXQoKSwgQCJzcmMiKTsKKyAgICBpZnJh
bWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyLCB5b3VUdWJlVVJMKHNy
YykpOworICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmZyYW1lYm9y
ZGVyQXR0ciwgQXRvbWljU3RyaW5nKCIwIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOworICAgIAorICAgIC8vIERpc2FibGUgZnJhbWUgZmxhdHRlbmluZyBmb3IgdGhpcyBp
ZnJhbWUuCisgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c2Nyb2xs
aW5nQXR0ciwgQXRvbWljU3RyaW5nKCJubyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+YXBwZW5kQ2hpbGQoaWZyYW1lRWxlbWVudCwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlu
bGluZSBOU1VSTCogY3JlYXRlWW91VHViZVVSTChOU1N0cmluZyogdmlkZW9JRCwgTlNTdHJpbmcq
IHRpbWVJRCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgeW91dHViZTogVVJMLCB3
aGljaCBpcyBhbiBpbnRlcm5hbCBmb3JtYXQgdGhhdCBpcyBwYXNzZWQgdG8gWW91VHViZS5hcHAu
CisgICAgLy8gSWYgdGhlIGZvcm1hdCBvZiB0aGVzZSBpbnRlcm5hbCBsaW5rcyBpcyBjaGFuZ2Vk
IGJlbG93LCB0aGVuIHRoZSBhcHAgcHJvYmFibHkgbmVlZHMgdG8gYmUgdXBkYXRlZCBhcyB3ZWxs
LgorICAgIAorICAgIEFTU0VSVCh2aWRlb0lEICYmIFt2aWRlb0lEIGxlbmd0aF0gPiAwICYmICFb
dmlkZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pOworICAgIAorICAgIGlmIChbdGltZUlEIGxl
bmd0aF0pCisgICAgICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAInlvdXR1YmU6JUA/dD0lQCIsIHZpZGVvSUQsIHRpbWVJRF1dOworICAg
IHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InlvdXR1YmU6JUAiLCB2aWRlb0lEXV07Cit9CisKK3N0YXRpYyBOU1VSTCogcHJvY2Vzc0FuZENy
ZWF0ZVlvdVR1YmVVUkwoTlNVUkwqIHVybCkKK3sKKyAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB3
ZSBhcmVuJ3QgZXZlbiBvbiB3d3cueW91dHViZS5jb20gb3IgeW91dHViZS5jb20uCisgICAgTlNT
dHJpbmcqIHNjaGVtZSA9IFt1cmwuc2NoZW1lIGxvd2VyY2FzZVN0cmluZ107CisgICAgaWYgKCFb
c2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSAmJiAhW3NjaGVtZSBpc0VxdWFsVG9TdHJp
bmc6QCJodHRwcyJdKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBOU1N0cmlu
ZyogaG9zdE5hbWUgPSBbdXJsLmhvc3QgbG93ZXJjYXNlU3RyaW5nXTsKKyAgICBCT09MIGlzWW91
VHViZU1vYmlsZVdlYkFwcFVSTCA9IFtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJtLnlvdXR1
YmUuY29tIl07CisgICAgQk9PTCBpc1lvdVR1YmVTaG9ydGVuZWRVUkwgPSBbaG9zdE5hbWUgaXNF
cXVhbFRvU3RyaW5nOkAieW91dHUuYmUiXTsKKyAgICBpZiAoIWlzWW91VHViZU1vYmlsZVdlYkFw
cFVSTAorICAgICAgICAmJiAhaXNZb3VUdWJlU2hvcnRlbmVkVVJMCisgICAgICAgICYmICFbaG9z
dE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAid3d3LnlvdXR1YmUuY29tIl0KKyAgICAgICAgJiYgIVto
b3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJ5b3V0dWJlLmNvbSJdKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAKKyAgICBOU1N0cmluZyogcGF0aCA9IFt1cmwgcGF0aF07CisgICAgCisg
ICAgLy8gU2hvcnQgVVJMIG9mIHRoZSBmb3JtOiBodHRwOi8veW91dHUuYmUvdjFkMzAxRAorICAg
IGlmIChpc1lvdVR1YmVTaG9ydGVuZWRVUkwpIHsKKyAgICAgICAgTlNTdHJpbmcgKnZpZGVvSUQg
PSBbcGF0aCBsYXN0UGF0aENvbXBvbmVudF07CisgICAgICAgIGlmICh2aWRlb0lEICYmICFbdmlk
ZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91
VHViZVVSTCh2aWRlb0lELCBuaWwpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgCisgICAgTlNTdHJpbmcqIHF1ZXJ5ID0gW3VybCBxdWVyeV07CisgICAgTlNTdHJpbmcqIGZy
YWdtZW50ID0gW3VybCBmcmFnbWVudF07CisgICAgCisgICAgLy8gT24gdGhlIFlvdVR1YmUgbW9i
aWxlIHdlYiBhcHAsIHRoZSBwYXRoIGFuZCBxdWVyeSBzdHJpbmcgYXJlIHB1dCBpbnRvIHRoZQor
ICAgIC8vIGZyYWdtZW50IHNvIHRoYXQgb25lIHdlYiBwYWdlIGlzIG9ubHkgZXZlciBsb2FkZWQg
KHNlZSA8cmRhcjovL3Byb2JsZW0vOTU1MDYzOT4pLgorICAgIGlmIChpc1lvdVR1YmVNb2JpbGVX
ZWJBcHBVUkwpIHsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtmcmFnbWVudCByYW5nZU9mU3Ry
aW5nOkAiPyJdOworICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewor
ICAgICAgICAgICAgcGF0aCA9IGZyYWdtZW50OworICAgICAgICAgICAgcXVlcnkgPSBuaWw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gW2ZyYWdtZW50IHN1YnN0cmluZ1Rv
SW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICAgICAgcXVlcnkgPSBbZnJhZ21lbnQgc3Vi
c3RyaW5nRnJvbUluZGV4OihyYW5nZS5sb2NhdGlvbiArIDEpXTsKKyAgICAgICAgfQorICAgICAg
ICBmcmFnbWVudCA9IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKFtbcGF0aCBsb3dlcmNhc2VT
dHJpbmddIGlzRXF1YWxUb1N0cmluZzpAIi93YXRjaCJdKSB7CisgICAgICAgIGlmIChbcXVlcnkg
bGVuZ3RoXSkgeworICAgICAgICAgICAgTlNTdHJpbmcqIHZpZGVvSUQgPSBbcXVlcnlLZXlzQW5k
VmFsdWVzKHF1ZXJ5KSBvYmplY3RGb3JLZXk6QCJ2Il07CisgICAgICAgICAgICBpZiAodmlkZW9J
RCkgeworICAgICAgICAgICAgICAgIE5TRGljdGlvbmFyeSogZnJhZ21lbnREaWN0ID0gcXVlcnlL
ZXlzQW5kVmFsdWVzKFt1cmwgZnJhZ21lbnRdKTsKKyAgICAgICAgICAgICAgICBOU1N0cmluZyog
dGltZUlEID0gW2ZyYWdtZW50RGljdCBvYmplY3RGb3JLZXk6QCJ0Il07CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgdGltZUlEKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTWF5IGJlIGEgbmV3LXN0eWxlIGxp
bmsgKHNlZSA8cmRhcjovL3Byb2JsZW0vNzczMzY5Mj4pLgorICAgICAgICBpZiAoW2ZyYWdtZW50
IGhhc1ByZWZpeDpAIiEiXSkgeworICAgICAgICAgICAgcXVlcnkgPSBbZnJhZ21lbnQgc3Vic3Ry
aW5nRnJvbUluZGV4OjFdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoW3F1ZXJ5IGxl
bmd0aF0pIHsKKyAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkqIHF1ZXJ5RGljdCA9IHF1ZXJ5
S2V5c0FuZFZhbHVlcyhxdWVyeSk7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcqIHZpZGVvSUQg
PSBbcXVlcnlEaWN0IG9iamVjdEZvcktleTpAInYiXTsKKyAgICAgICAgICAgICAgICBpZiAodmlk
ZW9JRCkgeworICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyogdGltZUlEID0gW3F1ZXJ5RGlj
dCBvYmplY3RGb3JLZXk6QCJ0Il07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVZ
b3VUdWJlVVJMKHZpZGVvSUQsIHRpbWVJRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChoYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXgo
cGF0aCwgQCIvdi8iKSB8fCBoYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXgocGF0aCwgQCIvZS8iKSkg
eworICAgICAgICBOU1N0cmluZyogdmlkZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9uZW50XTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIFVSTHMgYXJlIGZ1bm55IC0gdGhleSBkb24ndCBo
YXZlIGEgPyBmb3IgdGhlIGZpcnN0IHF1ZXJ5IHBhcmFtZXRlci4KKyAgICAgICAgLy8gU3RyaXAg
YWxsIGNoYXJhY3RlcnMgYWZ0ZXIgYW5kIGluY2x1ZGluZyAnJicgdG8gcmVtb3ZlIGV4dHJhbmVv
dXMgcGFyYW1ldGVycyBhZnRlciB0aGUgdmlkZW8gSUQuCisgICAgICAgIE5TUmFuZ2UgYW1wZXJz
YW5kID0gW3ZpZGVvSUQgcmFuZ2VPZlN0cmluZzpAIiYiXTsKKyAgICAgICAgaWYgKGFtcGVyc2Fu
ZC5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICAgICAgdmlkZW9JRCA9IFt2aWRlb0lE
IHN1YnN0cmluZ1RvSW5kZXg6YW1wZXJzYW5kLmxvY2F0aW9uXTsKKyAgICAgICAgCisgICAgICAg
IGlmICh2aWRlb0lEKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9J
RCwgbmlsKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1N0cmluZyBZ
b3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnlvdVR1YmVVUkwoY29uc3QgU3RyaW5nJiBzcmNTdHJp
bmcpCit7CisgICAgTlNVUkwqIHNyY1VSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnNyY1N0cmlu
Z107CisgICAgTlNVUkwqIHlvdVR1YmVVUkwgPSBwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVSTChz
cmNVUkwpOworICAgIGlmICghc3JjVVJMIHx8ICF5b3VUdWJlVVJMKQorICAgICAgICByZXR1cm4g
c3JjU3RyaW5nOworCisgICAgLy8gVHJhbnNmb3JtIHRoZSB5b3V0dWJlVVJMICh5b3V0dWJlOlZp
ZGVvSUQpIHRvIGlmcmFtZSBlbWJlZCB1cmwgd2hpY2ggaGFzIHRoZSBmb3JtYXQ6IGh0dHA6Ly93
d3cueW91dHViZS5jb20vZW1iZWQvVmlkZW9JRAorICAgIE5TU3RyaW5nKiBzcmNQYXRoID0gc3Jj
VVJMLnBhdGg7CisgICAgTlNTdHJpbmcqIHZpZGVvSUQgPSBbW3lvdVR1YmVVUkwgYWJzb2x1dGVT
dHJpbmddIHN1YnN0cmluZ0Zyb21JbmRleDpbW3lvdVR1YmVVUkwgc2NoZW1lXSBsZW5ndGhdICsg
MV07CisgICAgTlNSYW5nZSByYW5nZU9mVmlkZW9JREluUGF0aCA9IFtzcmNQYXRoIHJhbmdlT2ZT
dHJpbmc6dmlkZW9JRF07CisgICAgaWYgKHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxvY2F0aW9uID09
IE5TTm90Rm91bmQpCisgICAgICAgIHJldHVybiBzcmNTdHJpbmc7CisgICAgCisgICAgQVNTRVJU
KHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxlbmd0aCk7CisgICAgCisgICAgLy8gRnJvbSB0aGUgb3Jp
Z2luYWwgVVJMLCB3ZSBuZWVkIHRvIGdldCB0aGUgcGFydCBiZWZvcmUgL3BhdGgvVmlkZW9JZC4K
KyAgICBOU1JhbmdlIHJhbmdlT2ZQYXRoQmVmb3JlVmlkZW9JRCA9IFtzcmNTdHJpbmcgcmFuZ2VP
ZlN0cmluZzpbc3JjUGF0aCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlT2ZWaWRlb0lESW5QYXRoLmxv
Y2F0aW9uXV07CisgICAgQVNTRVJUKHJhbmdlT2ZQYXRoQmVmb3JlVmlkZW9JRC5sZW5ndGgpOwor
ICAgIAorICAgIE5TU3RyaW5nKiBzcmNVUkxQcmVmaXggPSBbc3JjU3RyaW5nIHN1YnN0cmluZ1Rv
SW5kZXg6cmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lELmxvY2F0aW9uXTsKKyAgICBOU1N0cmluZyog
cXVlcnkgPSBzcmNVUkwucXVlcnk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB0aGUgaWZyYW1lIHdp
bGwgZGlzcGxheSBpbmZvcm1hdGlvbiBsaWtlIHRoZSB2aWRlbyB0aXRsZSBhbmQgdXBsb2FkZXIg
b24gdG9wIG9mIHRoZSB2aWRlby4gRG9uJ3QgZGlzcGxheQorICAgIC8vIHRoZW0gaWYgdGhlIGVt
YmVkaW5nIGh0bWwgZG9lc24ndCBzcGVjaWZ5IGl0LgorICAgIGlmIChxdWVyeSAmJiBxdWVyeS5s
ZW5ndGggJiYgW3F1ZXJ5IHJhbmdlT2ZTdHJpbmc6QCJzaG93aW5mbyJdLmxvY2F0aW9uID09IE5T
Tm90Rm91bmQpCisgICAgICAgIHF1ZXJ5ID0gW3F1ZXJ5IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0
OkAiJnNob3dpbmZvPTAiXTsKKyAgICBlbHNlCisgICAgICAgIHF1ZXJ5ID0gQCJzaG93aW5mbz0w
IjsKKyAgICAKKyAgICAvLyBBcHBlbmQgdGhlIHF1ZXJ5IHN0cmluZyBpZiBpdCBpcyB2YWxpZC4g
U29tZSBzaXRlcyBhcHBhcmVudGx5IGZvcmdldCB0byBhZGQgIj8iIGZvciB0aGUgcXVlcnkgc3Ry
aW5nLCBpbiB0aGF0IGNhc2UsCisgICAgLy8gd2Ugd2lsbCBkaXNjYXJkIHRoZSBwYXJhbWV0ZXJz
IGluIHRoZSB1cmwuCisgICAgLy8gU2VlOiA8cmRhcjovL3Byb2JsZW0vMTE1MzUxNTU+IFtCaW5j
b21wYXRdIFJlZ3Jlc3Npb246IFNDMkNhc3RzIGFwcDogVmlkZW9zIGRvbid0IHBsYXkgaW4gU0My
Q2FzdHMKKyAgICBOU1N0cmluZyogZW1iZWRTcmMgPSBxdWVyeSA/IFtzcmNVUkxQcmVmaXggc3Ry
aW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIvZW1iZWQvJUA/JUAiLCB2aWRlb0lELCBxdWVyeV0gOiBb
c3JjVVJMUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiL2VtYmVkLyVAIiwgdmlkZW9J
RF07CisgICAgCisgICAgcmV0dXJuIGVtYmVkU3JjOworfQorCit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzA5LDYgKzIzMDksOCBAQAogCQk3QTU0
ODU4MDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVB
IC8qIEluc3BlY3Rvckhpc3RvcnkuaCAqLzsgfTsKIAkJN0E1NDg4MTcxNEU0MzJBMTAwNkFFMDVB
IC8qIERPTVBhdGNoU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5o
ICovOyB9OwogCQk3QTU0ODgxODE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNTQ4ODE2
MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuY3BwICovOyB9OworCQk3QTU1MTVG
NTE5MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU1MTVGMzE5MTgzMEEzMDA5
Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmggKi87IH07CisJCTdBNTUxNUY2MTkx
ODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU1MTVGNDE5MTgzMEEzMDA5Njg3
RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lm1tICovOyB9OwogCQk3QTY3NEJEQjBGOUVC
RjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAv
KiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovOyB9OwogCQk3QTY3NEJEQzBGOUVCRjRFMDA2
Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdy
b3VwTG9hZERlZmVycmVyLmggKi87IH07CiAJCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgKi87IH07CkBAIC05MzU5LDYgKzkzNjEsOCBAQAogCQk3QTU0ODU3
RTE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBNTQ4ODE1MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUGF0Y2hTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNTQ4ODE2MTRFNDMyQTEwMDZBRTA1QSAvKiBET01Q
YXRjaFN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9N
UGF0Y2hTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E1NTE1RjMx
OTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaDsgcGF0aCA9
IHBsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdBNTUxNUY0MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFj
ZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBZb3VUdWJl
UGx1Z2luUmVwbGFjZW1lbnQubW07IHBhdGggPSBwbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCRDkwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cExv
YWREZWZlcnJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTcyNTZCOTE1RUI5
RjVCMDA3MzIzQTcgLyogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9IEluc3BlY3Rvck92ZXJsYXlQYWdlLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDMxOSw2ICsxNDMyMyw4IEBACiAJCTA3MkFFMURFMTgzQzA1MTMwMDBB
NTk4OCAvKiBwbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQk3QTU1MTVGMzE5MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2Vt
ZW50LmggKi8sCisJCQkJN0E1NTE1RjQxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5S
ZXBsYWNlbWVudC5tbSAqLywKIAkJCQkwNzJBRTFERjE4M0MwNzQxMDAwQTU5ODggLyogUGx1Z2lu
UmVwbGFjZW1lbnQuaCAqLywKIAkJCQkwNzJBRTFFMDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gKi8sCiAJCQkJMDcyQUUxRTExODNDMDc0MTAwMEE1OTg4
IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNzcyAqLywKQEAgLTIzMTYwLDYgKzIzMTY2
LDcgQEAKIAkJCQkwNzlEMDg2ODE2MkYyMEU4MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJl
bmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5RDA4NkIxNjJGMjFGOTAwREI4NjU4IC8qIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUNDMEI0
RjE4QkU5ODQ5MDA2Q0VCQ0MgLyogQ2FwdHVyaW5nSW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTdBNTUxNUY1MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNjlFMDk5REYwMjcwMDkwRDc4MSAvKiBDREFU
QVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNEREQ1NzE1MThCNTdBODIwMEE5NEZDQiAv
KiBDRE1TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhB
MkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTI2ODYyLDYgKzI2ODY5
LDcgQEAKIAkJCQlCMjc1MzU2NjBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDRjMzMjQwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFCQTc2QzkxMUQyMEU0NzAwNEMyMDFDIC8qIENvbG9yRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3QTU1MTVGNjE5MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBs
dWdpblJlcGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5NjIwRDAwQkYyMjAw
NzFCNzgyIC8qIENvbG9yRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyOTkzNUQx
N0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyNzUzNTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGlt
YW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDE0IEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTcsNiArNTcsNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaW5jbHVkZSAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbmNs
dWRlICJZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zMjgsNiArMzI5LDcgQEAgc3RhdGljIFZlY3RvcjxSZXBsYWNlbWVudFBsdWdp
bio+JiByZWdpcwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQ6OnJlZ2lzdGVyUGx1Z2luUmVwbGFjZW1lbnQocmVnaXN0cmFyKTsKKyAgICBZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyUGx1Z2luUmVwbGFjZW1lbnQocmVnaXN0cmFy
KTsKICNlbmRpZgogICAgIAogICAgIHJldHVybiByZWdpc3RlcmVkUmVwbGFjZW1lbnRzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsNiBAQAogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCi0jaWYgUExB
VEZPUk0oSU9TKQotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKQEAgLTIyNiwxNCArMjIwLDYgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxQbHVn
SW5JbWFnZQogICAgIGlmIChpc0ltYWdlVHlwZSgpKQogICAgICAgICByZXR1cm4gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVySW1hZ2U+KCp0aGlzLCBzdGQ6Om1vdmUoc3R5bGUpKTsKIAotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHRoaXMtPnNoYWRvd1Jv
b3QoKSkgewotICAgICAgICBOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdC0+Zmlyc3RDaGls
ZCgpOwotICAgICAgICBpZiAoc2hhZG93Tm9kZSAmJiBzaGFkb3dOb2RlLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KCpzaGFkb3dOb2RlKS5zaGFkb3dQc2V1ZG9JZCgpID09ICItYXBwbGUt
eW91dHViZS1zaGFkb3ctaWZyYW1lIikKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBzdGQ6Om1vdmUoc3R5bGUpKTsKLSAgICB9Ci0jZW5k
aWYKLQogICAgIHJldHVybiBIVE1MUGx1Z0luRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVy
KHN0ZDo6bW92ZShzdHlsZSkpOwogfQogCkBAIC00MTEsMzUgKzM5Nyw2IEBAIGJvb2wgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6cGFydE9mU25hcHMKICAgICByZXR1cm4gbm9kZSAmJiBzbmFwc2hv
dExhYmVsICYmIChub2RlID09IHNuYXBzaG90TGFiZWwuZ2V0KCkgfHwgbm9kZS0+aXNEZXNjZW5k
YW50T2Yoc25hcHNob3RMYWJlbC5nZXQoKSkpOwogfQogCi0jaWYgUExBVEZPUk0oSU9TKQotdm9p
ZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0cmVlKGNvbnN0
IFN0cmluZyYgc3JjKQotewotICAgIGlmICh0aGlzLT5zaGFkb3dSb290KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChzcmMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBS
ZWZQdHI8WW91VHViZUVtYmVkU2hhZG93RWxlbWVudD4gc2hhZG93RWxlbWVudCA9IFlvdVR1YmVF
bWJlZFNoYWRvd0VsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICBTaGFkb3dSb290JiBy
b290ID0gdGhpcy0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAgIHJvb3QuYXBwZW5k
Q2hpbGQoc2hhZG93RWxlbWVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0KLSAgICBSZWZQdHI8
SFRNTElGcmFtZUVsZW1lbnQ+IGlmcmFtZUVsZW1lbnQgPSBIVE1MSUZyYW1lRWxlbWVudDo6Y3Jl
YXRlKGlmcmFtZVRhZywgZG9jdW1lbnQoKSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZSh3aWR0aEF0
dHIpKQotICAgICAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBBdG9t
aWNTdHJpbmcoIjEwMCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0g
ICAgaWYgKGhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkgewotICAgICAgICBpZnJhbWVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBBdG9taWNTdHJpbmcoIm1heC1oZWlnaHQ6IDEwMCUi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgIGlmcmFtZUVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikp
OwotICAgIH0KLSAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3JjKTsK
LSAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoZnJhbWVib3JkZXJBdHRyLCBBdG9taWNT
dHJpbmcoIjAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0KLSAgICAv
LyBEaXNhYmxlIGZyYW1lIGZsYXR0ZW5pbmcgZm9yIHRoaXMgaWZyYW1lLgotICAgIGlmcmFtZUVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShzY3JvbGxpbmdBdHRyLCBBdG9taWNTdHJpbmcoIm5vIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHNoYWRvd0VsZW1lbnQtPmFw
cGVuZENoaWxkKGlmcmFtZUVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwotfQotI2VuZGlm
Ci0KIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVtb3ZlU25hcHNob3RUaW1lckZpcmVk
KFRpbWVyPEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+JikKIHsKICAgICBtX3NuYXBzaG90SW1hZ2Ug
PSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmgJKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBuZWVkc1dpZGdldFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNX
aWRnZXRVcGRhdGU7IH0KICAgICB2b2lkIHNldE5lZWRzV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZHNX
aWRnZXRVcGRhdGUpIHsgbV9uZWVkc1dpZGdldFVwZGF0ZSA9IG5lZWRzV2lkZ2V0VXBkYXRlOyB9
CiAgICAgCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIHZvaWQgY3JlYXRlU2hhZG93SUZyYW1lU3Vi
dHJlZShjb25zdCBTdHJpbmcmIHNyYyk7Ci0jZW5kaWYKLQogICAgIHZvaWQgdXNlckRpZENsaWNr
U25hcHNob3QoUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiwgYm9vbCBmb3J3YXJkRXZlbnQpOwogICAg
IHZvaWQgY2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgIEltYWdlKiBzbmFwc2hvdEltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdEltYWdlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvWW91
VHViZUVtYmVkU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJZb3VUdWJlRW1iZWRTaGFkb3dFbGVt
ZW50LmgiCiAKLSNpZiBQTEFURk9STShJT1MpCi0KICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDYgKzQwLDEyIEBAIFBhc3NSZWZQdHI8
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudD4gWW8KIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6
OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogSFRN
TERpdkVsZW1lbnQoSFRNTE5hbWVzOjpkaXZUYWcsIGRvY3VtZW50KQogeworICAgIHNldFBzZXVk
byhzaGFkb3dQc2V1ZG9JZCgpKTsKKworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXNwbGF5LCBDU1NWYWx1ZUlubGluZUJsb2NrKTsKKyAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOworICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWUxMDApOworICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIENTU1ZhbHVlMTAwKTsKIH0K
IAogSFRNTFBsdWdJbkltYWdlRWxlbWVudCogWW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6cGx1
Z2luRWxlbWVudCgpIGNvbnN0CkBAIC01MywxMCArNTcsOCBAQCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KiBZb3VUdWJlRW1iZWRTaGFkCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgWW91VHViZUVtYmVk
U2hhZG93RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewotICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBzZXVkb0lkLCAoIi1hcHBsZS15b3V0
dWJlLXNoYWRvdy1pZnJhbWUiKSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1wbHVnaW4tcmVwbGFjZW1lbnQiKSk7
CiAgICAgcmV0dXJuIHBzZXVkb0lkOwogfQogCiB9Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQu
aAkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvWW91VHVi
ZUVtYmVkU2hhZG93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAj
aWZuZGVmIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnRfaAogI2RlZmluZSBZb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50X2gKIAotI2lmIFBMQVRGT1JNKElPUykKLQogI2luY2x1ZGUgIkhUTUxEaXZF
bGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNDgsNiArNDYsNCBAQCBw
cml2YXRlOgogCiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KICNlbmRpZiAvLyBZb3VU
dWJlRW1iZWRTaGFkb3dFbGVtZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlTlNVUkxFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLmgJKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNCArNTAsNyBAQCBOU1JhbmdlIHJhbmdlT2ZVUkxTY2hlbWUoTlNTdHJpbmcgKik7
CiBCT09MIGlzVXNlclZpc2libGVVUkwoTlNTdHJpbmcgKik7CiBCT09MIGxvb2tzTGlrZUFic29s
dXRlVVJMKE5TU3RyaW5nICopOwogCitOU0RpY3Rpb25hcnkgKnF1ZXJ5S2V5c0FuZFZhbHVlcyhO
U1N0cmluZyopOworTlNTdHJpbmcgKnVuZXNjYXBlZFF1ZXJ5VmFsdWUoTlNTdHJpbmcqKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC05ODcsNCArOTg3LDcxIEBAIEJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJp
bmcgKnN0cmkKICAgICByZXR1cm4gcmFuZ2VPZlVSTFNjaGVtZShzdHJpbmdCeVRyaW1taW5nV2hp
dGVzcGFjZShzdHJpbmcpKS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kOwogfQogCitOU1N0cmluZyAq
dW5lc2NhcGVkUXVlcnlWYWx1ZShOU1N0cmluZyogaW5wdXQpCit7CisgICAgTlNNdXRhYmxlU3Ry
aW5nICpzdHJpbmcgPSBbW1tpbnB1dCBzdHJpbmdCeVJlcGxhY2luZ1BlcmNlbnRFc2NhcGVzVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNl
XTsKKyAgICBpZiAoIXN0cmluZykgeworICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZGVjb2Rl
IHRoZSBVUkwgYXMgVVRGOCwgZmFsbCBiYWNrIHRvIExhdGluMQorICAgICAgICBzdHJpbmcgPSBb
W1tpbnB1dCBzdHJpbmdCeVJlcGxhY2luZ1BlcmNlbnRFc2NhcGVzVXNpbmdFbmNvZGluZzpOU0lT
T0xhdGluMVN0cmluZ0VuY29kaW5nXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgICAg
ICBbc3RyaW5nIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOkAiKyIgd2l0aFN0cmluZzpAIiAi
IG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVu
Z3RoXSldOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nOworfQorICAgIAorTlNEaWN0aW9uYXJ5
ICpxdWVyeUtleXNBbmRWYWx1ZXMoTlNTdHJpbmcqIHF1ZXJ5U3RyaW5nKQoreworICAgIHVuc2ln
bmVkIHF1ZXJ5TGVuZ3RoID0gW3F1ZXJ5U3RyaW5nIGxlbmd0aF07CisgICAgaWYgKCFxdWVyeUxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpxdWVyeUtleXNBbmRWYWx1ZXMgPSBuaWw7CisgICAgTlNSYW5nZSBlcXVhbFNlYXJjaFJhbmdl
ID0gTlNNYWtlUmFuZ2UoMCwgcXVlcnlMZW5ndGgpOworICAgIAorICAgIHdoaWxlIChlcXVhbFNl
YXJjaFJhbmdlLmxvY2F0aW9uIDwgcXVlcnlMZW5ndGggLSAxICYmIGVxdWFsU2VhcmNoUmFuZ2Uu
bGVuZ3RoKSB7CisgICAgICAgIAorICAgICAgICAvLyBTZWFyY2ggZm9yICI9Ii4KKyAgICAgICAg
TlNSYW5nZSBlcXVhbFJhbmdlID0gW3F1ZXJ5U3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI9IiBvcHRp
b25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTplcXVhbFNlYXJjaFJhbmdlXTsKKyAgICAgICAgaWYg
KGVxdWFsUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRlckVxdWFsID0gZXF1YWxSYW5nZS5s
b2NhdGlvbiArIDE7CisgICAgICAgIGlmIChpbmRleEFmdGVyRXF1YWwgPiBxdWVyeUxlbmd0aCAt
IDEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIEdldCB0aGUga2V5
IGJlZm9yZSB0aGUgIj0iLgorICAgICAgICBOU1JhbmdlIGtleVJhbmdlID0gTlNNYWtlUmFuZ2Uo
ZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiwgZXF1YWxSYW5nZS5sb2NhdGlvbiAtIGVxdWFsU2Vh
cmNoUmFuZ2UubG9jYXRpb24pOworICAgICAgICAKKyAgICAgICAgLy8gU2VhY2ggZm9yIHRoZSBh
bXBlcnNhbmQuCisgICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5kU2VhcmNoUmFuZ2UgPSBOU01ha2VS
YW5nZShpbmRleEFmdGVyRXF1YWwsIHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRlckVxdWFsKTsKKyAg
ICAgICAgTlNSYW5nZSBhbXBlcnNhbmRSYW5nZSA9IFtxdWVyeVN0cmluZyByYW5nZU9mU3RyaW5n
OkAiJiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6YW1wZXJzYW5kU2VhcmNoUmFuZ2Vd
OworICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBhZnRlciB0aGUgIj0iLCBiZWZv
cmUgdGhlIGFtcGVyc2FuZC4KKyAgICAgICAgTlNSYW5nZSB2YWx1ZVJhbmdlOworICAgICAgICBp
ZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKyAgICAgICAgICAgIHZh
bHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1YWwsIGFtcGVyc2FuZFJhbmdlLmxv
Y2F0aW9uIC0gaW5kZXhBZnRlckVxdWFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFs
dWVSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVhbCwgcXVlcnlMZW5ndGggLSBpbmRl
eEFmdGVyRXF1YWwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBTYXZlIHRoZSBrZXkg
YW5kIHRoZSB2YWx1ZS4KKyAgICAgICAgaWYgKGtleVJhbmdlLmxlbmd0aCAmJiB2YWx1ZVJhbmdl
Lmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHF1ZXJ5S2V5c0FuZFZhbHVlcyA9PSBuaWwpCisg
ICAgICAgICAgICAgICAgcXVlcnlLZXlzQW5kVmFsdWVzID0gW05TTXV0YWJsZURpY3Rpb25hcnkg
ZGljdGlvbmFyeV07CisgICAgICAgICAgICBOU1N0cmluZyAqa2V5ID0gW1txdWVyeVN0cmluZyBz
dWJzdHJpbmdXaXRoUmFuZ2U6a2V5UmFuZ2VdIGxvd2VyY2FzZVN0cmluZ107CisgICAgICAgICAg
ICBOU1N0cmluZyAqdmFsdWUgPSB1bmVzY2FwZWRRdWVyeVZhbHVlKFtxdWVyeVN0cmluZyBzdWJz
dHJpbmdXaXRoUmFuZ2U6dmFsdWVSYW5nZV0pOworICAgICAgICAgICAgaWYgKFtrZXkgbGVuZ3Ro
XSAmJiBbdmFsdWUgbGVuZ3RoXSkKKyAgICAgICAgICAgICAgICBbcXVlcnlLZXlzQW5kVmFsdWVz
IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6a2V5XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gQXQgdGhlIGVuZC4KKyAgICAgICAgaWYgKGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uID09
IE5TTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIENv
bnRpbnVlIHNlYXJjaGluZyBhZnRlciB0aGUgYW1wZXJzYW5kLgorICAgICAgICB1bnNpZ25lZCBp
bmRleEFmdGVyQW1wZXJzYW5kID0gYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gKyAxOworICAgICAg
ICBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckFtcGVyc2FuZCwgcXVl
cnlMZW5ndGggLSBpbmRleEFmdGVyQW1wZXJzYW5kKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHF1ZXJ5S2V5c0FuZFZhbHVlczsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTA1LTA1ICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10g
UkVHUkVTU0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
MTQ2NDM0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMuaDoKKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0cmFz
Lm1tOiBNb3ZlIHVzZWZ1bCBjb2RlIHRvIFdlYkNvcmUgc28gdGhhdCBpdCBjYW4KKyAgICAgICAg
YmUgc2hhcmVkIHdpdGggV0syLgorICAgICAgICAoLVtOU1VSTCBfd2Via2l0X3lvdVR1YmVVUkxd
KToKKyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdKToKKyAg
ICAgICAgKGNyZWF0ZVlvdVR1YmVVUkwpOiBEZWxldGVkLgorICAgICAgICAoLVtOU1N0cmluZyBf
d2Via2l0X3VuZXNjYXBlZFF1ZXJ5VmFsdWVdKTogRGVsZXRlZC4KKwogMjAxNC0wNS0wNiAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFB1dCBXZWJLaXRQ
bHVnaW5Ib3N0LmFwcCBpbiBXZWJLaXRMZWdhY3kuZnJhbWV3b3JrCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDgg
KzcyLDYgQEAgQGludGVyZmFjZSBOU1VSTCAoV2ViTlNVUkxFeHRyYXMpCiAtIChOU1VSTCAqKV93
ZWJraXRfVVJMRnJvbVVSTE9yU2NoZW1lbGVzc0ZpbGVVUkw7CiAKICNpZiBUQVJHRVRfT1NfSVBI
T05FCi0tIChOU1VSTCAqKV93ZWJraXRfeW91VHViZVVSTDsKLQogKyAoTlNVUkwgKil1bmlxdWVV
UkxXaXRoUmVsYXRpdmVQYXJ0OihOU1N0cmluZyAqKXJlbGF0aXZlUGFydDsKICNlbmRpZgogQGVu
ZApAQCAtOTksOSArOTcsNCBAQCBAaW50ZXJmYWNlIE5TU3RyaW5nIChXZWJOU1VSTEV4dHJhcykK
IC0gKE5TU3RyaW5nICopX3dlYmtpdF9VUkxGcmFnbWVudDsKIC0gKE5TU3RyaW5nICopX3dlYmtp
dF9zY3JpcHRJZkphdmFTY3JpcHRVUkw7CiAKLSNpZiBUQVJHRVRfT1NfSVBIT05FCi0tIChOU1N0
cmluZyAqKV93ZWJraXRfdW5lc2NhcGVkUXVlcnlWYWx1ZTsKLS0gKE5TRGljdGlvbmFyeSAqKV93
ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzOwotI2VuZGlmCi0KIEBlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQkocmV2aXNpb24gMTY4MzcxKQorKysgU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mjc0LDEwMCArMjc0LDYgQEAgLSAoTlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVtZWxl
cwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQotc3RhdGljIGlubGluZSBOU1VSTCAqY3JlYXRlWW91
VHViZVVSTChOU1N0cmluZyAqdmlkZW9JRCwgTlNTdHJpbmcgKnRpbWVJRCkKLXsKLSAgICAvLyBU
aGlzIG1ldGhvZCBjcmVhdGVzIGEgeW91dHViZTogVVJMLCB3aGljaCBpcyBhbiBpbnRlcm5hbCBm
b3JtYXQgdGhhdCBpcyBwYXNzZWQgdG8gWW91VHViZS5hcHAuCi0gICAgLy8gSWYgdGhlIGZvcm1h
dCBvZiB0aGVzZSBpbnRlcm5hbCBsaW5rcyBpcyBjaGFuZ2VkIGJlbG93LCB0aGVuIHRoZSBhcHAg
cHJvYmFibHkgbmVlZHMgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsLgotCi0gICAgQVNTRVJUKHZpZGVv
SUQgJiYgW3ZpZGVvSUQgbGVuZ3RoXSA+IDAgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmluZzpA
Ii8iXSk7Ci0KLSAgICBpZiAoW3RpbWVJRCBsZW5ndGhdKQotICAgICAgICByZXR1cm4gW05TVVJM
IFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0dWJlOiVAP3Q9
JUAiLCB2aWRlb0lELCB0aW1lSURdXTsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0dWJlOiVAIiwgdmlkZW9JRF1dOwotfQot
Ci0tIChOU1VSTCAqKV93ZWJraXRfeW91VHViZVVSTAotewotICAgIC8vIEJhaWwgb3V0IGVhcmx5
IGlmIHdlIGFyZW4ndCBldmVuIG9uIHd3dy55b3V0dWJlLmNvbSBvciB5b3V0dWJlLmNvbS4KLSAg
ICBOU1N0cmluZyAqc2NoZW1lID0gW1tzZWxmIHNjaGVtZV0gbG93ZXJjYXNlU3RyaW5nXTsKLSAg
ICBpZiAoIVtzY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdICYmICFbc2NoZW1lIGlzRXF1
YWxUb1N0cmluZzpAImh0dHBzIl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU1N0cmlu
ZyAqaG9zdE5hbWUgPSBbW3NlbGYgaG9zdF0gbG93ZXJjYXNlU3RyaW5nXTsKLSAgICBCT09MIGlz
WW91VHViZU1vYmlsZVdlYkFwcFVSTCA9IFtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJtLnlv
dXR1YmUuY29tIl07Ci0gICAgQk9PTCBpc1lvdVR1YmVTaG9ydGVuZWRVUkwgPSBbaG9zdE5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAieW91dHUuYmUiXTsKLSAgICBpZiAoIWlzWW91VHViZU1vYmlsZVdl
YkFwcFVSTAotICAgICAgICAmJiAhaXNZb3VUdWJlU2hvcnRlbmVkVVJMCi0gICAgICAgICYmICFb
aG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAid3d3LnlvdXR1YmUuY29tIl0KLSAgICAgICAgJiYg
IVtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJ5b3V0dWJlLmNvbSJdKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbc2VsZiBwYXRoXTsKLQotICAgIC8vIFNo
b3J0IFVSTCBvZiB0aGUgZm9ybTogaHR0cDovL3lvdXR1LmJlL3YxZDMwMUQKLSAgICBpZiAoaXNZ
b3VUdWJlU2hvcnRlbmVkVVJMKSB7Ci0gICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGgg
bGFzdFBhdGhDb21wb25lbnRdOwotICAgICAgICBpZiAodmlkZW9JRCAmJiAhW3ZpZGVvSUQgaXNF
cXVhbFRvU3RyaW5nOkAiLyJdKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwo
dmlkZW9JRCwgbmlsKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBOU1N0cmlu
ZyAqcXVlcnkgPSBbc2VsZiBxdWVyeV07Ci0gICAgTlNTdHJpbmcgKmZyYWdtZW50ID0gW3NlbGYg
ZnJhZ21lbnRdOwotCi0gICAgLy8gT24gdGhlIFlvdVR1YmUgbW9iaWxlIHdlYiBhcHAsIHRoZSBw
YXRoIGFuZCBxdWVyeSBzdHJpbmcgYXJlIHB1dCBpbnRvIHRoZQotICAgIC8vIGZyYWdtZW50IHNv
IHRoYXQgb25lIHdlYiBwYWdlIGlzIG9ubHkgZXZlciBsb2FkZWQgKHNlZSA8cmRhcjovL3Byb2Js
ZW0vOTU1MDYzOT4pLgotICAgIGlmIChpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwpIHsKLSAgICAg
ICAgTlNSYW5nZSByYW5nZSA9IFtmcmFnbWVudCByYW5nZU9mU3RyaW5nOkAiPyJdOwotICAgICAg
ICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgcGF0aCA9
IGZyYWdtZW50OwotICAgICAgICAgICAgcXVlcnkgPSBuaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwYXRoID0gW2ZyYWdtZW50IHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2UubG9jYXRp
b25dOwotICAgICAgICAgICAgcXVlcnkgPSBbZnJhZ21lbnQgc3Vic3RyaW5nRnJvbUluZGV4Oihy
YW5nZS5sb2NhdGlvbiArIDEpXTsKLSAgICAgICAgfQotICAgICAgICBmcmFnbWVudCA9IG5pbDsK
LSAgICB9Ci0KLSAgICBpZiAoW1twYXRoIGxvd2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5n
OkAiL3dhdGNoIl0pIHsKLSAgICAgICAgaWYgKFtxdWVyeSBsZW5ndGhdKSB7Ci0gICAgICAgICAg
ICBOU1N0cmluZyAqdmlkZW9JRCA9IFtbcXVlcnkgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNd
IG9iamVjdEZvcktleTpAInYiXTsKLSAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7Ci0gICAgICAg
ICAgICAgICAgTlNEaWN0aW9uYXJ5ICpmcmFnbWVudERpY3QgPSBbW3NlbGYgZnJhZ21lbnRdIF93
ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXTsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGlt
ZUlEID0gW2ZyYWdtZW50RGljdCBvYmplY3RGb3JLZXk6QCJ0Il07Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgdGltZUlEKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIE1heSBiZSBhIG5ldy1zdHlsZSBsaW5rIChzZWUgPHJk
YXI6Ly9wcm9ibGVtLzc3MzM2OTI+KS4KLSAgICAgICAgaWYgKFtmcmFnbWVudCBoYXNQcmVmaXg6
QCIhIl0pIHsKLSAgICAgICAgICAgIHF1ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRl
eDoxXTsKLQotICAgICAgICAgICAgaWYgKFtxdWVyeSBsZW5ndGhdKSB7Ci0gICAgICAgICAgICAg
ICAgTlNEaWN0aW9uYXJ5ICpxdWVyeURpY3QgPSBbcXVlcnkgX3dlYmtpdF9xdWVyeUtleXNBbmRW
YWx1ZXNdOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3F1ZXJ5RGljdCBv
YmplY3RGb3JLZXk6QCJ2Il07Ci0gICAgICAgICAgICAgICAgaWYgKHZpZGVvSUQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKnRpbWVJRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5
OkAidCJdOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRl
b0lELCB0aW1lSUQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoW3BhdGggX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCIv
di8iXSB8fCBbcGF0aCBfd2ViX2hhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeDpAIi9lLyJdKSB7Ci0g
ICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOwotCi0g
ICAgICAgIC8vIFRoZXNlIFVSTHMgYXJlIGZ1bm55IC0gdGhleSBkb24ndCBoYXZlIGEgPyBmb3Ig
dGhlIGZpcnN0IHF1ZXJ5IHBhcmFtZXRlci4KLSAgICAgICAgLy8gU3RyaXAgYWxsIGNoYXJhY3Rl
cnMgYWZ0ZXIgYW5kIGluY2x1ZGluZyAnJicgdG8gcmVtb3ZlIGV4dHJhbmVvdXMgcGFyYW1ldGVy
cyBhZnRlciB0aGUgdmlkZW8gSUQuCi0gICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5kID0gW3ZpZGVv
SUQgcmFuZ2VPZlN0cmluZzpAIiYiXTsKLSAgICAgICAgaWYgKGFtcGVyc2FuZC5sb2NhdGlvbiAh
PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgdmlkZW9JRCA9IFt2aWRlb0lEIHN1YnN0cmluZ1Rv
SW5kZXg6YW1wZXJzYW5kLmxvY2F0aW9uXTsKLQotICAgICAgICBpZiAodmlkZW9JRCkKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5pbDsKLX0KLQogKyAoTlNVUkwgKil1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0
OihOU1N0cmluZyAqKXJlbGF0aXZlUGFydAogewogICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZV
VUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwpAQCAtNDkwLDczICszOTYsNCBAQCAtIChO
U1N0cmluZyAqKV93ZWJraXRfVVJMRnJhZ21lbnQKICAgICByZXR1cm4gW3NlbGYgc3Vic3RyaW5n
RnJvbUluZGV4OmZyYWdtZW50UmFuZ2UubG9jYXRpb24gKyAxXTsKIH0KIAotI2lmIFBMQVRGT1JN
KElPUykKLQotLSAoTlNTdHJpbmcgKilfd2Via2l0X3VuZXNjYXBlZFF1ZXJ5VmFsdWUKLXsKLSAg
ICBOU011dGFibGVTdHJpbmcgKnN0cmluZyA9IFtbW3NlbGYgc3RyaW5nQnlSZXBsYWNpbmdQZXJj
ZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddIG11dGFibGVDb3B5
XSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKCFzdHJpbmcpIC8vIElmIHdlIGZhaWxlZCB0byBkZWNv
ZGUgdGhlIFVSTCBhcyBVVEY4LCBmYWxsIGJhY2sgdG8gTGF0aW4xCi0gICAgICAgIHN0cmluZyA9
IFtbW3NlbGYgc3RyaW5nQnlSZXBsYWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNJ
U09MYXRpbjFTdHJpbmdFbmNvZGluZ10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICBb
c3RyaW5nIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOkAiKyIgd2l0aFN0cmluZzpAIiAiIG9w
dGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3Ro
XSldOwotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV93ZWJraXRf
cXVlcnlLZXlzQW5kVmFsdWVzCi17Ci0gICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBbc2VsZiBs
ZW5ndGhdOwotICAgIGlmICghcXVlcnlMZW5ndGgpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcXVlcnlLZXlzQW5kVmFsdWVzID0gbmlsOwotICAg
IE5TUmFuZ2UgZXF1YWxTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIHF1ZXJ5TGVuZ3RoKTsK
LSAgICAKLSAgICB3aGlsZSAoZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiA8IHF1ZXJ5TGVuZ3Ro
IC0gMSAmJiBlcXVhbFNlYXJjaFJhbmdlLmxlbmd0aCkgewotICAgICAgICAKLSAgICAgICAgLy8g
U2VhcmNoIGZvciAiPSIuCi0gICAgICAgIE5TUmFuZ2UgZXF1YWxSYW5nZSA9IFtzZWxmIHJhbmdl
T2ZTdHJpbmc6QCI9IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTplcXVhbFNlYXJjaFJh
bmdlXTsKLSAgICAgICAgaWYgKGVxdWFsUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRlckVx
dWFsID0gZXF1YWxSYW5nZS5sb2NhdGlvbiArIDE7Ci0gICAgICAgIGlmIChpbmRleEFmdGVyRXF1
YWwgPiBxdWVyeUxlbmd0aCAtIDEpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAvLyBHZXQgdGhlIGtleSBiZWZvcmUgdGhlICI9Ii4KLSAgICAg
ICAgTlNSYW5nZSBrZXlSYW5nZSA9IE5TTWFrZVJhbmdlKGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRp
b24sIGVxdWFsUmFuZ2UubG9jYXRpb24gLSBlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9uKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFNlYWNoIGZvciB0aGUgYW1wZXJzYW5kLgotICAgICAgICBOU1Jh
bmdlIGFtcGVyc2FuZFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBx
dWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJFcXVhbCk7Ci0gICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5k
UmFuZ2UgPSBbc2VsZiByYW5nZU9mU3RyaW5nOkAiJiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2gg
cmFuZ2U6YW1wZXJzYW5kU2VhcmNoUmFuZ2VdOwotICAgICAgICAKLSAgICAgICAgLy8gR2V0IHRo
ZSB2YWx1ZSBhZnRlciB0aGUgIj0iLCBiZWZvcmUgdGhlIGFtcGVyc2FuZC4KLSAgICAgICAgTlNS
YW5nZSB2YWx1ZVJhbmdlOwotICAgICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gIT0g
TlNOb3RGb3VuZCkKLSAgICAgICAgICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFm
dGVyRXF1YWwsIGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uIC0gaW5kZXhBZnRlckVxdWFsKTsKLSAg
ICAgICAgZWxzZSAKLSAgICAgICAgICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFm
dGVyRXF1YWwsIHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRlckVxdWFsKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgLy8gU2F2ZSB0aGUga2V5IGFuZCB0aGUgdmFsdWUuCi0gICAgICAgIGlmIChr
ZXlSYW5nZS5sZW5ndGggJiYgdmFsdWVSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChx
dWVyeUtleXNBbmRWYWx1ZXMgPT0gbmlsKQotICAgICAgICAgICAgICAgIHF1ZXJ5S2V5c0FuZFZh
bHVlcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgICAgICAgICAgTlNT
dHJpbmcgKmtleSA9IFtbc2VsZiBzdWJzdHJpbmdXaXRoUmFuZ2U6a2V5UmFuZ2VdIGxvd2VyY2Fz
ZVN0cmluZ107Ci0gICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSBbW3NlbGYgc3Vic3RyaW5n
V2l0aFJhbmdlOnZhbHVlUmFuZ2VdIF93ZWJraXRfdW5lc2NhcGVkUXVlcnlWYWx1ZV07Ci0gICAg
ICAgICAgICBpZiAoW2tleSBsZW5ndGhdICYmIFt2YWx1ZSBsZW5ndGhdKQotICAgICAgICAgICAg
ICAgIFtxdWVyeUtleXNBbmRWYWx1ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktleTprZXldOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGUgZW5kLgotICAgICAgICBpZiAoYW1w
ZXJzYW5kUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgLy8gQ29udGludWUgc2VhcmNoaW5nIGFmdGVyIHRoZSBhbXBlcnNh
bmQuCi0gICAgICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJBbXBlcnNhbmQgPSBhbXBlcnNhbmRSYW5n
ZS5sb2NhdGlvbiArIDE7Ci0gICAgICAgIGVxdWFsU2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShp
bmRleEFmdGVyQW1wZXJzYW5kLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJBbXBlcnNhbmQpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gcXVlcnlLZXlzQW5kVmFsdWVzOwotfQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQotCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24g
MTY4MzcxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMDAsNjYgKzIwMDAsNyBAQCBQYXNzUmVm
UHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6CiAgICAgICAgICAgICBbZXJyb3IgcmVs
ZWFzZV07CiAgICAgICAgIH0KIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gU2VlIGlm
IHRoaXMgaXMgYSBZb3VUdWJlIEZsYXNoIHBsdWctaW4KLSAgICAgICAgaWYgKFtNSU1FVHlwZSBp
c0VxdWFsVG9TdHJpbmc6QCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdKSB7Ci0gICAg
ICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0czpraXQocGFyYW1WYWx1ZXMpIGZvcktleXM6a2l0KHBhcmFtTmFtZXMpXTsK
LSAgICAgICAgICAgIE5TU3RyaW5nICpzcmNTdHJpbmcgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JL
ZXk6QCJzcmMiXTsKLSAgICAgICAgICAgIGlmIChzcmNTdHJpbmcpIHsKLSAgICAgICAgICAgICAg
ICBOU1VSTCAqc3JjVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3JjU3RyaW5nXTsKLSAgICAg
ICAgICAgICAgICBOU1VSTCAqeW91dHViZVVSTCA9IFtzcmNVUkwgX3dlYmtpdF95b3VUdWJlVVJM
XTsKLSAgICAgICAgICAgICAgICBpZiAoc3JjVVJMICYmIHlvdXR1YmVVUkwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSB5b3V0dWJlVVJMICh5b3V0dWJlOlZpZGVvSUQp
IHRvIGlmcmFtZSBlbWJlZCB1cmwgd2hpY2ggaGFzIHRoZSBmb3JtYXQ6IGh0dHA6Ly93d3cueW91
dHViZS5jb20vZW1iZWQvVmlkZW9JRAotICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqc3Jj
UGF0aCA9IFtzcmNVUkwgcGF0aF07Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICp2aWRl
b0lEID0gW1t5b3V0dWJlVVJMIGFic29sdXRlU3RyaW5nXSBzdWJzdHJpbmdGcm9tSW5kZXg6W1t5
b3V0dWJlVVJMIHNjaGVtZV0gbGVuZ3RoXSArIDFdOwotICAgICAgICAgICAgICAgICAgICBOU1Jh
bmdlIHJhbmdlT2ZWaWRlb0lESW5QYXRoID0gW3NyY1BhdGggcmFuZ2VPZlN0cmluZzp2aWRlb0lE
XTsKLSAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnNyY1VSTFByZWZpeCA9IG5pbDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxvY2F0aW9uID09IE5T
Tm90Rm91bmQgJiYgIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9X
SVRIX1lPVVRVQkVfRU1CRURfSUZSQU1FX1RSQU5TRk9STSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSB2aWRlb0lEIGlzIG5vdCBpbnNpZGUgc3JjUGF0aCwgdGhlIGVtYmVk
IHNyYyB1cmwgaXMgaW4gd3JvbmcgZm9ybWF0LiBXZSBzdGlsbCB3YW50IHRvIHN1cHBvcnQgdGhl
bSBmb3IgYXBwcyBidWlsZCBhZ2FpbnN0IDUuMSBhbmQgb2xkZXIuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgZW1iZWQgc3JjIGxpa2UgaHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRj
aD92PVZpZGVvSUQsIHdlIG1ha2Ugc3JjVVJMUHJlZml4ICJodHRwOi8vd3d3LnlvdXR1YmUuY29t
Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTE3
NTAyPiB5b3V0dWJlIHZpZGVvcyBkb24ndCB3b3JrIGluIEZBTyBGb3Jlc3RyeQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjVVJMUHJlZml4ID0gW3NyY1N0cmluZyBzdWJzdHJpbmdUb0luZGV4
OltzcmNTdHJpbmcgcmFuZ2VPZlN0cmluZzpzcmNQYXRoXS5sb2NhdGlvbl07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2VP
ZlZpZGVvSURJblBhdGgubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJv
bSB0aGUgb3JpZ2luYWwgVVJMLCB3ZSBuZWVkIHRvIGdldCB0aGUgcGFydCBiZWZvcmUgL3BhdGgv
VmlkZW9JZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2VPZlBhdGhCZWZv
cmVWaWRlb0lEID0gW3NyY1N0cmluZyByYW5nZU9mU3RyaW5nOltzcmNQYXRoIHN1YnN0cmluZ1Rv
SW5kZXg6cmFuZ2VPZlZpZGVvSURJblBhdGgubG9jYXRpb25dXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChyYW5nZU9mUGF0aEJlZm9yZVZpZGVvSUQubGVuZ3RoKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjVVJMUHJlZml4ID0gW3NyY1N0cmluZyBzdWJzdHJpbmdUb0lu
ZGV4OnJhbmdlT2ZQYXRoQmVmb3JlVmlkZW9JRC5sb2NhdGlvbl07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnF1ZXJ5ID0gW3NyY1VSTCBxdWVy
eV07Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBpZnJhbWUgd2lsbCBk
aXNwbGF5IGluZm9ybWF0aW9uIGxpa2UgdGhlIHZpZGVvIHRpdGxlIGFuZCB1cGxvYWRlciBvbiB0
b3Agb2YgdGhlIHZpZGVvLiAgRG9uJ3QgZGlzcGxheQotICAgICAgICAgICAgICAgICAgICAvLyB0
aGVtIGlmIHRoZSBlbWJlZGluZyBodG1sIGRvZXNuJ3Qgc3BlY2lmeSBpdC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHF1ZXJ5ICYmIFtxdWVyeSBsZW5ndGhdICYmIFtxdWVyeSByYW5nZU9mU3Ry
aW5nOkAic2hvd2luZm8iXS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcXVlcnkgPSBbcXVlcnkgc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCImc2hvd2lu
Zm89MCJdOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBxdWVyeSA9IEAic2hvd2luZm89MCI7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5k
IHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQgaXMgdmFsaWQuICBTb21lIHNpdGVzIGFwcGFyZW50bHkg
Zm9yZ2V0IHRvIGFkZCAiPyIgZm9yIHRoZSBxdWVyeSBzdHJpbmcsIGluIHRoYXQgY2FzZSwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBkaXNjYXJkIHRoZSBwYXJhbWV0ZXJzIGluIHRo
ZSB1cmwuCi0gICAgICAgICAgICAgICAgICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTM1
MTU1PiBbQmluY29tcGF0XSBSZWdyZXNzaW9uOiBTQzJDYXN0cyBhcHA6IFZpZGVvcyBkb24ndCBw
bGF5IGluIFNDMkNhc3RzCi0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICplbWJlZFNyYyA9
IHF1ZXJ5ID8gW3NyY1VSTFByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIi9lbWJlZC8l
QD8lQCIsIHZpZGVvSUQsIHF1ZXJ5XSA6IFtzcmNVUkxQcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdG
b3JtYXQ6QCIvZW1iZWQvJUAiLCB2aWRlb0lEXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ3JlYXRlIGEgc2hhZG93IHN1YnRyZWUgZm9yIHRoZSBwbHVnaW4gZWxlbWVudCwgdGhlIGlm
cmFtZSBwbGF5ZXIgaXMgaW5qZWN0ZWQgaW4gdGhlIHNoYWRvdyB0cmVlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCplbGVtZW50KS5jcmVhdGVTaGFk
b3dJRnJhbWVTdWJ0cmVlKGVtYmVkU3JjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhpcyBpcyBhIFlvdVR1YmUgRmxhc2ggcGx1Zy1pbi4gIFdlIGRvbid0IGhhdmUgRmxh
c2guICBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXBwbGUncyBzcGVjaWFsIFlvdVR1YmUgcGx1Zy1p
biBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2UgPSBbd2ViVmlldyBf
cGx1Z2luRm9yTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi94LWFwcGxlLWZha2UteW91dHViZS1wbHVn
aW4iXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQ
bHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwga2l0KHBhcmFtTmFtZXMpLCBraXQocGFyYW1W
YWx1ZXMpLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIGxvYWRNYW51YWxseSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpbldpZGdldElPUyh2aWV3KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCi0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBBU1NFUlQodmlldyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230941</attachid>
            <date>2014-05-06 15:45:19 -0700</date>
            <delta_ts>2014-05-06 15:52:00 -0700</delta_ts>
            <desc>(Exported an iOS Symbol we don&apos;t need anymore)</desc>
            <filename>bug-132568-20140506154456.patch</filename>
            <type>text/plain</type>
            <size>46247</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA1LTA2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVT
U0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IHRoZSBjdXN0b20gWW91VHViZSBsb2FkZXIgY29kZSBvdXQgb2YgdGhlIFdlYkZyYW1lTG9hZGVy
Q2xpZW50IGludG8gYQorICAgICAgICBQbHVnaW5SZXBsYWNlbWVudC1iYXNlZCBjbGFzcy4KKwor
ICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnBhcmVudEVs
ZW1lbnQpOgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQ
bHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpraXQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBs
dWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6b2JqZWN0Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVlvdVR1
YmVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50Ojp5b3VUdWJlVVJMKToK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkIG5ldyBleHBvcnQgZnJvbSBXZWJDb3JlLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyZWRQ
bHVnaW5SZXBsYWNlbWVudHMpOiBBZGQgbmV3IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCB0byBy
ZWdpc3RyeS4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRl
cmVyKTogUmVtb3ZlIGN1c3RvbSBZb3VUdWJlIGNvZGUKKyAgICAgICAgbm93IHRoYXQgdGhpcyBs
b2dpYyBpcyBoYW5kbGVkIGluIHRoZSBwbHVnaW4gcmVwbGFjZW1lbnQgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0
cmVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OllvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZUVtYmVkU2hhZG93RWxlbWVu
dDo6c2hhZG93UHNldWRvSWQpOiBVc2UgY29ycmVjdCBwc2V1ZG9JRCBmb3IgdGhlCisgICAgICAg
IHBsdWdpbiByZXBsYWNlbWVudCBhcmNoaXRlY3R1cmUuCisgICAgICAgICogaHRtbC9zaGFkb3cv
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlTlNVUkxFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0
cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6dW5lc2NhcGVkUXVlcnlWYWx1ZSk6IE1vdmVkIGZy
b20gV2ViS2l0L01pc2MvV2ViTlNVUkxFeHRyYXMuCisgICAgICAgIChXZWJDb3JlOjpxdWVyeUtl
eXNBbmRWYWx1ZXMpOiBEaXR0by4KKwogMjAxNC0wNS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENhbid0IG1ha2UgYSBib29raW5nIGF0IHZpcmdpbmFtZXJp
Y2EuY29tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdp
blJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVn
aW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnRfaAorI2RlZmlu
ZSBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnRfaAorCisjaW5jbHVkZSAiUGx1Z2luUmVwbGFjZW1l
bnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgPGJpbmRpbmdzL1Njcmlw
dE9iamVjdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTFBsdWdJ
bkVsZW1lbnQ7CitjbGFzcyBIVE1MSUZyYW1lRWxlbWVudDsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7
CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBZb3VUdWJlRW1i
ZWRTaGFkb3dFbGVtZW50OworCitjbGFzcyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQgOiBwdWJs
aWMgUGx1Z2luUmVwbGFjZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
UGx1Z2luUmVwbGFjZW1lbnQoUGx1Z2luUmVwbGFjZW1lbnRSZWdpc3RyYXIpOworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFBsdWdpblJlcGxhY2VtZW50PiBjcmVhdGUoSFRNTFBsdWdJbkVsZW1lbnQmLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzKTsKKyAgICBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpbnN0YWxsUmVwbGFjZW1lbnQoU2hhZG93Um9vdCopIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCBib29sIHdpbGxDcmVhdGVSZW5kZXJlcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlk
ZW9FbGVtZW50OyB9CisgICAgdmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRl
RWxlbWVudFJlbmRlcmVyKEhUTUxQbHVnSW5FbGVtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4p
IG92ZXJyaWRlOworCisgICAgWW91VHViZUVtYmVkU2hhZG93RWxlbWVudCogcGFyZW50RWxlbWVu
dCgpIHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CisKKyAgICBTdHJpbmcgeW91VHVi
ZVVSTChjb25zdCBTdHJpbmcmIHJhd1VSTCk7CisKK3ByaXZhdGU6CisgICAgWW91VHViZVBsdWdp
blJlcGxhY2VtZW50KEhUTUxQbHVnSW5FbGVtZW50JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisKKyAgICBIVE1M
UGx1Z0luRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OworICAgIFJlZlB0cjxZb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBtX2F0dHJpYnV0ZXM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2Vt
ZW50Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lv
dVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCisKKyNpbXBv
cnQgIllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oIgorCisjaW1wb3J0ICJFdmVudC5oIgorI2lt
cG9ydCAiSFRNTE5hbWVzLmgiCisjaW1wb3J0ICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2ltcG9y
dCAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1h
aW5GcmFtZS5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmVuZGVyRWxlbWVudC5oIgor
I2ltcG9ydCAiU2hhZG93Um9vdC5oIgorI2ltcG9ydCAiV2ViQ29yZU5TVVJMRXh0cmFzLmgiCisj
aW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBvcnQgIllvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFlvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVnaW5SZXBsYWNlbWVu
dFJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKFJlcGxhY2VtZW50UGx1Z2lu
KGNyZWF0ZSwgc3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKSk7Cit9CisK
K1Bhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6
Y3JlYXRlKEhUTUxQbHVnSW5FbGVtZW50JiBwbHVnaW4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQocGx1Z2luLCBwYXJhbU5h
bWVzLCBwYXJhbVZhbHVlcykpOworfQorCitib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6
c3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiBt
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giCisgICAgICAgIHx8IG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giOworfQorCitib29sIFlvdVR1YmVQ
bHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKQoreworICAgIHJldHVybiBleHRlbnNpb24gPT0gInNwbCIgfHwgZXh0ZW5zaW9uID09
ICJzd2YiOworfQorCitzdGF0aWMgTlNNdXRhYmxlQXJyYXkqIGtpdChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdmVjdG9yKQoreworICAgIHVuc2lnbmVkIGxlbiA9IHZlY3Rvci5zaXplKCk7CisgICAg
TlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
Omxlbl07CisgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGxlbjsgeCsrKQorICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OnZlY3Rvclt4XV07CisgICAgcmV0dXJuIGFycmF5OworfQorCitZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQ6OllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0lu
RWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQorICAgIDogUGx1Z2luUmVwbGFjZW1lbnQoKQor
ICAgICwgbV9wYXJlbnRFbGVtZW50KCZwbHVnaW4pCisgICAgLCBtX3ZpZGVvRWxlbWVudChudWxs
cHRyKQoreworICAgIG1fYXR0cmlidXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5
UmVmPihbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0czpraXQocGFyYW1WYWx1ZXMp
IGZvcktleXM6a2l0KHBhcmFtTmFtZXMpXSk7Cit9CisKK1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dDo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50KCkKKyAgICA6IG1fcGFyZW50RWxlbWVudChudWxs
cHRyKQorICAgICwgbV92aWRlb0VsZW1lbnQobnVsbHB0cikKK3sKK30KKworUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRl
cmVyKEhUTUxQbHVnSW5FbGVtZW50JiBwbHVnaW4sIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxl
KQoreworICAgIEFTU0VSVF9VTlVTRUQocGx1Z2luLCBtX3BhcmVudEVsZW1lbnQgPT0gJnBsdWdp
bik7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBtX3ZpZGVvRWxl
bWVudC0+Y3JlYXRlRWxlbWVudFJlbmRlcmVyKHN0ZDo6bW92ZShzdHlsZSkpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBOU1N0cmluZyogb2JqZWN0Rm9yS2V5KENGRGljdGlv
bmFyeVJlZiBkaWN0LCBOU1N0cmluZyoga2V5KQoreworICAgIHJldHVybiBbcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBOU0RpY3Rpb25hcnkqPihkaWN0KSBvYmplY3RGb3JLZXk6IGtleV07Cit9CisK
K2Jvb2wgWW91VHViZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFjZW1lbnQoU2hhZG93
Um9vdCogcm9vdCkKK3sKKyAgICBtX3ZpZGVvRWxlbWVudCA9IFlvdVR1YmVFbWJlZFNoYWRvd0Vs
ZW1lbnQ6OmNyZWF0ZShtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkpOworCisgICAgcm9vdC0+
YXBwZW5kQ2hpbGQobV92aWRlb0VsZW1lbnQuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOwor
CisgICAgUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBpZnJhbWVFbGVtZW50ID0gSFRNTElGcmFt
ZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OmlmcmFtZVRhZywgbV9wYXJlbnRFbGVtZW50LT5k
b2N1bWVudCgpKTsKKyAgICBpZiAob2JqZWN0Rm9yS2V5KG1fYXR0cmlidXRlcy5nZXQoKSwgQCJ3
aWR0aCIpKQorICAgICAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp3
aWR0aEF0dHIsIEF0b21pY1N0cmluZygiMTAwJSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKKworICAgIGlmIChOU1N0cmluZyogaGVpZ2h0VmFsdWUgPSBvYmplY3RGb3JL
ZXkobV9hdHRyaWJ1dGVzLmdldCgpLCBAImhlaWdodCIpKSB7CisgICAgICAgIGlmcmFtZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgQXRvbWljU3RyaW5nKCJtYXgt
aGVpZ2h0OiAxMDAlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAg
ICAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBo
ZWlnaHRWYWx1ZSk7CisgICAgfQorCisgICAgTlNTdHJpbmcqIHNyYyA9IG9iamVjdEZvcktleSht
X2F0dHJpYnV0ZXMuZ2V0KCksIEAic3JjIik7CisgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgeW91VHViZVVSTChzcmMpKTsKKyAgICBpZnJhbWVFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpmcmFtZWJvcmRlckF0dHIsIEF0b21pY1N0cmlu
ZygiMCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICAKKyAgICAv
LyBEaXNhYmxlIGZyYW1lIGZsYXR0ZW5pbmcgZm9yIHRoaXMgaWZyYW1lLgorICAgIGlmcmFtZUVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNjcm9sbGluZ0F0dHIsIEF0b21pY1N0cmlu
Zygibm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgbV92aWRl
b0VsZW1lbnQtPmFwcGVuZENoaWxkKGlmcmFtZUVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04p
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgTlNVUkwqIGNyZWF0ZVlv
dVR1YmVVUkwoTlNTdHJpbmcqIHZpZGVvSUQsIE5TU3RyaW5nKiB0aW1lSUQpCit7CisgICAgLy8g
VGhpcyBtZXRob2QgY3JlYXRlcyBhIHlvdXR1YmU6IFVSTCwgd2hpY2ggaXMgYW4gaW50ZXJuYWwg
Zm9ybWF0IHRoYXQgaXMgcGFzc2VkIHRvIFlvdVR1YmUuYXBwLgorICAgIC8vIElmIHRoZSBmb3Jt
YXQgb2YgdGhlc2UgaW50ZXJuYWwgbGlua3MgaXMgY2hhbmdlZCBiZWxvdywgdGhlbiB0aGUgYXBw
IHByb2JhYmx5IG5lZWRzIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KKyAgICAKKyAgICBBU1NFUlQo
dmlkZW9JRCAmJiBbdmlkZW9JRCBsZW5ndGhdID4gMCAmJiAhW3ZpZGVvSUQgaXNFcXVhbFRvU3Ry
aW5nOkAiLyJdKTsKKyAgICAKKyAgICBpZiAoW3RpbWVJRCBsZW5ndGhdKQorICAgICAgICByZXR1
cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0
dWJlOiVAP3Q9JUAiLCB2aWRlb0lELCB0aW1lSURdXTsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0dWJlOiVAIiwgdmlkZW9J
RF1dOworfQorCitzdGF0aWMgTlNVUkwqIHByb2Nlc3NBbmRDcmVhdGVZb3VUdWJlVVJMKE5TVVJM
KiB1cmwpCit7CisgICAgLy8gQmFpbCBvdXQgZWFybHkgaWYgd2UgYXJlbid0IGV2ZW4gb24gd3d3
LnlvdXR1YmUuY29tIG9yIHlvdXR1YmUuY29tLgorICAgIE5TU3RyaW5nKiBzY2hlbWUgPSBbdXJs
LnNjaGVtZSBsb3dlcmNhc2VTdHJpbmddOworICAgIGlmICghW3NjaGVtZSBpc0VxdWFsVG9TdHJp
bmc6QCJodHRwIl0gJiYgIVtzY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cHMiXSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgTlNTdHJpbmcqIGhvc3ROYW1lID0gW3VybC5o
b3N0IGxvd2VyY2FzZVN0cmluZ107CisgICAgQk9PTCBpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwg
PSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAibS55b3V0dWJlLmNvbSJdOworICAgIEJPT0wg
aXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmluZzpAInlvdXR1
LmJlIl07CisgICAgaWYgKCFpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwKKyAgICAgICAgJiYgIWlz
WW91VHViZVNob3J0ZW5lZFVSTAorICAgICAgICAmJiAhW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAInd3dy55b3V0dWJlLmNvbSJdCisgICAgICAgICYmICFbaG9zdE5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAieW91dHViZS5jb20iXSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
TlNTdHJpbmcqIHBhdGggPSBbdXJsIHBhdGhdOworICAgIAorICAgIC8vIFNob3J0IFVSTCBvZiB0
aGUgZm9ybTogaHR0cDovL3lvdXR1LmJlL3YxZDMwMUQKKyAgICBpZiAoaXNZb3VUdWJlU2hvcnRl
bmVkVVJMKSB7CisgICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21w
b25lbnRdOworICAgICAgICBpZiAodmlkZW9JRCAmJiAhW3ZpZGVvSUQgaXNFcXVhbFRvU3RyaW5n
OkAiLyJdKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgbmls
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nKiBx
dWVyeSA9IFt1cmwgcXVlcnldOworICAgIE5TU3RyaW5nKiBmcmFnbWVudCA9IFt1cmwgZnJhZ21l
bnRdOworICAgIAorICAgIC8vIE9uIHRoZSBZb3VUdWJlIG1vYmlsZSB3ZWIgYXBwLCB0aGUgcGF0
aCBhbmQgcXVlcnkgc3RyaW5nIGFyZSBwdXQgaW50byB0aGUKKyAgICAvLyBmcmFnbWVudCBzbyB0
aGF0IG9uZSB3ZWIgcGFnZSBpcyBvbmx5IGV2ZXIgbG9hZGVkIChzZWUgPHJkYXI6Ly9wcm9ibGVt
Lzk1NTA2Mzk+KS4KKyAgICBpZiAoaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMKSB7CisgICAgICAg
IE5TUmFuZ2UgcmFuZ2UgPSBbZnJhZ21lbnQgcmFuZ2VPZlN0cmluZzpAIj8iXTsKKyAgICAgICAg
aWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgICAgIHBhdGggPSBm
cmFnbWVudDsKKyAgICAgICAgICAgIHF1ZXJ5ID0gbmlsOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcGF0aCA9IFtmcmFnbWVudCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9u
XTsKKyAgICAgICAgICAgIHF1ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoocmFu
Z2UubG9jYXRpb24gKyAxKV07CisgICAgICAgIH0KKyAgICAgICAgZnJhZ21lbnQgPSBuaWw7Cisg
ICAgfQorICAgIAorICAgIGlmIChbW3BhdGggbG93ZXJjYXNlU3RyaW5nXSBpc0VxdWFsVG9TdHJp
bmc6QCIvd2F0Y2giXSkgeworICAgICAgICBpZiAoW3F1ZXJ5IGxlbmd0aF0pIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nKiB2aWRlb0lEID0gW3F1ZXJ5S2V5c0FuZFZhbHVlcyhxdWVyeSkgb2JqZWN0
Rm9yS2V5OkAidiJdOworICAgICAgICAgICAgaWYgKHZpZGVvSUQpIHsKKyAgICAgICAgICAgICAg
ICBOU0RpY3Rpb25hcnkqIGZyYWdtZW50RGljdCA9IHF1ZXJ5S2V5c0FuZFZhbHVlcyhbdXJsIGZy
YWdtZW50XSk7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcqIHRpbWVJRCA9IFtmcmFnbWVudERp
Y3Qgb2JqZWN0Rm9yS2V5OkAidCJdOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VU
dWJlVVJMKHZpZGVvSUQsIHRpbWVJRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIE1heSBiZSBhIG5ldy1zdHlsZSBsaW5rIChzZWUgPHJkYXI6Ly9wcm9i
bGVtLzc3MzM2OTI+KS4KKyAgICAgICAgaWYgKFtmcmFnbWVudCBoYXNQcmVmaXg6QCIhIl0pIHsK
KyAgICAgICAgICAgIHF1ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoxXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFtxdWVyeSBsZW5ndGhdKSB7CisgICAgICAgICAg
ICAgICAgTlNEaWN0aW9uYXJ5KiBxdWVyeURpY3QgPSBxdWVyeUtleXNBbmRWYWx1ZXMocXVlcnkp
OworICAgICAgICAgICAgICAgIE5TU3RyaW5nKiB2aWRlb0lEID0gW3F1ZXJ5RGljdCBvYmplY3RG
b3JLZXk6QCJ2Il07CisgICAgICAgICAgICAgICAgaWYgKHZpZGVvSUQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTlNTdHJpbmcqIHRpbWVJRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAidCJd
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0
aW1lSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAoaGFzQ2FzZUluc2Vuc2l0aXZlUHJlZml4KHBhdGgsIEAiL3YvIikgfHwgaGFz
Q2FzZUluc2Vuc2l0aXZlUHJlZml4KHBhdGgsIEAiL2UvIikpIHsKKyAgICAgICAgTlNTdHJpbmcq
IHZpZGVvSUQgPSBbcGF0aCBsYXN0UGF0aENvbXBvbmVudF07CisgICAgICAgIAorICAgICAgICAv
LyBUaGVzZSBVUkxzIGFyZSBmdW5ueSAtIHRoZXkgZG9uJ3QgaGF2ZSBhID8gZm9yIHRoZSBmaXJz
dCBxdWVyeSBwYXJhbWV0ZXIuCisgICAgICAgIC8vIFN0cmlwIGFsbCBjaGFyYWN0ZXJzIGFmdGVy
IGFuZCBpbmNsdWRpbmcgJyYnIHRvIHJlbW92ZSBleHRyYW5lb3VzIHBhcmFtZXRlcnMgYWZ0ZXIg
dGhlIHZpZGVvIElELgorICAgICAgICBOU1JhbmdlIGFtcGVyc2FuZCA9IFt2aWRlb0lEIHJhbmdl
T2ZTdHJpbmc6QCImIl07CisgICAgICAgIGlmIChhbXBlcnNhbmQubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkKKyAgICAgICAgICAgIHZpZGVvSUQgPSBbdmlkZW9JRCBzdWJzdHJpbmdUb0luZGV4OmFt
cGVyc2FuZC5sb2NhdGlvbl07CisgICAgICAgIAorICAgICAgICBpZiAodmlkZW9JRCkKKyAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBudWxscHRyOworfQorCitTdHJpbmcgWW91VHViZVBsdWdpblJlcGxhY2Vt
ZW50Ojp5b3VUdWJlVVJMKGNvbnN0IFN0cmluZyYgc3JjU3RyaW5nKQoreworICAgIE5TVVJMKiBz
cmNVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzcmNTdHJpbmddOworICAgIE5TVVJMKiB5b3VU
dWJlVVJMID0gcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoc3JjVVJMKTsKKyAgICBpZiAoIXNy
Y1VSTCB8fCAheW91VHViZVVSTCkKKyAgICAgICAgcmV0dXJuIHNyY1N0cmluZzsKKworICAgIC8v
IFRyYW5zZm9ybSB0aGUgeW91dHViZVVSTCAoeW91dHViZTpWaWRlb0lEKSB0byBpZnJhbWUgZW1i
ZWQgdXJsIHdoaWNoIGhhcyB0aGUgZm9ybWF0OiBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVk
L1ZpZGVvSUQKKyAgICBOU1N0cmluZyogc3JjUGF0aCA9IHNyY1VSTC5wYXRoOworICAgIE5TU3Ry
aW5nKiB2aWRlb0lEID0gW1t5b3VUdWJlVVJMIGFic29sdXRlU3RyaW5nXSBzdWJzdHJpbmdGcm9t
SW5kZXg6W1t5b3VUdWJlVVJMIHNjaGVtZV0gbGVuZ3RoXSArIDFdOworICAgIE5TUmFuZ2UgcmFu
Z2VPZlZpZGVvSURJblBhdGggPSBbc3JjUGF0aCByYW5nZU9mU3RyaW5nOnZpZGVvSURdOworICAg
IGlmIChyYW5nZU9mVmlkZW9JREluUGF0aC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAg
ICByZXR1cm4gc3JjU3RyaW5nOworICAgIAorICAgIEFTU0VSVChyYW5nZU9mVmlkZW9JREluUGF0
aC5sZW5ndGgpOworICAgIAorICAgIC8vIEZyb20gdGhlIG9yaWdpbmFsIFVSTCwgd2UgbmVlZCB0
byBnZXQgdGhlIHBhcnQgYmVmb3JlIC9wYXRoL1ZpZGVvSWQuCisgICAgTlNSYW5nZSByYW5nZU9m
UGF0aEJlZm9yZVZpZGVvSUQgPSBbc3JjU3RyaW5nIHJhbmdlT2ZTdHJpbmc6W3NyY1BhdGggc3Vi
c3RyaW5nVG9JbmRleDpyYW5nZU9mVmlkZW9JREluUGF0aC5sb2NhdGlvbl1dOworICAgIEFTU0VS
VChyYW5nZU9mUGF0aEJlZm9yZVZpZGVvSUQubGVuZ3RoKTsKKyAgICAKKyAgICBOU1N0cmluZyog
c3JjVVJMUHJlZml4ID0gW3NyY1N0cmluZyBzdWJzdHJpbmdUb0luZGV4OnJhbmdlT2ZQYXRoQmVm
b3JlVmlkZW9JRC5sb2NhdGlvbl07CisgICAgTlNTdHJpbmcqIHF1ZXJ5ID0gc3JjVVJMLnF1ZXJ5
OworCisgICAgLy8gQnkgZGVmYXVsdCwgdGhlIGlmcmFtZSB3aWxsIGRpc3BsYXkgaW5mb3JtYXRp
b24gbGlrZSB0aGUgdmlkZW8gdGl0bGUgYW5kIHVwbG9hZGVyIG9uIHRvcCBvZiB0aGUgdmlkZW8u
IERvbid0IGRpc3BsYXkKKyAgICAvLyB0aGVtIGlmIHRoZSBlbWJlZGluZyBodG1sIGRvZXNuJ3Qg
c3BlY2lmeSBpdC4KKyAgICBpZiAocXVlcnkgJiYgcXVlcnkubGVuZ3RoICYmIFtxdWVyeSByYW5n
ZU9mU3RyaW5nOkAic2hvd2luZm8iXS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICBx
dWVyeSA9IFtxdWVyeSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiZzaG93aW5mbz0wIl07Cisg
ICAgZWxzZQorICAgICAgICBxdWVyeSA9IEAic2hvd2luZm89MCI7CisgICAgCisgICAgLy8gQXBw
ZW5kIHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQgaXMgdmFsaWQuIFNvbWUgc2l0ZXMgYXBwYXJlbnRs
eSBmb3JnZXQgdG8gYWRkICI/IiBmb3IgdGhlIHF1ZXJ5IHN0cmluZywgaW4gdGhhdCBjYXNlLAor
ICAgIC8vIHdlIHdpbGwgZGlzY2FyZCB0aGUgcGFyYW1ldGVycyBpbiB0aGUgdXJsLgorICAgIC8v
IFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTM1MTU1PiBbQmluY29tcGF0XSBSZWdyZXNzaW9uOiBT
QzJDYXN0cyBhcHA6IFZpZGVvcyBkb24ndCBwbGF5IGluIFNDMkNhc3RzCisgICAgTlNTdHJpbmcq
IGVtYmVkU3JjID0gcXVlcnkgPyBbc3JjVVJMUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0
OkAiL2VtYmVkLyVAPyVAIiwgdmlkZW9JRCwgcXVlcnldIDogW3NyY1VSTFByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ0Zvcm1hdDpAIi9lbWJlZC8lQCIsIHZpZGVvSURdOworICAgIAorICAgIHJldHVy
biBlbWJlZFNyYzsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2ODM3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjMwOSw2ICsyMzA5LDggQEAKIAkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVB
IC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNTQ4NTdFMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5
LmggKi87IH07CiAJCTdBNTQ4ODE3MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNTQ4ODE1
MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuaCAqLzsgfTsKIAkJN0E1NDg4MTgx
NEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU0ODgxNjE0RTQzMkExMDA2QUUwNUEgLyog
RE9NUGF0Y2hTdXBwb3J0LmNwcCAqLzsgfTsKKwkJN0E1NTE1RjUxOTE4MzBBMzAwOTY4N0QyIC8q
IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E1NTE1RjMxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudC5oICovOyB9OworCQk3QTU1MTVGNjE5MTgzMEEzMDA5Njg3RDIgLyogWW91
VHViZVBsdWdpblJlcGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E1NTE1RjQxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5S
ZXBsYWNlbWVudC5tbSAqLzsgfTsKIAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VH
cm91cExvYWREZWZlcnJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVy
cmVyLmNwcCAqLzsgfTsKIAkJN0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExv
YWREZWZlcnJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICov
OyB9OwogCQk3QTc0RUNCQTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwICov
OyB9OwpAQCAtOTM1OSw2ICs5MzYxLDggQEAKIAkJN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVBIC8q
IEluc3BlY3Rvckhpc3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9ySGlzdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU0ODgxNTE0
RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTVBhdGNoU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QTU0ODgxNjE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVBhdGNoU3VwcG9ydC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNTUxNUYzMTkxODMwQTMwMDk2ODdEMiAvKiBZ
b3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lmg7IHBhdGggPSBwbHVnaW5zL1lvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTU1MTVGNDE5
MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lm1t
OyBwYXRoID0gcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBNjc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBM
b2FkRGVmZXJyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2
NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E3MjU2QjkxNUVCOUY1QjAwNzMyM0E3IC8qIEluc3Bl
Y3Rvck92ZXJsYXlQYWdlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJbnNwZWN0
b3JPdmVybGF5UGFnZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQzMTks
NiArMTQzMjMsOCBAQAogCQkwNzJBRTFERTE4M0MwNTEzMDAwQTU5ODggLyogcGx1Z2lucyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0E1NTE1RjMxOTE4
MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oICovLAorCQkJCTdBNTUx
NUY0MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW0gKi8sCiAJ
CQkJMDcyQUUxREYxODNDMDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggKi8sCiAJ
CQkJMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tICovLAogCQkJCTA3MkFFMUUxMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5jc3MgKi8sCkBAIC0yMzE2MCw2ICsyMzE2Niw3IEBACiAJCQkJMDc5RDA4Njgx
NjJGMjBFODAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3OUQwODZCMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlDQzBCNEYxOEJFOTg0OTAwNkNFQkNDIC8q
IENhcHR1cmluZ0lucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTU1MTVGNTE5MTgz
MEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk2NTUwQjY5RTA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRERENTcxNTE4QjU3QTgyMDBBOTRGQ0IgLyogQ0RNU2Vzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5m
by5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjg2Miw2ICsyNjg2OSw3IEBACiAJCQkJQjI3NTM1NjYw
QjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0YzMzI0
MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQkE3
NkM5MTFEMjBFNDcwMDRDMjAxQyAvKiBDb2xvckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
N0E1NTE1RjYxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3OTYyMEQwMEJGMjIwMDcxQjc4MiAvKiBDb2xvckRpc3Rh
bmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjk5MzVEMTdBMURENTgwMEJDRTg4MCAvKiBD
b2xvcklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU3NzBCMDUzODE0MDAy
Q0U2NEYgLyogQ29sb3JNYWMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpICgxU3RlaW5AZ214LmRl
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxNCBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTU3LDYgKzU3LDcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
IlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgiCisjaW5jbHVkZSAiWW91VHViZVBsdWdpblJl
cGxhY2VtZW50LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzI4LDYgKzMy
OSw3IEBAIHN0YXRpYyBWZWN0b3I8UmVwbGFjZW1lbnRQbHVnaW4qPiYgcmVnaXMKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBs
dWdpblJlcGxhY2VtZW50KHJlZ2lzdHJhcik7CisgICAgWW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KHJlZ2lzdHJhcik7CiAjZW5kaWYKICAgICAKICAg
ICByZXR1cm4gcmVnaXN0ZXJlZFJlcGxhY2VtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4MzcxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsMTIgKzU1LDYgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRl
ICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2lu
Y2x1ZGUgIllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0yMjYsMTQgKzIyMCw2
IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MUGx1Z0luSW1hZ2UKICAgICBpZiAoaXNJ
bWFnZVR5cGUoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckltYWdlPigq
dGhpcywgc3RkOjptb3ZlKHN0eWxlKSk7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgTm9k
ZSogc2hhZG93Tm9kZSA9IHNoYWRvd1Jvb3QtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKHNo
YWRvd05vZGUgJiYgc2hhZG93Tm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudCgqc2hh
ZG93Tm9kZSkuc2hhZG93UHNldWRvSWQoKSA9PSAiLWFwcGxlLXlvdXR1YmUtc2hhZG93LWlmcmFt
ZSIpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93Pigq
dGhpcywgc3RkOjptb3ZlKHN0eWxlKSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gSFRN
TFBsdWdJbkVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsK
IH0KIApAQCAtNDExLDM1ICszOTcsNiBAQCBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnBh
cnRPZlNuYXBzCiAgICAgcmV0dXJuIG5vZGUgJiYgc25hcHNob3RMYWJlbCAmJiAobm9kZSA9PSBz
bmFwc2hvdExhYmVsLmdldCgpIHx8IG5vZGUtPmlzRGVzY2VuZGFudE9mKHNuYXBzaG90TGFiZWwu
Z2V0KCkpKTsKIH0KIAotI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6Y3JlYXRlU2hhZG93SUZyYW1lU3VidHJlZShjb25zdCBTdHJpbmcmIHNyYykKLXsKLSAg
ICBpZiAodGhpcy0+c2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3Jj
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFlvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQ+IHNoYWRvd0VsZW1lbnQgPSBZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgU2hhZG93Um9vdCYgcm9vdCA9IHRoaXMtPmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKLSAgICByb290LmFwcGVuZENoaWxkKHNoYWRvd0VsZW1lbnQs
IEFTU0VSVF9OT19FWENFUFRJT04pOwotCi0gICAgUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBp
ZnJhbWVFbGVtZW50ID0gSFRNTElGcmFtZUVsZW1lbnQ6OmNyZWF0ZShpZnJhbWVUYWcsIGRvY3Vt
ZW50KCkpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUod2lkdGhBdHRyKSkKLSAgICAgICAgaWZyYW1l
RWxlbWVudC0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgQXRvbWljU3RyaW5nKCIxMDAlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUo
aGVpZ2h0QXR0cikpIHsKLSAgICAgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxl
QXR0ciwgQXRvbWljU3RyaW5nKCJtYXgtaGVpZ2h0OiAxMDAlIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgICAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
aGVpZ2h0QXR0ciwgZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpKTsKLSAgICB9Ci0gICAgaWZyYW1l
RWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHNyYyk7Ci0gICAgaWZyYW1lRWxlbWVudC0+
c2V0QXR0cmlidXRlKGZyYW1lYm9yZGVyQXR0ciwgQXRvbWljU3RyaW5nKCIwIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotCi0gICAgLy8gRGlzYWJsZSBmcmFtZSBmbGF0
dGVuaW5nIGZvciB0aGlzIGlmcmFtZS4KLSAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
c2Nyb2xsaW5nQXR0ciwgQXRvbWljU3RyaW5nKCJubyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKLSAgICBzaGFkb3dFbGVtZW50LT5hcHBlbmRDaGlsZChpZnJhbWVFbGVt
ZW50LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLX0KLSNlbmRpZgotCiB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OnJlbW92ZVNuYXBzaG90VGltZXJGaXJlZChUaW1lcjxIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50PiYpCiB7CiAgICAgbV9zbmFwc2hvdEltYWdlID0gbnVsbHB0cjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAx
NjgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDYgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNX
aWRnZXRVcGRhdGUoKSBjb25zdCB7IHJldHVybiBtX25lZWRzV2lkZ2V0VXBkYXRlOyB9CiAgICAg
dm9pZCBzZXROZWVkc1dpZGdldFVwZGF0ZShib29sIG5lZWRzV2lkZ2V0VXBkYXRlKSB7IG1fbmVl
ZHNXaWRnZXRVcGRhdGUgPSBuZWVkc1dpZGdldFVwZGF0ZTsgfQogICAgIAotI2lmIFBMQVRGT1JN
KElPUykKLSAgICB2b2lkIGNyZWF0ZVNoYWRvd0lGcmFtZVN1YnRyZWUoY29uc3QgU3RyaW5nJiBz
cmMpOwotI2VuZGlmCi0KICAgICB2b2lkIHVzZXJEaWRDbGlja1NuYXBzaG90KFBhc3NSZWZQdHI8
TW91c2VFdmVudD4sIGJvb2wgZm9yd2FyZEV2ZW50KTsKICAgICB2b2lkIGNoZWNrU25hcHNob3RT
dGF0dXMoKTsKICAgICBJbWFnZSogc25hcHNob3RJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25h
cHNob3RJbWFnZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvWW91
VHViZUVtYmVkU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODM3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lvdVR1YmVFbWJlZFNoYWRvd0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oIgogCi0jaWYgUExBVEZP
Uk0oSU9TKQotCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00Miw2ICs0MCwxMiBAQCBQYXNzUmVmUHRyPFlvdVR1YmVFbWJlZFNoYWRvd0Vs
ZW1lbnQ+IFlvCiBZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50OjpZb3VUdWJlRW1iZWRTaGFkb3dF
bGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1l
czo6ZGl2VGFnLCBkb2N1bWVudCkKIHsKKyAgICBzZXRQc2V1ZG8oc2hhZG93UHNldWRvSWQoKSk7
CisKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFs
dWVJbmxpbmVCbG9jayk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBv
c2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5V2lkdGgsIENTU1ZhbHVlMTAwKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5SGVpZ2h0LCBDU1NWYWx1ZTEwMCk7CiB9CiAKIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQqIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OnBsdWdpbkVsZW1lbnQoKSBjb25zdApA
QCAtNTMsMTAgKzU3LDggQEAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogWW91VHViZUVtYmVkU2hh
ZAogCiBjb25zdCBBdG9taWNTdHJpbmcmIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OnNoYWRv
d1BzZXVkb0lkKCkgY29uc3QKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBwc2V1ZG9JZCwgKCItYXBwbGUteW91dHViZS1zaGFkb3ctaWZyYW1lIikp
OworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBzZXVk
b0lkLCAoIi13ZWJraXQtcGx1Z2luLXJlcGxhY2VtZW50IikpOwogICAgIHJldHVybiBwc2V1ZG9J
ZDsKIH0KIAogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lv
dVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmgJKHJldmlzaW9uIDE2ODM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBZb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50X2gKICNkZWZpbmUgWW91VHViZUVtYmVkU2hhZG93RWxlbWVudF9oCiAKLSNp
ZiBQTEFURk9STShJT1MpCi0KICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTQ4LDYgKzQ2LDQgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQotCiAjZW5kaWYgLy8gWW91VHViZUVtYmVkU2hhZG93RWxlbWVu
dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1VS
TEV4dHJhcy5oCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViQ29yZU5TVVJMRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDQgKzUwLDcgQEAg
TlNSYW5nZSByYW5nZU9mVVJMU2NoZW1lKE5TU3RyaW5nICopOwogQk9PTCBpc1VzZXJWaXNpYmxl
VVJMKE5TU3RyaW5nICopOwogQk9PTCBsb29rc0xpa2VBYnNvbHV0ZVVSTChOU1N0cmluZyAqKTsK
IAorTlNEaWN0aW9uYXJ5ICpxdWVyeUtleXNBbmRWYWx1ZXMoTlNTdHJpbmcqKTsKK05TU3RyaW5n
ICp1bmVzY2FwZWRRdWVyeVZhbHVlKE5TU3RyaW5nKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxFeHRyYXMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1VS
TEV4dHJhcy5tbQkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTg3LDQgKzk4Nyw3
MSBAQCBCT09MIGxvb2tzTGlrZUFic29sdXRlVVJMKE5TU3RyaW5nICpzdHJpCiAgICAgcmV0dXJu
IHJhbmdlT2ZVUkxTY2hlbWUoc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2Uoc3RyaW5nKSkubG9j
YXRpb24gIT0gTlNOb3RGb3VuZDsKIH0KIAorTlNTdHJpbmcgKnVuZXNjYXBlZFF1ZXJ5VmFsdWUo
TlNTdHJpbmcqIGlucHV0KQoreworICAgIE5TTXV0YWJsZVN0cmluZyAqc3RyaW5nID0gW1tbaW5w
dXQgc3RyaW5nQnlSZXBsYWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CisgICAgaWYgKCFzdHJpbmcp
IHsKKyAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGRlY29kZSB0aGUgVVJMIGFzIFVURjgsIGZh
bGwgYmFjayB0byBMYXRpbjEKKyAgICAgICAgc3RyaW5nID0gW1tbaW5wdXQgc3RyaW5nQnlSZXBs
YWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGlu
Z10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgW3N0cmluZyByZXBsYWNlT2Nj
dXJyZW5jZXNPZlN0cmluZzpAIisiIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOk5TTGl0ZXJhbFNl
YXJjaCByYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pXTsKKyAgICB9CisgICAg
cmV0dXJuIHN0cmluZzsKK30KKyAgICAKK05TRGljdGlvbmFyeSAqcXVlcnlLZXlzQW5kVmFsdWVz
KE5TU3RyaW5nKiBxdWVyeVN0cmluZykKK3sKKyAgICB1bnNpZ25lZCBxdWVyeUxlbmd0aCA9IFtx
dWVyeVN0cmluZyBsZW5ndGhdOworICAgIGlmICghcXVlcnlMZW5ndGgpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcXVlcnlLZXlzQW5kVmFsdWVz
ID0gbmlsOworICAgIE5TUmFuZ2UgZXF1YWxTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIHF1
ZXJ5TGVuZ3RoKTsKKyAgICAKKyAgICB3aGlsZSAoZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiA8
IHF1ZXJ5TGVuZ3RoIC0gMSAmJiBlcXVhbFNlYXJjaFJhbmdlLmxlbmd0aCkgeworICAgICAgICAK
KyAgICAgICAgLy8gU2VhcmNoIGZvciAiPSIuCisgICAgICAgIE5TUmFuZ2UgZXF1YWxSYW5nZSA9
IFtxdWVyeVN0cmluZyByYW5nZU9mU3RyaW5nOkAiPSIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2gg
cmFuZ2U6ZXF1YWxTZWFyY2hSYW5nZV07CisgICAgICAgIGlmIChlcXVhbFJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIGluZGV4QWZ0ZXJFcXVhbCA9IGVxdWFsUmFuZ2UubG9jYXRpb24gKyAxOworICAgICAg
ICBpZiAoaW5kZXhBZnRlckVxdWFsID4gcXVlcnlMZW5ndGggLSAxKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICAvLyBHZXQgdGhlIGtleSBiZWZvcmUgdGhlICI9Ii4KKyAg
ICAgICAgTlNSYW5nZSBrZXlSYW5nZSA9IE5TTWFrZVJhbmdlKGVxdWFsU2VhcmNoUmFuZ2UubG9j
YXRpb24sIGVxdWFsUmFuZ2UubG9jYXRpb24gLSBlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNlYWNoIGZvciB0aGUgYW1wZXJzYW5kLgorICAgICAgICBO
U1JhbmdlIGFtcGVyc2FuZFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFs
LCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJFcXVhbCk7CisgICAgICAgIE5TUmFuZ2UgYW1wZXJz
YW5kUmFuZ2UgPSBbcXVlcnlTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIiYiIG9wdGlvbnM6TlNMaXRl
cmFsU2VhcmNoIHJhbmdlOmFtcGVyc2FuZFNlYXJjaFJhbmdlXTsKKyAgICAgICAgCisgICAgICAg
IC8vIEdldCB0aGUgdmFsdWUgYWZ0ZXIgdGhlICI9IiwgYmVmb3JlIHRoZSBhbXBlcnNhbmQuCisg
ICAgICAgIE5TUmFuZ2UgdmFsdWVSYW5nZTsKKyAgICAgICAgaWYgKGFtcGVyc2FuZFJhbmdlLmxv
Y2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFu
Z2UoaW5kZXhBZnRlckVxdWFsLCBhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiAtIGluZGV4QWZ0ZXJF
cXVhbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5n
ZShpbmRleEFmdGVyRXF1YWwsIHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRlckVxdWFsKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgLy8gU2F2ZSB0aGUga2V5IGFuZCB0aGUgdmFsdWUuCisgICAg
ICAgIGlmIChrZXlSYW5nZS5sZW5ndGggJiYgdmFsdWVSYW5nZS5sZW5ndGgpIHsKKyAgICAgICAg
ICAgIGlmIChxdWVyeUtleXNBbmRWYWx1ZXMgPT0gbmlsKQorICAgICAgICAgICAgICAgIHF1ZXJ5
S2V5c0FuZFZhbHVlcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgICAg
ICAgICAgTlNTdHJpbmcgKmtleSA9IFtbcXVlcnlTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOmtl
eVJhbmdlXSBsb3dlcmNhc2VTdHJpbmddOworICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0g
dW5lc2NhcGVkUXVlcnlWYWx1ZShbcXVlcnlTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdlOnZhbHVl
UmFuZ2VdKTsKKyAgICAgICAgICAgIGlmIChba2V5IGxlbmd0aF0gJiYgW3ZhbHVlIGxlbmd0aF0p
CisgICAgICAgICAgICAgICAgW3F1ZXJ5S2V5c0FuZFZhbHVlcyBzZXRPYmplY3Q6dmFsdWUgZm9y
S2V5OmtleV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoZSBlbmQuCisg
ICAgICAgIGlmIChhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBDb250aW51ZSBzZWFyY2hpbmcgYWZ0
ZXIgdGhlIGFtcGVyc2FuZC4KKyAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRlckFtcGVyc2FuZCA9
IGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uICsgMTsKKyAgICAgICAgZXF1YWxTZWFyY2hSYW5nZSA9
IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJBbXBlcnNhbmQsIHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRl
ckFtcGVyc2FuZCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBxdWVyeUtleXNBbmRWYWx1ZXM7
Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNC0wNS0wNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjLCBpT1NdIFJFR1JFU1NJT046IFdLMiBZb3VU
dWJlIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMjU2OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTE0NjQzNDQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0
cmFzLmg6CisgICAgICAgICogTWlzYy9XZWJOU1VSTEV4dHJhcy5tbTogTW92ZSB1c2VmdWwgY29k
ZSB0byBXZWJDb3JlIHNvIHRoYXQgaXQgY2FuCisgICAgICAgIGJlIHNoYXJlZCB3aXRoIFdLMi4K
KyAgICAgICAgKC1bTlNVUkwgX3dlYmtpdF95b3VUdWJlVVJMXSk6CisgICAgICAgICgtW05TU3Ry
aW5nIF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXSk6CisgICAgICAgIChjcmVhdGVZb3VUdWJl
VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYmtpdF91bmVzY2FwZWRRdWVy
eVZhbHVlXSk6IERlbGV0ZWQuCisKIDIwMTQtMDUtMDYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBQdXQgV2ViS2l0UGx1Z2luSG9zdC5hcHAgaW4gV2Vi
S2l0TGVnYWN5LmZyYW1ld29yawpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1VS
TEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxF
eHRyYXMuaAkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJO
U1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw2IEBAIEBpbnRlcmZhY2Ug
TlNVUkwgKFdlYk5TVVJMRXh0cmFzKQogLSAoTlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNj
aGVtZWxlc3NGaWxlVVJMOwogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQotLSAoTlNVUkwgKilfd2Vi
a2l0X3lvdVR1YmVVUkw7Ci0KICsgKE5TVVJMICopdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDoo
TlNTdHJpbmcgKilyZWxhdGl2ZVBhcnQ7CiAjZW5kaWYKIEBlbmQKQEAgLTk5LDkgKzk3LDQgQEAg
QGludGVyZmFjZSBOU1N0cmluZyAoV2ViTlNVUkxFeHRyYXMpCiAtIChOU1N0cmluZyAqKV93ZWJr
aXRfVVJMRnJhZ21lbnQ7CiAtIChOU1N0cmluZyAqKV93ZWJraXRfc2NyaXB0SWZKYXZhU2NyaXB0
VVJMOwogCi0jaWYgVEFSR0VUX09TX0lQSE9ORQotLSAoTlNTdHJpbmcgKilfd2Via2l0X3VuZXNj
YXBlZFF1ZXJ5VmFsdWU7Ci0tIChOU0RpY3Rpb25hcnkgKilfd2Via2l0X3F1ZXJ5S2V5c0FuZFZh
bHVlczsKLSNlbmRpZgotCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5T
VVJMRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNV
UkxFeHRyYXMubW0JKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViTlNVUkxFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMDAgKzI3NCw2IEBAIC0g
KE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJMT3JTY2hlbWVsZXMKIH0KIAogI2lmIFBMQVRGT1JN
KElPUykKLXN0YXRpYyBpbmxpbmUgTlNVUkwgKmNyZWF0ZVlvdVR1YmVVUkwoTlNTdHJpbmcgKnZp
ZGVvSUQsIE5TU3RyaW5nICp0aW1lSUQpCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBh
IHlvdXR1YmU6IFVSTCwgd2hpY2ggaXMgYW4gaW50ZXJuYWwgZm9ybWF0IHRoYXQgaXMgcGFzc2Vk
IHRvIFlvdVR1YmUuYXBwLgotICAgIC8vIElmIHRoZSBmb3JtYXQgb2YgdGhlc2UgaW50ZXJuYWwg
bGlua3MgaXMgY2hhbmdlZCBiZWxvdywgdGhlbiB0aGUgYXBwIHByb2JhYmx5IG5lZWRzIHRvIGJl
IHVwZGF0ZWQgYXMgd2VsbC4KLQotICAgIEFTU0VSVCh2aWRlb0lEICYmIFt2aWRlb0lEIGxlbmd0
aF0gPiAwICYmICFbdmlkZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pOwotCi0gICAgaWYgKFt0
aW1lSUQgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieW91dHViZTolQD90PSVAIiwgdmlkZW9JRCwgdGltZUlE
XV07Ci0gICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAieW91dHViZTolQCIsIHZpZGVvSURdXTsKLX0KLQotLSAoTlNVUkwgKilfd2Via2l0
X3lvdVR1YmVVUkwKLXsKLSAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB3ZSBhcmVuJ3QgZXZlbiBv
biB3d3cueW91dHViZS5jb20gb3IgeW91dHViZS5jb20uCi0gICAgTlNTdHJpbmcgKnNjaGVtZSA9
IFtbc2VsZiBzY2hlbWVdIGxvd2VyY2FzZVN0cmluZ107Ci0gICAgaWYgKCFbc2NoZW1lIGlzRXF1
YWxUb1N0cmluZzpAImh0dHAiXSAmJiAhW3NjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwcyJd
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNTdHJpbmcgKmhvc3ROYW1lID0gW1tzZWxm
IGhvc3RdIGxvd2VyY2FzZVN0cmluZ107Ci0gICAgQk9PTCBpc1lvdVR1YmVNb2JpbGVXZWJBcHBV
UkwgPSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAibS55b3V0dWJlLmNvbSJdOwotICAgIEJP
T0wgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmluZzpAInlv
dXR1LmJlIl07Ci0gICAgaWYgKCFpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwKLSAgICAgICAgJiYg
IWlzWW91VHViZVNob3J0ZW5lZFVSTAotICAgICAgICAmJiAhW2hvc3ROYW1lIGlzRXF1YWxUb1N0
cmluZzpAInd3dy55b3V0dWJlLmNvbSJdCi0gICAgICAgICYmICFbaG9zdE5hbWUgaXNFcXVhbFRv
U3RyaW5nOkAieW91dHViZS5jb20iXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TU3Ry
aW5nICpwYXRoID0gW3NlbGYgcGF0aF07Ci0KLSAgICAvLyBTaG9ydCBVUkwgb2YgdGhlIGZvcm06
IGh0dHA6Ly95b3V0dS5iZS92MWQzMDFECi0gICAgaWYgKGlzWW91VHViZVNob3J0ZW5lZFVSTCkg
ewotICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9uZW50XTsK
LSAgICAgICAgaWYgKHZpZGVvSUQgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmluZzpAIi8iXSkK
LSAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7Ci0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgTlNTdHJpbmcgKnF1ZXJ5ID0gW3NlbGYgcXVl
cnldOwotICAgIE5TU3RyaW5nICpmcmFnbWVudCA9IFtzZWxmIGZyYWdtZW50XTsKLQotICAgIC8v
IE9uIHRoZSBZb3VUdWJlIG1vYmlsZSB3ZWIgYXBwLCB0aGUgcGF0aCBhbmQgcXVlcnkgc3RyaW5n
IGFyZSBwdXQgaW50byB0aGUKLSAgICAvLyBmcmFnbWVudCBzbyB0aGF0IG9uZSB3ZWIgcGFnZSBp
cyBvbmx5IGV2ZXIgbG9hZGVkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzk1NTA2Mzk+KS4KLSAgICBp
ZiAoaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMKSB7Ci0gICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBb
ZnJhZ21lbnQgcmFuZ2VPZlN0cmluZzpAIj8iXTsKLSAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAgIHBhdGggPSBmcmFnbWVudDsKLSAgICAgICAg
ICAgIHF1ZXJ5ID0gbmlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGF0aCA9IFtm
cmFnbWVudCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlLmxvY2F0aW9uXTsKLSAgICAgICAgICAgIHF1
ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoocmFuZ2UubG9jYXRpb24gKyAxKV07
Ci0gICAgICAgIH0KLSAgICAgICAgZnJhZ21lbnQgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKFtb
cGF0aCBsb3dlcmNhc2VTdHJpbmddIGlzRXF1YWxUb1N0cmluZzpAIi93YXRjaCJdKSB7Ci0gICAg
ICAgIGlmIChbcXVlcnkgbGVuZ3RoXSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnZpZGVvSUQg
PSBbW3F1ZXJ5IF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXSBvYmplY3RGb3JLZXk6QCJ2Il07
Ci0gICAgICAgICAgICBpZiAodmlkZW9JRCkgewotICAgICAgICAgICAgICAgIE5TRGljdGlvbmFy
eSAqZnJhZ21lbnREaWN0ID0gW1tzZWxmIGZyYWdtZW50XSBfd2Via2l0X3F1ZXJ5S2V5c0FuZFZh
bHVlc107Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnRpbWVJRCA9IFtmcmFnbWVudERpY3Qg
b2JqZWN0Rm9yS2V5OkAidCJdOwotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJl
VVJMKHZpZGVvSUQsIHRpbWVJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBNYXkgYmUgYSBuZXctc3R5bGUgbGluayAoc2VlIDxyZGFyOi8vcHJvYmxlbS83NzMzNjky
PikuCi0gICAgICAgIGlmIChbZnJhZ21lbnQgaGFzUHJlZml4OkAiISJdKSB7Ci0gICAgICAgICAg
ICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJpbmdGcm9tSW5kZXg6MV07Ci0KLSAgICAgICAgICAg
IGlmIChbcXVlcnkgbGVuZ3RoXSkgewotICAgICAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqcXVl
cnlEaWN0ID0gW3F1ZXJ5IF93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzXTsKLSAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAidiJdOwot
ICAgICAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TU3Ry
aW5nICp0aW1lSUQgPSBbcXVlcnlEaWN0IG9iamVjdEZvcktleTpAInQiXTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgdGltZUlEKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFtw
YXRoIF93ZWJfaGFzQ2FzZUluc2Vuc2l0aXZlUHJlZml4OkAiL3YvIl0gfHwgW3BhdGggX3dlYl9o
YXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCIvZS8iXSkgewotICAgICAgICBOU1N0cmluZyAqdmlk
ZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9uZW50XTsKLQotICAgICAgICAvLyBUaGVzZSBVUkxz
IGFyZSBmdW5ueSAtIHRoZXkgZG9uJ3QgaGF2ZSBhID8gZm9yIHRoZSBmaXJzdCBxdWVyeSBwYXJh
bWV0ZXIuCi0gICAgICAgIC8vIFN0cmlwIGFsbCBjaGFyYWN0ZXJzIGFmdGVyIGFuZCBpbmNsdWRp
bmcgJyYnIHRvIHJlbW92ZSBleHRyYW5lb3VzIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIHZpZGVvIElE
LgotICAgICAgICBOU1JhbmdlIGFtcGVyc2FuZCA9IFt2aWRlb0lEIHJhbmdlT2ZTdHJpbmc6QCIm
Il07Ci0gICAgICAgIGlmIChhbXBlcnNhbmQubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAg
ICAgICAgIHZpZGVvSUQgPSBbdmlkZW9JRCBzdWJzdHJpbmdUb0luZGV4OmFtcGVyc2FuZC5sb2Nh
dGlvbl07Ci0KLSAgICAgICAgaWYgKHZpZGVvSUQpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
WW91VHViZVVSTCh2aWRlb0lELCBuaWwpOwotICAgIH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0K
ICsgKE5TVVJMICopdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydDooTlNTdHJpbmcgKilyZWxhdGl2
ZVBhcnQKIHsKICAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0KTsKQEAgLTQ5MCw3MyArMzk2LDQgQEAgLSAoTlNTdHJpbmcgKilfd2Via2l0X1VS
TEZyYWdtZW50CiAgICAgcmV0dXJuIFtzZWxmIHN1YnN0cmluZ0Zyb21JbmRleDpmcmFnbWVudFJh
bmdlLmxvY2F0aW9uICsgMV07CiB9CiAKLSNpZiBQTEFURk9STShJT1MpCi0KLS0gKE5TU3RyaW5n
ICopX3dlYmtpdF91bmVzY2FwZWRRdWVyeVZhbHVlCi17Ci0gICAgTlNNdXRhYmxlU3RyaW5nICpz
dHJpbmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVwbGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAg
IGlmICghc3RyaW5nKSAvLyBJZiB3ZSBmYWlsZWQgdG8gZGVjb2RlIHRoZSBVUkwgYXMgVVRGOCwg
ZmFsbCBiYWNrIHRvIExhdGluMQotICAgICAgICBzdHJpbmcgPSBbW1tzZWxmIHN0cmluZ0J5UmVw
bGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2Rp
bmddIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Ci0gICAgW3N0cmluZyByZXBsYWNlT2NjdXJy
ZW5jZXNPZlN0cmluZzpAIisiIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJj
aCByYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pXTsKLSAgICByZXR1cm4gc3Ry
aW5nOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfd2Via2l0X3F1ZXJ5S2V5c0FuZFZhbHVlcwot
ewotICAgIHVuc2lnbmVkIHF1ZXJ5TGVuZ3RoID0gW3NlbGYgbGVuZ3RoXTsKLSAgICBpZiAoIXF1
ZXJ5TGVuZ3RoKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKnF1ZXJ5S2V5c0FuZFZhbHVlcyA9IG5pbDsKLSAgICBOU1JhbmdlIGVxdWFsU2VhcmNo
UmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBxdWVyeUxlbmd0aCk7Ci0gICAgCi0gICAgd2hpbGUgKGVx
dWFsU2VhcmNoUmFuZ2UubG9jYXRpb24gPCBxdWVyeUxlbmd0aCAtIDEgJiYgZXF1YWxTZWFyY2hS
YW5nZS5sZW5ndGgpIHsKLSAgICAgICAgCi0gICAgICAgIC8vIFNlYXJjaCBmb3IgIj0iLgotICAg
ICAgICBOU1JhbmdlIGVxdWFsUmFuZ2UgPSBbc2VsZiByYW5nZU9mU3RyaW5nOkAiPSIgb3B0aW9u
czpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6ZXF1YWxTZWFyY2hSYW5nZV07Ci0gICAgICAgIGlmIChl
cXVhbFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJFcXVhbCA9IGVxdWFsUmFuZ2UubG9j
YXRpb24gKyAxOwotICAgICAgICBpZiAoaW5kZXhBZnRlckVxdWFsID4gcXVlcnlMZW5ndGggLSAx
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
Ly8gR2V0IHRoZSBrZXkgYmVmb3JlIHRoZSAiPSIuCi0gICAgICAgIE5TUmFuZ2Uga2V5UmFuZ2Ug
PSBOU01ha2VSYW5nZShlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9uLCBlcXVhbFJhbmdlLmxvY2F0
aW9uIC0gZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbik7Ci0gICAgICAgIAotICAgICAgICAvLyBT
ZWFjaCBmb3IgdGhlIGFtcGVyc2FuZC4KLSAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmRTZWFyY2hS
YW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVhbCwgcXVlcnlMZW5ndGggLSBpbmRleEFm
dGVyRXF1YWwpOwotICAgICAgICBOU1JhbmdlIGFtcGVyc2FuZFJhbmdlID0gW3NlbGYgcmFuZ2VP
ZlN0cmluZzpAIiYiIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJhbmdlOmFtcGVyc2FuZFNlYXJj
aFJhbmdlXTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgdmFsdWUgYWZ0ZXIgdGhlICI9
IiwgYmVmb3JlIHRoZSBhbXBlcnNhbmQuCi0gICAgICAgIE5TUmFuZ2UgdmFsdWVSYW5nZTsKLSAg
ICAgICAgaWYgKGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCi0gICAgICAg
ICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBhbXBlcnNhbmRS
YW5nZS5sb2NhdGlvbiAtIGluZGV4QWZ0ZXJFcXVhbCk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAg
ICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBxdWVyeUxlbmd0
aCAtIGluZGV4QWZ0ZXJFcXVhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIC8vIFNhdmUg
dGhlIGtleSBhbmQgdGhlIHZhbHVlLgotICAgICAgICBpZiAoa2V5UmFuZ2UubGVuZ3RoICYmIHZh
bHVlUmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAocXVlcnlLZXlzQW5kVmFsdWVzID09
IG5pbCkKLSAgICAgICAgICAgICAgICBxdWVyeUtleXNBbmRWYWx1ZXMgPSBbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XTsKLSAgICAgICAgICAgIE5TU3RyaW5nICprZXkgPSBbW3NlbGYg
c3Vic3RyaW5nV2l0aFJhbmdlOmtleVJhbmdlXSBsb3dlcmNhc2VTdHJpbmddOwotICAgICAgICAg
ICAgTlNTdHJpbmcgKnZhbHVlID0gW1tzZWxmIHN1YnN0cmluZ1dpdGhSYW5nZTp2YWx1ZVJhbmdl
XSBfd2Via2l0X3VuZXNjYXBlZFF1ZXJ5VmFsdWVdOwotICAgICAgICAgICAgaWYgKFtrZXkgbGVu
Z3RoXSAmJiBbdmFsdWUgbGVuZ3RoXSkKLSAgICAgICAgICAgICAgICBbcXVlcnlLZXlzQW5kVmFs
dWVzIHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6a2V5XTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gQXQgdGhlIGVuZC4KLSAgICAgICAgaWYgKGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9u
ID09IE5TTm90Rm91bmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIC8v
IENvbnRpbnVlIHNlYXJjaGluZyBhZnRlciB0aGUgYW1wZXJzYW5kLgotICAgICAgICB1bnNpZ25l
ZCBpbmRleEFmdGVyQW1wZXJzYW5kID0gYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gKyAxOwotICAg
ICAgICBlcXVhbFNlYXJjaFJhbmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckFtcGVyc2FuZCwg
cXVlcnlMZW5ndGggLSBpbmRleEFmdGVyQW1wZXJzYW5kKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHF1ZXJ5S2V5c0FuZFZhbHVlczsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQog
QGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDAwLDY2ICsyMDAwLDcgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1l
TG9hZGVyQ2xpZW50OgogICAgICAgICAgICAgW2Vycm9yIHJlbGVhc2VdOwogICAgICAgICB9CiAK
LSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIFNlZSBpZiB0aGlzIGlzIGEgWW91VHViZSBG
bGFzaCBwbHVnLWluCi0gICAgICAgIGlmIChbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAiYXBw
bGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giXSkgewotICAgICAgICAgICAgTlNEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHM6a2l0KHBh
cmFtVmFsdWVzKSBmb3JLZXlzOmtpdChwYXJhbU5hbWVzKV07Ci0gICAgICAgICAgICBOU1N0cmlu
ZyAqc3JjU3RyaW5nID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5OkAic3JjIl07Ci0gICAgICAg
ICAgICBpZiAoc3JjU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgTlNVUkwgKnNyY1VSTCA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOnNyY1N0cmluZ107Ci0gICAgICAgICAgICAgICAgTlNVUkwgKnlv
dXR1YmVVUkwgPSBbc3JjVVJMIF93ZWJraXRfeW91VHViZVVSTF07Ci0gICAgICAgICAgICAgICAg
aWYgKHNyY1VSTCAmJiB5b3V0dWJlVVJMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRyYW5z
Zm9ybSB0aGUgeW91dHViZVVSTCAoeW91dHViZTpWaWRlb0lEKSB0byBpZnJhbWUgZW1iZWQgdXJs
IHdoaWNoIGhhcyB0aGUgZm9ybWF0OiBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1ZpZGVv
SUQKLSAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnNyY1BhdGggPSBbc3JjVVJMIHBhdGhd
OwotICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtbeW91dHViZVVSTCBh
YnNvbHV0ZVN0cmluZ10gc3Vic3RyaW5nRnJvbUluZGV4OltbeW91dHViZVVSTCBzY2hlbWVdIGxl
bmd0aF0gKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgTlNSYW5nZSByYW5nZU9mVmlkZW9JRElu
UGF0aCA9IFtzcmNQYXRoIHJhbmdlT2ZTdHJpbmc6dmlkZW9JRF07Ci0gICAgICAgICAgICAgICAg
ICAgIE5TU3RyaW5nICpzcmNVUkxQcmVmaXggPSBuaWw7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChyYW5nZU9mVmlkZW9JREluUGF0aC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kICYmICFXZWJLaXRM
aW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9ZT1VUVUJFX0VNQkVEX0lG
UkFNRV9UUkFOU0ZPUk0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmlk
ZW9JRCBpcyBub3QgaW5zaWRlIHNyY1BhdGgsIHRoZSBlbWJlZCBzcmMgdXJsIGlzIGluIHdyb25n
IGZvcm1hdC4gV2Ugc3RpbGwgd2FudCB0byBzdXBwb3J0IHRoZW0gZm9yIGFwcHMgYnVpbGQgYWdh
aW5zdCA1LjEgYW5kIG9sZGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVtYmVk
IHNyYyBsaWtlIGh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1WaWRlb0lELCB3ZSBtYWtl
IHNyY1VSTFByZWZpeCAiaHR0cDovL3d3dy55b3V0dWJlLmNvbSIuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZWU6IDxyZGFyOi8vcHJvYmxlbS8xMTUxNzUwMj4geW91dHViZSB2aWRlb3Mg
ZG9uJ3Qgd29yayBpbiBGQU8gRm9yZXN0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY1VS
TFByZWZpeCA9IFtzcmNTdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpbc3JjU3RyaW5nIHJhbmdlT2ZT
dHJpbmc6c3JjUGF0aF0ubG9jYXRpb25dOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxlbmd0
aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIG9yaWdpbmFsIFVSTCwg
d2UgbmVlZCB0byBnZXQgdGhlIHBhcnQgYmVmb3JlIC9wYXRoL1ZpZGVvSWQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBOU1JhbmdlIHJhbmdlT2ZQYXRoQmVmb3JlVmlkZW9JRCA9IFtzcmNTdHJp
bmcgcmFuZ2VPZlN0cmluZzpbc3JjUGF0aCBzdWJzdHJpbmdUb0luZGV4OnJhbmdlT2ZWaWRlb0lE
SW5QYXRoLmxvY2F0aW9uXV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2VP
ZlBhdGhCZWZvcmVWaWRlb0lELmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNy
Y1VSTFByZWZpeCA9IFtzcmNTdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpyYW5nZU9mUGF0aEJlZm9y
ZVZpZGVvSUQubG9jYXRpb25dOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIE5TU3RyaW5nICpxdWVyeSA9IFtzcmNVUkwgcXVlcnldOwotICAgICAgICAgICAgICAg
ICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgaWZyYW1lIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBs
aWtlIHRoZSB2aWRlbyB0aXRsZSBhbmQgdXBsb2FkZXIgb24gdG9wIG9mIHRoZSB2aWRlby4gIERv
bid0IGRpc3BsYXkKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlbSBpZiB0aGUgZW1iZWRpbmcg
aHRtbCBkb2Vzbid0IHNwZWNpZnkgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeSAm
JiBbcXVlcnkgbGVuZ3RoXSAmJiBbcXVlcnkgcmFuZ2VPZlN0cmluZzpAInNob3dpbmZvIl0ubG9j
YXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gW3F1
ZXJ5IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiJnNob3dpbmZvPTAiXTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBAInNob3dpbmZv
PTAiOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcXVlcnkgc3RyaW5nIGlm
IGl0IGlzIHZhbGlkLiAgU29tZSBzaXRlcyBhcHBhcmVudGx5IGZvcmdldCB0byBhZGQgIj8iIGZv
ciB0aGUgcXVlcnkgc3RyaW5nLCBpbiB0aGF0IGNhc2UsCi0gICAgICAgICAgICAgICAgICAgIC8v
IHdlIHdpbGwgZGlzY2FyZCB0aGUgcGFyYW1ldGVycyBpbiB0aGUgdXJsLgotICAgICAgICAgICAg
ICAgICAgICAvLyBTZWU6IDxyZGFyOi8vcHJvYmxlbS8xMTUzNTE1NT4gW0JpbmNvbXBhdF0gUmVn
cmVzc2lvbjogU0MyQ2FzdHMgYXBwOiBWaWRlb3MgZG9uJ3QgcGxheSBpbiBTQzJDYXN0cwotICAg
ICAgICAgICAgICAgICAgICBOU1N0cmluZyAqZW1iZWRTcmMgPSBxdWVyeSA/IFtzcmNVUkxQcmVm
aXggc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIvZW1iZWQvJUA/JUAiLCB2aWRlb0lELCBxdWVy
eV0gOiBbc3JjVVJMUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiL2VtYmVkLyVAIiwg
dmlkZW9JRF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9i
amVjdFRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNoYWRvdyBz
dWJ0cmVlIGZvciB0aGUgcGx1Z2luIGVsZW1lbnQsIHRoZSBpZnJhbWUgcGxheWVyIGlzIGluamVj
dGVkIGluIHRoZSBzaGFkb3cgdHJlZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvSFRNTFBs
dWdJbkltYWdlRWxlbWVudCgqZWxlbWVudCkuY3JlYXRlU2hhZG93SUZyYW1lU3VidHJlZShlbWJl
ZFNyYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBZb3VU
dWJlIEZsYXNoIHBsdWctaW4uICBXZSBkb24ndCBoYXZlIEZsYXNoLiAgQ3JlYXRlIGFuIGluc3Rh
bmNlIG9mIEFwcGxlJ3Mgc3BlY2lhbCBZb3VUdWJlIHBsdWctaW4gaW5zdGVhZAotICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5QYWNrYWdlID0gW3dlYlZpZXcgX3BsdWdpbkZvck1JTUVUeXBlOkAi
YXBwbGljYXRpb24veC1hcHBsZS1mYWtlLXlvdXR1YmUtcGx1Z2luIl07Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3
ID0gcGx1Z2luVmlldyhtX3dlYkZyYW1lLmdldCgpLCAoV2ViUGx1Z2luUGFja2FnZSAqKXBsdWdp
blBhY2thZ2UsIGtpdChwYXJhbU5hbWVzKSwga2l0KHBhcmFtVmFsdWVzKSwgYmFzZVVSTCwga2l0
KGVsZW1lbnQpLCBsb2FkTWFudWFsbHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZp
ZXcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVn
aW5XaWRnZXRJT1ModmlldykpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQot
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
CiAgICAgQVNTRVJUKHZpZXcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230944</attachid>
            <date>2014-05-06 15:52:04 -0700</date>
            <delta_ts>2014-05-07 12:02:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132568-20140506155141.patch</filename>
            <type>text/plain</type>
            <size>46986</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE0LTA1LTA2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVT
U0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IHRoZSBjdXN0b20gWW91VHViZSBsb2FkZXIgY29kZSBvdXQgb2YgdGhlIFdlYkZyYW1lTG9hZGVy
Q2xpZW50IGludG8gYQorICAgICAgICBQbHVnaW5SZXBsYWNlbWVudC1iYXNlZCBjbGFzcy4KKwor
ICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnBhcmVudEVs
ZW1lbnQpOgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQ
bHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpraXQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50
OjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBs
dWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6b2JqZWN0Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVlvdVR1
YmVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50Ojp5b3VUdWJlVVJMKToK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkIG5ldyBleHBvcnQgZnJvbSBXZWJDb3JlLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyZWRQ
bHVnaW5SZXBsYWNlbWVudHMpOiBBZGQgbmV3IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCB0byBy
ZWdpc3RyeS4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRl
cmVyKTogUmVtb3ZlIGN1c3RvbSBZb3VUdWJlIGNvZGUKKyAgICAgICAgbm93IHRoYXQgdGhpcyBs
b2dpYyBpcyBoYW5kbGVkIGluIHRoZSBwbHVnaW4gcmVwbGFjZW1lbnQgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0
cmVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OllvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZUVtYmVkU2hhZG93RWxlbWVu
dDo6c2hhZG93UHNldWRvSWQpOiBVc2UgY29ycmVjdCBwc2V1ZG9JRCBmb3IgdGhlCisgICAgICAg
IHBsdWdpbiByZXBsYWNlbWVudCBhcmNoaXRlY3R1cmUuCisgICAgICAgICogaHRtbC9zaGFkb3cv
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlTlNVUkxFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0
cmFzLm1tOgorICAgICAgICAoV2ViQ29yZTo6dW5lc2NhcGVkUXVlcnlWYWx1ZSk6IE1vdmVkIGZy
b20gV2ViS2l0L01pc2MvV2ViTlNVUkxFeHRyYXMuCisgICAgICAgIChXZWJDb3JlOjpxdWVyeUtl
eXNBbmRWYWx1ZXMpOiBEaXR0by4KKwogMjAxNC0wNS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENhbid0IG1ha2UgYSBib29raW5nIGF0IHZpcmdpbmFtZXJp
Y2EuY29tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTY4MzcxKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1NjYsNyArMjU2
Niw2IEBAIF9fWk43V2ViQ29yZTIxYXBwbGljYXRpb25Jc0ZhY2Vib29rRXYKIF9fWk43V2ViQ29y
ZTIxbmV4dFBhcmFncmFwaFBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaQogX19aTjdX
ZWJDb3JlMjFzZXRTdHJva2VBbmRGaWxsQ29sb3JFUDlDR0NvbnRleHRQN0NHQ29sb3IKIF9fWk43
V2ViQ29yZTIxd29yZFJhbmdlRnJvbVBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCi1f
X1pON1dlYkNvcmUyMkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQyNWNyZWF0ZVNoYWRvd0lGcmFtZVN1
YnRyZWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyMnN0YXJ0T2ZFZGl0YWJsZUNvbnRl
bnRFUktOU18xNVZpc2libGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTIzYXBwbGljYXRpb25Jc01v
YmlsZU1haWxFdgogX19aTjdXZWJDb3JlMjNhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RU5TXzE4U2VsZWN0aW9uRGlyZWN0
aW9uRQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5S
ZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgWW91VHViZVBsdWdpblJlcGxhY2VtZW50X2gKKyNkZWZpbmUg
WW91VHViZVBsdWdpblJlcGxhY2VtZW50X2gKKworI2luY2x1ZGUgIlBsdWdpblJlcGxhY2VtZW50
LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRP
YmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxQbHVnSW5F
bGVtZW50OworY2xhc3MgSFRNTElGcmFtZUVsZW1lbnQ7CitjbGFzcyBSZW5kZXJFbGVtZW50Owor
Y2xhc3MgUmVuZGVyU3R5bGU7CitjbGFzcyBTaGFkb3dSb290OworY2xhc3MgWW91VHViZUVtYmVk
U2hhZG93RWxlbWVudDsKKworY2xhc3MgWW91VHViZVBsdWdpblJlcGxhY2VtZW50IDogcHVibGlj
IFBsdWdpblJlcGxhY2VtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclBs
dWdpblJlcGxhY2VtZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyKTsKKyAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIHN1
cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQbHVnaW5SZXBsYWNlbWVudD4gY3JlYXRlKEhUTUxQbHVnSW5FbGVtZW50JiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcyk7CisgICAgWW91VHViZVBsdWdpblJlcGxhY2VtZW50KCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaW5zdGFsbFJlcGxhY2VtZW50KFNoYWRvd1Jvb3QqKSBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgYm9vbCB3aWxsQ3JlYXRlUmVuZGVyZXIoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVv
RWxlbWVudDsgfQorICAgIHZpcnR1YWwgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihIVE1MUGx1Z0luRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KSBv
dmVycmlkZTsKKworICAgIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQqIHBhcmVudEVsZW1lbnQo
KSB7IHJldHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQorCisgICAgU3RyaW5nIHlvdVR1YmVV
UkwoY29uc3QgU3RyaW5nJiByYXdVUkwpOworCitwcml2YXRlOgorICAgIFlvdVR1YmVQbHVnaW5S
ZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKKyAgICBSZWZQdHI8WW91VHViZUVtYmVkU2hh
ZG93RWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gbV9hdHRyaWJ1dGVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQorCisjaW1wb3J0
ICJZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKKworI2ltcG9ydCAiRXZlbnQuaCIKKyNpbXBv
cnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbXBvcnQg
IkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNYWlu
RnJhbWUuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJlbmRlckVsZW1lbnQuaCIKKyNp
bXBvcnQgIlNoYWRvd1Jvb3QuaCIKKyNpbXBvcnQgIldlYkNvcmVOU1VSTEV4dHJhcy5oIgorI2lt
cG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCisjaW1wb3J0ICJZb3VUdWJlRW1iZWRTaGFk
b3dFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBZb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQ6OnJlZ2lzdGVyUGx1Z2luUmVwbGFjZW1lbnQoUGx1Z2luUmVwbGFjZW1lbnRS
ZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcihSZXBsYWNlbWVudFBsdWdpbihj
cmVhdGUsIHN1cHBvcnRzTWltZVR5cGUsIHN1cHBvcnRzRmlsZUV4dGVuc2lvbikpOworfQorCitQ
YXNzUmVmUHRyPFBsdWdpblJlcGxhY2VtZW50PiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OmNy
ZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgWW91VHViZVBsdWdpblJlcGxhY2VtZW50KHBsdWdpbiwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpKTsKK30KKworYm9vbCBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1
cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICByZXR1cm4gbWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIgorICAgICAgICB8fCBtaW1l
VHlwZSA9PSAiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIjsKK30KKworYm9vbCBZb3VUdWJlUGx1
Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbikKK3sKKyAgICByZXR1cm4gZXh0ZW5zaW9uID09ICJzcGwiIHx8IGV4dGVuc2lvbiA9PSAi
c3dmIjsKK30KKworc3RhdGljIE5TTXV0YWJsZUFycmF5KiBraXQoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHZlY3RvcikKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2ZWN0b3Iuc2l6ZSgpOworICAgIE5T
TXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTps
ZW5dOworICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBsZW47IHgrKykKKyAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDp2ZWN0b3JbeF1dOworICAgIHJldHVybiBhcnJheTsKK30KKworWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50OjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQoSFRNTFBsdWdJbkVs
ZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKKyAgICA6IFBsdWdpblJlcGxhY2VtZW50KCkKKyAg
ICAsIG1fcGFyZW50RWxlbWVudCgmcGx1Z2luKQorICAgICwgbV92aWRlb0VsZW1lbnQobnVsbHB0
cikKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVJl
Zj4oW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHM6a2l0KHBhcmFtVmFsdWVzKSBm
b3JLZXlzOmtpdChwYXJhbU5hbWVzKV0pOworfQorCitZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6
OllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCgpCisgICAgOiBtX3BhcmVudEVsZW1lbnQobnVsbHB0
cikKKyAgICAsIG1fdmlkZW9FbGVtZW50KG51bGxwdHIpCit7Cit9CisKK1JlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKHBsdWdpbiwgbV9wYXJlbnRFbGVtZW50ID09ICZwbHVnaW4p
OworCisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm4gbV92aWRlb0VsZW1l
bnQtPmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCitzdGF0aWMgTlNTdHJpbmcqIG9iamVjdEZvcktleShDRkRpY3Rpb25h
cnlSZWYgZGljdCwgTlNTdHJpbmcqIGtleSkKK3sKKyAgICByZXR1cm4gW3JlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTlNEaWN0aW9uYXJ5Kj4oZGljdCkgb2JqZWN0Rm9yS2V5OiBrZXldOworfQorCiti
b29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KFNoYWRvd1Jv
b3QqIHJvb3QpCit7CisgICAgbV92aWRlb0VsZW1lbnQgPSBZb3VUdWJlRW1iZWRTaGFkb3dFbGVt
ZW50OjpjcmVhdGUobV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpKTsKKworICAgIHJvb3QtPmFw
cGVuZENoaWxkKG1fdmlkZW9FbGVtZW50LmdldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKwor
ICAgIFJlZlB0cjxIVE1MSUZyYW1lRWxlbWVudD4gaWZyYW1lRWxlbWVudCA9IEhUTUxJRnJhbWVF
bGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjppZnJhbWVUYWcsIG1fcGFyZW50RWxlbWVudC0+ZG9j
dW1lbnQoKSk7CisgICAgaWYgKG9iamVjdEZvcktleShtX2F0dHJpYnV0ZXMuZ2V0KCksIEAid2lk
dGgiKSkKKyAgICAgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6d2lk
dGhBdHRyLCBBdG9taWNTdHJpbmcoIjEwMCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7CisKKyAgICBpZiAoTlNTdHJpbmcqIGhlaWdodFZhbHVlID0gb2JqZWN0Rm9yS2V5
KG1fYXR0cmlidXRlcy5nZXQoKSwgQCJoZWlnaHQiKSkgeworICAgICAgICBpZnJhbWVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIEF0b21pY1N0cmluZygibWF4LWhl
aWdodDogMTAwJSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICAg
ICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgaGVp
Z2h0VmFsdWUpOworICAgIH0KKworICAgIE5TU3RyaW5nKiBzcmMgPSBvYmplY3RGb3JLZXkobV9h
dHRyaWJ1dGVzLmdldCgpLCBAInNyYyIpOworICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnNyY0F0dHIsIHlvdVR1YmVVUkwoc3JjKSk7CisgICAgaWZyYW1lRWxlbWVu
dC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6ZnJhbWVib3JkZXJBdHRyLCBBdG9taWNTdHJpbmco
IjAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgCisgICAgLy8g
RGlzYWJsZSBmcmFtZSBmbGF0dGVuaW5nIGZvciB0aGlzIGlmcmFtZS4KKyAgICBpZnJhbWVFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzY3JvbGxpbmdBdHRyLCBBdG9taWNTdHJpbmco
Im5vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIG1fdmlkZW9F
bGVtZW50LT5hcHBlbmRDaGlsZChpZnJhbWVFbGVtZW50LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIE5TVVJMKiBjcmVhdGVZb3VU
dWJlVVJMKE5TU3RyaW5nKiB2aWRlb0lELCBOU1N0cmluZyogdGltZUlEKQoreworICAgIC8vIFRo
aXMgbWV0aG9kIGNyZWF0ZXMgYSB5b3V0dWJlOiBVUkwsIHdoaWNoIGlzIGFuIGludGVybmFsIGZv
cm1hdCB0aGF0IGlzIHBhc3NlZCB0byBZb3VUdWJlLmFwcC4KKyAgICAvLyBJZiB0aGUgZm9ybWF0
IG9mIHRoZXNlIGludGVybmFsIGxpbmtzIGlzIGNoYW5nZWQgYmVsb3csIHRoZW4gdGhlIGFwcCBw
cm9iYWJseSBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuCisgICAgCisgICAgQVNTRVJUKHZp
ZGVvSUQgJiYgW3ZpZGVvSUQgbGVuZ3RoXSA+IDAgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmlu
ZzpAIi8iXSk7CisgICAgCisgICAgaWYgKFt0aW1lSUQgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJu
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieW91dHVi
ZTolQD90PSVAIiwgdmlkZW9JRCwgdGltZUlEXV07CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieW91dHViZTolQCIsIHZpZGVvSURd
XTsKK30KKworc3RhdGljIE5TVVJMKiBwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVSTChOU1VSTCog
dXJsKQoreworICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHdlIGFyZW4ndCBldmVuIG9uIHd3dy55
b3V0dWJlLmNvbSBvciB5b3V0dWJlLmNvbS4KKyAgICBOU1N0cmluZyogc2NoZW1lID0gW3VybC5z
Y2hlbWUgbG93ZXJjYXNlU3RyaW5nXTsKKyAgICBpZiAoIVtzY2hlbWUgaXNFcXVhbFRvU3RyaW5n
OkAiaHR0cCJdICYmICFbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHBzIl0pCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIE5TU3RyaW5nKiBob3N0TmFtZSA9IFt1cmwuaG9z
dCBsb3dlcmNhc2VTdHJpbmddOworICAgIEJPT0wgaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMID0g
W2hvc3ROYW1lIGlzRXF1YWxUb1N0cmluZzpAIm0ueW91dHViZS5jb20iXTsKKyAgICBCT09MIGlz
WW91VHViZVNob3J0ZW5lZFVSTCA9IFtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJ5b3V0dS5i
ZSJdOworICAgIGlmICghaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMCisgICAgICAgICYmICFpc1lv
dVR1YmVTaG9ydGVuZWRVUkwKKyAgICAgICAgJiYgIVtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJ3d3cueW91dHViZS5jb20iXQorICAgICAgICAmJiAhW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAInlvdXR1YmUuY29tIl0pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIE5T
U3RyaW5nKiBwYXRoID0gW3VybCBwYXRoXTsKKyAgICAKKyAgICAvLyBTaG9ydCBVUkwgb2YgdGhl
IGZvcm06IGh0dHA6Ly95b3V0dS5iZS92MWQzMDFECisgICAgaWYgKGlzWW91VHViZVNob3J0ZW5l
ZFVSTCkgeworICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9IFtwYXRoIGxhc3RQYXRoQ29tcG9u
ZW50XTsKKyAgICAgICAgaWYgKHZpZGVvSUQgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmluZzpA
Ii8iXSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBOU1N0cmluZyogcXVl
cnkgPSBbdXJsIHF1ZXJ5XTsKKyAgICBOU1N0cmluZyogZnJhZ21lbnQgPSBbdXJsIGZyYWdtZW50
XTsKKyAgICAKKyAgICAvLyBPbiB0aGUgWW91VHViZSBtb2JpbGUgd2ViIGFwcCwgdGhlIHBhdGgg
YW5kIHF1ZXJ5IHN0cmluZyBhcmUgcHV0IGludG8gdGhlCisgICAgLy8gZnJhZ21lbnQgc28gdGhh
dCBvbmUgd2ViIHBhZ2UgaXMgb25seSBldmVyIGxvYWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS85
NTUwNjM5PikuCisgICAgaWYgKGlzWW91VHViZU1vYmlsZVdlYkFwcFVSTCkgeworICAgICAgICBO
U1JhbmdlIHJhbmdlID0gW2ZyYWdtZW50IHJhbmdlT2ZTdHJpbmc6QCI/Il07CisgICAgICAgIGlm
IChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSB7CisgICAgICAgICAgICBwYXRoID0gZnJh
Z21lbnQ7CisgICAgICAgICAgICBxdWVyeSA9IG5pbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHBhdGggPSBbZnJhZ21lbnQgc3Vic3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlvbl07
CisgICAgICAgICAgICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJpbmdGcm9tSW5kZXg6KHJhbmdl
LmxvY2F0aW9uICsgMSldOworICAgICAgICB9CisgICAgICAgIGZyYWdtZW50ID0gbmlsOworICAg
IH0KKyAgICAKKyAgICBpZiAoW1twYXRoIGxvd2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5n
OkAiL3dhdGNoIl0pIHsKKyAgICAgICAgaWYgKFtxdWVyeSBsZW5ndGhdKSB7CisgICAgICAgICAg
ICBOU1N0cmluZyogdmlkZW9JRCA9IFtxdWVyeUtleXNBbmRWYWx1ZXMocXVlcnkpIG9iamVjdEZv
cktleTpAInYiXTsKKyAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7CisgICAgICAgICAgICAgICAg
TlNEaWN0aW9uYXJ5KiBmcmFnbWVudERpY3QgPSBxdWVyeUtleXNBbmRWYWx1ZXMoW3VybCBmcmFn
bWVudF0pOworICAgICAgICAgICAgICAgIE5TU3RyaW5nKiB0aW1lSUQgPSBbZnJhZ21lbnREaWN0
IG9iamVjdEZvcktleTpAInQiXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHVi
ZVVSTCh2aWRlb0lELCB0aW1lSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBNYXkgYmUgYSBuZXctc3R5bGUgbGluayAoc2VlIDxyZGFyOi8vcHJvYmxl
bS83NzMzNjkyPikuCisgICAgICAgIGlmIChbZnJhZ21lbnQgaGFzUHJlZml4OkAiISJdKSB7Cisg
ICAgICAgICAgICBxdWVyeSA9IFtmcmFnbWVudCBzdWJzdHJpbmdGcm9tSW5kZXg6MV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChbcXVlcnkgbGVuZ3RoXSkgeworICAgICAgICAgICAg
ICAgIE5TRGljdGlvbmFyeSogcXVlcnlEaWN0ID0gcXVlcnlLZXlzQW5kVmFsdWVzKHF1ZXJ5KTsK
KyAgICAgICAgICAgICAgICBOU1N0cmluZyogdmlkZW9JRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9y
S2V5OkAidiJdOworICAgICAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7CisgICAgICAgICAgICAg
ICAgICAgIE5TU3RyaW5nKiB0aW1lSUQgPSBbcXVlcnlEaWN0IG9iamVjdEZvcktleTpAInQiXTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgdGlt
ZUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKGhhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeChwYXRoLCBAIi92LyIpIHx8IGhhc0Nh
c2VJbnNlbnNpdGl2ZVByZWZpeChwYXRoLCBAIi9lLyIpKSB7CisgICAgICAgIE5TU3RyaW5nKiB2
aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlc2UgVVJMcyBhcmUgZnVubnkgLSB0aGV5IGRvbid0IGhhdmUgYSA/IGZvciB0aGUgZmlyc3Qg
cXVlcnkgcGFyYW1ldGVyLgorICAgICAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBhZnRlciBh
bmQgaW5jbHVkaW5nICcmJyB0byByZW1vdmUgZXh0cmFuZW91cyBwYXJhbWV0ZXJzIGFmdGVyIHRo
ZSB2aWRlbyBJRC4KKyAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmQgPSBbdmlkZW9JRCByYW5nZU9m
U3RyaW5nOkAiJiJdOworICAgICAgICBpZiAoYW1wZXJzYW5kLmxvY2F0aW9uICE9IE5TTm90Rm91
bmQpCisgICAgICAgICAgICB2aWRlb0lEID0gW3ZpZGVvSUQgc3Vic3RyaW5nVG9JbmRleDphbXBl
cnNhbmQubG9jYXRpb25dOworICAgICAgICAKKyAgICAgICAgaWYgKHZpZGVvSUQpCisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCBuaWwpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworU3RyaW5nIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dDo6eW91VHViZVVSTChjb25zdCBTdHJpbmcmIHNyY1N0cmluZykKK3sKKyAgICBOU1VSTCogc3Jj
VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3JjU3RyaW5nXTsKKyAgICBOU1VSTCogeW91VHVi
ZVVSTCA9IHByb2Nlc3NBbmRDcmVhdGVZb3VUdWJlVVJMKHNyY1VSTCk7CisgICAgaWYgKCFzcmNV
UkwgfHwgIXlvdVR1YmVVUkwpCisgICAgICAgIHJldHVybiBzcmNTdHJpbmc7CisKKyAgICAvLyBU
cmFuc2Zvcm0gdGhlIHlvdXR1YmVVUkwgKHlvdXR1YmU6VmlkZW9JRCkgdG8gaWZyYW1lIGVtYmVk
IHVybCB3aGljaCBoYXMgdGhlIGZvcm1hdDogaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9W
aWRlb0lECisgICAgTlNTdHJpbmcqIHNyY1BhdGggPSBzcmNVUkwucGF0aDsKKyAgICBOU1N0cmlu
ZyogdmlkZW9JRCA9IFtbeW91VHViZVVSTCBhYnNvbHV0ZVN0cmluZ10gc3Vic3RyaW5nRnJvbUlu
ZGV4OltbeW91VHViZVVSTCBzY2hlbWVdIGxlbmd0aF0gKyAxXTsKKyAgICBOU1JhbmdlIHJhbmdl
T2ZWaWRlb0lESW5QYXRoID0gW3NyY1BhdGggcmFuZ2VPZlN0cmluZzp2aWRlb0lEXTsKKyAgICBp
ZiAocmFuZ2VPZlZpZGVvSURJblBhdGgubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAg
cmV0dXJuIHNyY1N0cmluZzsKKyAgICAKKyAgICBBU1NFUlQocmFuZ2VPZlZpZGVvSURJblBhdGgu
bGVuZ3RoKTsKKyAgICAKKyAgICAvLyBGcm9tIHRoZSBvcmlnaW5hbCBVUkwsIHdlIG5lZWQgdG8g
Z2V0IHRoZSBwYXJ0IGJlZm9yZSAvcGF0aC9WaWRlb0lkLgorICAgIE5TUmFuZ2UgcmFuZ2VPZlBh
dGhCZWZvcmVWaWRlb0lEID0gW3NyY1N0cmluZyByYW5nZU9mU3RyaW5nOltzcmNQYXRoIHN1YnN0
cmluZ1RvSW5kZXg6cmFuZ2VPZlZpZGVvSURJblBhdGgubG9jYXRpb25dXTsKKyAgICBBU1NFUlQo
cmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lELmxlbmd0aCk7CisgICAgCisgICAgTlNTdHJpbmcqIHNy
Y1VSTFByZWZpeCA9IFtzcmNTdHJpbmcgc3Vic3RyaW5nVG9JbmRleDpyYW5nZU9mUGF0aEJlZm9y
ZVZpZGVvSUQubG9jYXRpb25dOworICAgIE5TU3RyaW5nKiBxdWVyeSA9IHNyY1VSTC5xdWVyeTsK
KworICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBpZnJhbWUgd2lsbCBkaXNwbGF5IGluZm9ybWF0aW9u
IGxpa2UgdGhlIHZpZGVvIHRpdGxlIGFuZCB1cGxvYWRlciBvbiB0b3Agb2YgdGhlIHZpZGVvLiBE
b24ndCBkaXNwbGF5CisgICAgLy8gdGhlbSBpZiB0aGUgZW1iZWRpbmcgaHRtbCBkb2Vzbid0IHNw
ZWNpZnkgaXQuCisgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCAmJiBbcXVlcnkgcmFuZ2VP
ZlN0cmluZzpAInNob3dpbmZvIl0ubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcXVl
cnkgPSBbcXVlcnkgc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCImc2hvd2luZm89MCJdOworICAg
IGVsc2UKKyAgICAgICAgcXVlcnkgPSBAInNob3dpbmZvPTAiOworICAgIAorICAgIC8vIEFwcGVu
ZCB0aGUgcXVlcnkgc3RyaW5nIGlmIGl0IGlzIHZhbGlkLiBTb21lIHNpdGVzIGFwcGFyZW50bHkg
Zm9yZ2V0IHRvIGFkZCAiPyIgZm9yIHRoZSBxdWVyeSBzdHJpbmcsIGluIHRoYXQgY2FzZSwKKyAg
ICAvLyB3ZSB3aWxsIGRpc2NhcmQgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIHVybC4KKyAgICAvLyBT
ZWU6IDxyZGFyOi8vcHJvYmxlbS8xMTUzNTE1NT4gW0JpbmNvbXBhdF0gUmVncmVzc2lvbjogU0My
Q2FzdHMgYXBwOiBWaWRlb3MgZG9uJ3QgcGxheSBpbiBTQzJDYXN0cworICAgIE5TU3RyaW5nKiBl
bWJlZFNyYyA9IHF1ZXJ5ID8gW3NyY1VSTFByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpA
Ii9lbWJlZC8lQD8lQCIsIHZpZGVvSUQsIHF1ZXJ5XSA6IFtzcmNVUkxQcmVmaXggc3RyaW5nQnlB
cHBlbmRpbmdGb3JtYXQ6QCIvZW1iZWQvJUAiLCB2aWRlb0lEXTsKKyAgICAKKyAgICByZXR1cm4g
ZW1iZWRTcmM7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjgzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMDksNiArMjMwOSw4IEBACiAJCTdBNTQ4NTgwMTRFMDJENTEwMDZBRTA1QSAv
KiBJbnNwZWN0b3JIaXN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTU0ODU3RTE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5o
ICovOyB9OwogCQk3QTU0ODgxNzE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU0ODgxNTE0
RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmggKi87IH07CiAJCTdBNTQ4ODE4MTRF
NDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg4MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERP
TVBhdGNoU3VwcG9ydC5jcHAgKi87IH07CisJCTdBNTUxNUY1MTkxODMwQTMwMDk2ODdEMiAvKiBZ
b3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdBNTUxNUYzMTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQuaCAqLzsgfTsKKwkJN0E1NTE1RjYxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1
YmVQbHVnaW5SZXBsYWNlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBNTUxNUY0MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVw
bGFjZW1lbnQubW0gKi87IH07CiAJCTdBNjc0QkRCMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJl
ci5jcHAgKi87IH07CiAJCTdBNjc0QkRDMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2Fk
RGVmZXJyZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLzsg
fTsKIAkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0
RUNCODEwMTgzOUE1MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCAqLzsg
fTsKQEAgLTkzNTksNiArOTM2MSw4IEBACiAJCTdBNTQ4NTdFMTRFMDJENTEwMDZBRTA1QSAvKiBJ
bnNwZWN0b3JIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3Rvckhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E1NDg4MTUxNEU0
MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01QYXRjaFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0E1NDg4MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01QYXRjaFN1cHBvcnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTU1MTVGMzE5MTgzMEEzMDA5Njg3RDIgLyogWW91
VHViZVBsdWdpblJlcGxhY2VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oOyBwYXRoID0gcGx1Z2lucy9Zb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E1NTE1RjQxOTE4
MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5tbTsg
cGF0aCA9IHBsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VH
cm91cExvYWREZWZlcnJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNjc0
QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwTG9hZERlZmVycmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNzI1NkI5MTVFQjlGNUIwMDczMjNBNyAvKiBJbnNwZWN0
b3JPdmVybGF5UGFnZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSW5zcGVjdG9y
T3ZlcmxheVBhZ2UuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzE5LDYg
KzE0MzIzLDggQEAKIAkJMDcyQUUxREUxODNDMDUxMzAwMEE1OTg4IC8qIHBsdWdpbnMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdBNTUxNUYzMTkxODMw
QTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCAqLywKKwkJCQk3QTU1MTVG
NDE5MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lm1tICovLAogCQkJ
CTA3MkFFMURGMTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oICovLAogCQkJ
CTA3MkFFMUUwMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5t
bSAqLywKIAkJCQkwNzJBRTFFMTE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQuY3NzICovLApAQCAtMjMxNjAsNiArMjMxNjYsNyBAQAogCQkJCTA3OUQwODY4MTYy
RjIwRTgwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzlEMDg2QjE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Q0MwQjRGMThCRTk4NDkwMDZDRUJDQyAvKiBD
YXB0dXJpbmdJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0E1NTE1RjUxOTE4MzBB
MzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RERDU3MTUxOEI1N0E4MjAwQTk0RkNCIC8qIENETVNlc3Npb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8u
aCBpbiBIZWFkZXJzICovLApAQCAtMjY4NjIsNiArMjY4NjksNyBAQAogCQkJCUIyNzUzNTY2MEIw
NTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNGMzMyNDBG
MkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZD
OTExRDIwRTQ3MDA0QzIwMUMgLyogQ29sb3JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdB
NTUxNUY2MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzk2MjBEMDBCRjIyMDA3MUI3ODIgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI5OTM1RDE3QTFERDU4MDBCQ0U4ODAgLyogQ29s
b3JJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NzcwQjA1MzgxNDAwMkNF
NjRGIC8qIENvbG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoMVN0ZWluQGdteC5kZSkK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTQgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC01Nyw2ICs1Nyw3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgorI2luY2x1ZGUgIllvdVR1YmVQbHVnaW5SZXBs
YWNlbWVudC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyOCw2ICszMjks
NyBAQCBzdGF0aWMgVmVjdG9yPFJlcGxhY2VtZW50UGx1Z2luKj4mIHJlZ2lzCiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cmVnaXN0ZXJQbHVn
aW5SZXBsYWNlbWVudChyZWdpc3RyYXIpOworICAgIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6
cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChyZWdpc3RyYXIpOwogI2VuZGlmCiAgICAgCiAgICAg
cmV0dXJuIHJlZ2lzdGVyZWRSZXBsYWNlbWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2ODM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDEyICs1NSw2IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAi
SFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNs
dWRlICJZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMjI2LDE0ICsyMjAsNiBA
QCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSFRNTFBsdWdJbkltYWdlCiAgICAgaWYgKGlzSW1h
Z2VUeXBlKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbWFnZT4oKnRo
aXMsIHN0ZDo6bW92ZShzdHlsZSkpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmIChTaGFk
b3dSb290KiBzaGFkb3dSb290ID0gdGhpcy0+c2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIE5vZGUq
IHNoYWRvd05vZGUgPSBzaGFkb3dSb290LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChzaGFk
b3dOb2RlICYmIHNoYWRvd05vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQoKnNoYWRv
d05vZGUpLnNoYWRvd1BzZXVkb0lkKCkgPT0gIi1hcHBsZS15b3V0dWJlLXNoYWRvdy1pZnJhbWUi
KQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRo
aXMsIHN0ZDo6bW92ZShzdHlsZSkpOwotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIEhUTUxQ
bHVnSW5FbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoc3RkOjptb3ZlKHN0eWxlKSk7CiB9
CiAKQEAgLTQxMSwzNSArMzk3LDYgQEAgYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpwYXJ0
T2ZTbmFwcwogICAgIHJldHVybiBub2RlICYmIHNuYXBzaG90TGFiZWwgJiYgKG5vZGUgPT0gc25h
cHNob3RMYWJlbC5nZXQoKSB8fCBub2RlLT5pc0Rlc2NlbmRhbnRPZihzbmFwc2hvdExhYmVsLmdl
dCgpKSk7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmNyZWF0ZVNoYWRvd0lGcmFtZVN1YnRyZWUoY29uc3QgU3RyaW5nJiBzcmMpCi17Ci0gICAg
aWYgKHRoaXMtPnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNyYy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxZb3VUdWJlRW1iZWRTaGFk
b3dFbGVtZW50PiBzaGFkb3dFbGVtZW50ID0gWW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KCkpOwotICAgIFNoYWRvd1Jvb3QmIHJvb3QgPSB0aGlzLT5lbnN1cmVVc2Vy
QWdlbnRTaGFkb3dSb290KCk7Ci0gICAgcm9vdC5hcHBlbmRDaGlsZChzaGFkb3dFbGVtZW50LCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLQotICAgIFJlZlB0cjxIVE1MSUZyYW1lRWxlbWVudD4gaWZy
YW1lRWxlbWVudCA9IEhUTUxJRnJhbWVFbGVtZW50OjpjcmVhdGUoaWZyYW1lVGFnLCBkb2N1bWVu
dCgpKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKHdpZHRoQXR0cikpCi0gICAgICAgIGlmcmFtZUVs
ZW1lbnQtPnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIEF0b21pY1N0cmluZygiMTAwJSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKGhl
aWdodEF0dHIpKSB7Ci0gICAgICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0
dHIsIEF0b21pY1N0cmluZygibWF4LWhlaWdodDogMTAwJSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLSAgICAgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKGhl
aWdodEF0dHIsIGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKSk7Ci0gICAgfQotICAgIGlmcmFtZUVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBzcmMpOwotICAgIGlmcmFtZUVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShmcmFtZWJvcmRlckF0dHIsIEF0b21pY1N0cmluZygiMCIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLQotICAgIC8vIERpc2FibGUgZnJhbWUgZmxhdHRl
bmluZyBmb3IgdGhpcyBpZnJhbWUuCi0gICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKHNj
cm9sbGluZ0F0dHIsIEF0b21pY1N0cmluZygibm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7Ci0gICAgc2hhZG93RWxlbWVudC0+YXBwZW5kQ2hpbGQoaWZyYW1lRWxlbWVu
dCwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci19Ci0jZW5kaWYKLQogdm9pZCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpyZW1vdmVTbmFwc2hvdFRpbWVyRmlyZWQoVGltZXI8SFRNTFBsdWdJbkltYWdl
RWxlbWVudD4mKQogewogICAgIG1fc25hcHNob3RJbWFnZSA9IG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTY4
MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzV2lk
Z2V0VXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1dpZGdldFVwZGF0ZTsgfQogICAgIHZv
aWQgc2V0TmVlZHNXaWRnZXRVcGRhdGUoYm9vbCBuZWVkc1dpZGdldFVwZGF0ZSkgeyBtX25lZWRz
V2lkZ2V0VXBkYXRlID0gbmVlZHNXaWRnZXRVcGRhdGU7IH0KICAgICAKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgdm9pZCBjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0cmVlKGNvbnN0IFN0cmluZyYgc3Jj
KTsKLSNlbmRpZgotCiAgICAgdm9pZCB1c2VyRGlkQ2xpY2tTbmFwc2hvdChQYXNzUmVmUHRyPE1v
dXNlRXZlbnQ+LCBib29sIGZvcndhcmRFdmVudCk7CiAgICAgdm9pZCBjaGVja1NuYXBzaG90U3Rh
dHVzKCk7CiAgICAgSW1hZ2UqIHNuYXBzaG90SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3NuYXBz
aG90SW1hZ2UuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lvdVR1
YmVFbWJlZFNoYWRvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1lvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjgzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQuaCIKIAotI2lmIFBMQVRGT1JN
KElPUykKLQogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDIsNiArNDAsMTIgQEAgUGFzc1JlZlB0cjxZb3VUdWJlRW1iZWRTaGFkb3dFbGVt
ZW50PiBZbwogWW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6WW91VHViZUVtYmVkU2hhZG93RWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBIVE1MRGl2RWxlbWVudChIVE1MTmFtZXM6
OmRpdlRhZywgZG9jdW1lbnQpCiB7CisgICAgc2V0UHNldWRvKHNoYWRvd1BzZXVkb0lkKCkpOwor
CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVl
SW5saW5lQmxvY2spOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3Np
dGlvbiwgQ1NTVmFsdWVSZWxhdGl2ZSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoLCBDU1NWYWx1ZTEwMCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUhlaWdodCwgQ1NTVmFsdWUxMDApOwogfQogCiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KiBZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50OjpwbHVnaW5FbGVtZW50KCkgY29uc3QKQEAg
LTUzLDEwICs1Nyw4IEBAIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIFlvdVR1YmVFbWJlZFNoYWQK
IAogY29uc3QgQXRvbWljU3RyaW5nJiBZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50OjpzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0CiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgcHNldWRvSWQsICgiLWFwcGxlLXlvdXR1YmUtc2hhZG93LWlmcmFtZSIpKTsK
KyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBwc2V1ZG9J
ZCwgKCItd2Via2l0LXBsdWdpbi1yZXBsYWNlbWVudCIpKTsKICAgICByZXR1cm4gcHNldWRvSWQ7
CiB9CiAKIH0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VU
dWJlRW1iZWRTaGFkb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oCShyZXZpc2lvbiAxNjgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYgWW91VHViZUVtYmVkU2hh
ZG93RWxlbWVudF9oCiAjZGVmaW5lIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnRfaAogCi0jaWYg
UExBVEZPUk0oSU9TKQotCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCkBAIC00OCw2ICs0Niw0IEBAIHByaXZhdGU6CiAKIH0KIAotI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKLQogI2VuZGlmIC8vIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1VSTEV4dHJhcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxF
eHRyYXMuaAkocmV2aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU1VSTEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw0ICs1MCw3IEBAIE5T
UmFuZ2UgcmFuZ2VPZlVSTFNjaGVtZShOU1N0cmluZyAqKTsKIEJPT0wgaXNVc2VyVmlzaWJsZVVS
TChOU1N0cmluZyAqKTsKIEJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJpbmcgKik7CiAK
K05TRGljdGlvbmFyeSAqcXVlcnlLZXlzQW5kVmFsdWVzKE5TU3RyaW5nKik7CitOU1N0cmluZyAq
dW5lc2NhcGVkUXVlcnlWYWx1ZShOU1N0cmluZyopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNVUkxF
eHRyYXMubW0JKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlTlNVUkxFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4Nyw0ICs5ODcsNzEg
QEAgQk9PTCBsb29rc0xpa2VBYnNvbHV0ZVVSTChOU1N0cmluZyAqc3RyaQogICAgIHJldHVybiBy
YW5nZU9mVVJMU2NoZW1lKHN0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlKHN0cmluZykpLmxvY2F0
aW9uICE9IE5TTm90Rm91bmQ7CiB9CiAKK05TU3RyaW5nICp1bmVzY2FwZWRRdWVyeVZhbHVlKE5T
U3RyaW5nKiBpbnB1dCkKK3sKKyAgICBOU011dGFibGVTdHJpbmcgKnN0cmluZyA9IFtbW2lucHV0
IHN0cmluZ0J5UmVwbGFjaW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgIGlmICghc3RyaW5nKSB7
CisgICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBkZWNvZGUgdGhlIFVSTCBhcyBVVEY4LCBmYWxs
IGJhY2sgdG8gTGF0aW4xCisgICAgICAgIHN0cmluZyA9IFtbW2lucHV0IHN0cmluZ0J5UmVwbGFj
aW5nUGVyY2VudEVzY2FwZXNVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2Rpbmdd
IG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVwbGFjZU9jY3Vy
cmVuY2VzT2ZTdHJpbmc6QCIrIiB3aXRoU3RyaW5nOkAiICIgb3B0aW9uczpOU0xpdGVyYWxTZWFy
Y2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKV07CisgICAgfQorICAgIHJl
dHVybiBzdHJpbmc7Cit9CisgICAgCitOU0RpY3Rpb25hcnkgKnF1ZXJ5S2V5c0FuZFZhbHVlcyhO
U1N0cmluZyogcXVlcnlTdHJpbmcpCit7CisgICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBbcXVl
cnlTdHJpbmcgbGVuZ3RoXTsKKyAgICBpZiAoIXF1ZXJ5TGVuZ3RoKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnF1ZXJ5S2V5c0FuZFZhbHVlcyA9
IG5pbDsKKyAgICBOU1JhbmdlIGVxdWFsU2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBxdWVy
eUxlbmd0aCk7CisgICAgCisgICAgd2hpbGUgKGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRpb24gPCBx
dWVyeUxlbmd0aCAtIDEgJiYgZXF1YWxTZWFyY2hSYW5nZS5sZW5ndGgpIHsKKyAgICAgICAgCisg
ICAgICAgIC8vIFNlYXJjaCBmb3IgIj0iLgorICAgICAgICBOU1JhbmdlIGVxdWFsUmFuZ2UgPSBb
cXVlcnlTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIj0iIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNoIHJh
bmdlOmVxdWFsU2VhcmNoUmFuZ2VdOworICAgICAgICBpZiAoZXF1YWxSYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBpbmRleEFmdGVyRXF1YWwgPSBlcXVhbFJhbmdlLmxvY2F0aW9uICsgMTsKKyAgICAgICAg
aWYgKGluZGV4QWZ0ZXJFcXVhbCA+IHF1ZXJ5TGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBrZXkgYmVmb3JlIHRoZSAiPSIuCisgICAg
ICAgIE5TUmFuZ2Uga2V5UmFuZ2UgPSBOU01ha2VSYW5nZShlcXVhbFNlYXJjaFJhbmdlLmxvY2F0
aW9uLCBlcXVhbFJhbmdlLmxvY2F0aW9uIC0gZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICAvLyBTZWFjaCBmb3IgdGhlIGFtcGVyc2FuZC4KKyAgICAgICAgTlNS
YW5nZSBhbXBlcnNhbmRTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVhbCwg
cXVlcnlMZW5ndGggLSBpbmRleEFmdGVyRXF1YWwpOworICAgICAgICBOU1JhbmdlIGFtcGVyc2Fu
ZFJhbmdlID0gW3F1ZXJ5U3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCImIiBvcHRpb25zOk5TTGl0ZXJh
bFNlYXJjaCByYW5nZTphbXBlcnNhbmRTZWFyY2hSYW5nZV07CisgICAgICAgIAorICAgICAgICAv
LyBHZXQgdGhlIHZhbHVlIGFmdGVyIHRoZSAiPSIsIGJlZm9yZSB0aGUgYW1wZXJzYW5kLgorICAg
ICAgICBOU1JhbmdlIHZhbHVlUmFuZ2U7CisgICAgICAgIGlmIChhbXBlcnNhbmRSYW5nZS5sb2Nh
dGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICAgICAgdmFsdWVSYW5nZSA9IE5TTWFrZVJhbmdl
KGluZGV4QWZ0ZXJFcXVhbCwgYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gLSBpbmRleEFmdGVyRXF1
YWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZVJhbmdlID0gTlNNYWtlUmFuZ2Uo
aW5kZXhBZnRlckVxdWFsLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJFcXVhbCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIC8vIFNhdmUgdGhlIGtleSBhbmQgdGhlIHZhbHVlLgorICAgICAg
ICBpZiAoa2V5UmFuZ2UubGVuZ3RoICYmIHZhbHVlUmFuZ2UubGVuZ3RoKSB7CisgICAgICAgICAg
ICBpZiAocXVlcnlLZXlzQW5kVmFsdWVzID09IG5pbCkKKyAgICAgICAgICAgICAgICBxdWVyeUtl
eXNBbmRWYWx1ZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICprZXkgPSBbW3F1ZXJ5U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTprZXlS
YW5nZV0gbG93ZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IHVu
ZXNjYXBlZFF1ZXJ5VmFsdWUoW3F1ZXJ5U3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5nZTp2YWx1ZVJh
bmdlXSk7CisgICAgICAgICAgICBpZiAoW2tleSBsZW5ndGhdICYmIFt2YWx1ZSBsZW5ndGhdKQor
ICAgICAgICAgICAgICAgIFtxdWVyeUtleXNBbmRWYWx1ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktl
eTprZXldOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGUgZW5kLgorICAg
ICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gQ29udGludWUgc2VhcmNoaW5nIGFmdGVy
IHRoZSBhbXBlcnNhbmQuCisgICAgICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJBbXBlcnNhbmQgPSBh
bXBlcnNhbmRSYW5nZS5sb2NhdGlvbiArIDE7CisgICAgICAgIGVxdWFsU2VhcmNoUmFuZ2UgPSBO
U01ha2VSYW5nZShpbmRleEFmdGVyQW1wZXJzYW5kLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJB
bXBlcnNhbmQpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcXVlcnlLZXlzQW5kVmFsdWVzOwor
fQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gMTY4MzcxKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMDUtMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgW01hYywgaU9TXSBSRUdSRVNTSU9OOiBXSzIgWW91VHVi
ZSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzI1NjgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNDY0MzQ0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJOU1VSTEV4dHJh
cy5oOgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06IE1vdmUgdXNlZnVsIGNvZGUg
dG8gV2ViQ29yZSBzbyB0aGF0IGl0IGNhbgorICAgICAgICBiZSBzaGFyZWQgd2l0aCBXSzIuCisg
ICAgICAgICgtW05TVVJMIF93ZWJraXRfeW91VHViZVVSTF0pOgorICAgICAgICAoLVtOU1N0cmlu
ZyBfd2Via2l0X3F1ZXJ5S2V5c0FuZFZhbHVlc10pOgorICAgICAgICAoY3JlYXRlWW91VHViZVVS
TCk6IERlbGV0ZWQuCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfdW5lc2NhcGVkUXVlcnlW
YWx1ZV0pOiBEZWxldGVkLgorCiAyMDE0LTA1LTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IFdlYktpdFBsdWdpbkhvc3QuYXBwIGluIFdlYktp
dExlZ2FjeS5mcmFtZXdvcmsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxF
eHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0
cmFzLmgJKHJldmlzaW9uIDE2ODM3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNV
UkxFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOCArNzIsNiBAQCBAaW50ZXJmYWNlIE5T
VVJMIChXZWJOU1VSTEV4dHJhcykKIC0gKE5TVVJMICopX3dlYmtpdF9VUkxGcm9tVVJMT3JTY2hl
bWVsZXNzRmlsZVVSTDsKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKLS0gKE5TVVJMICopX3dlYmtp
dF95b3VUdWJlVVJMOwotCiArIChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5T
U3RyaW5nICopcmVsYXRpdmVQYXJ0OwogI2VuZGlmCiBAZW5kCkBAIC05OSw5ICs5Nyw0IEBAIEBp
bnRlcmZhY2UgTlNTdHJpbmcgKFdlYk5TVVJMRXh0cmFzKQogLSAoTlNTdHJpbmcgKilfd2Via2l0
X1VSTEZyYWdtZW50OwogLSAoTlNTdHJpbmcgKilfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVS
TDsKIAotI2lmIFRBUkdFVF9PU19JUEhPTkUKLS0gKE5TU3RyaW5nICopX3dlYmtpdF91bmVzY2Fw
ZWRRdWVyeVZhbHVlOwotLSAoTlNEaWN0aW9uYXJ5ICopX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1
ZXM7Ci0jZW5kaWYKLQogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1VS
TEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJM
RXh0cmFzLm1tCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
Yk5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsMTAwICsyNzQsNiBAQCAtIChO
U1VSTCAqKV93ZWJraXRfVVJMRnJvbVVSTE9yU2NoZW1lbGVzCiB9CiAKICNpZiBQTEFURk9STShJ
T1MpCi1zdGF0aWMgaW5saW5lIE5TVVJMICpjcmVhdGVZb3VUdWJlVVJMKE5TU3RyaW5nICp2aWRl
b0lELCBOU1N0cmluZyAqdGltZUlEKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSB5
b3V0dWJlOiBVUkwsIHdoaWNoIGlzIGFuIGludGVybmFsIGZvcm1hdCB0aGF0IGlzIHBhc3NlZCB0
byBZb3VUdWJlLmFwcC4KLSAgICAvLyBJZiB0aGUgZm9ybWF0IG9mIHRoZXNlIGludGVybmFsIGxp
bmtzIGlzIGNoYW5nZWQgYmVsb3csIHRoZW4gdGhlIGFwcCBwcm9iYWJseSBuZWVkcyB0byBiZSB1
cGRhdGVkIGFzIHdlbGwuCi0KLSAgICBBU1NFUlQodmlkZW9JRCAmJiBbdmlkZW9JRCBsZW5ndGhd
ID4gMCAmJiAhW3ZpZGVvSUQgaXNFcXVhbFRvU3RyaW5nOkAiLyJdKTsKLQotICAgIGlmIChbdGlt
ZUlEIGxlbmd0aF0pCi0gICAgICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAInlvdXR1YmU6JUA/dD0lQCIsIHZpZGVvSUQsIHRpbWVJRF1d
OwotICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAInlvdXR1YmU6JUAiLCB2aWRlb0lEXV07Ci19Ci0KLS0gKE5TVVJMICopX3dlYmtpdF95
b3VUdWJlVVJMCi17Ci0gICAgLy8gQmFpbCBvdXQgZWFybHkgaWYgd2UgYXJlbid0IGV2ZW4gb24g
d3d3LnlvdXR1YmUuY29tIG9yIHlvdXR1YmUuY29tLgotICAgIE5TU3RyaW5nICpzY2hlbWUgPSBb
W3NlbGYgc2NoZW1lXSBsb3dlcmNhc2VTdHJpbmddOwotICAgIGlmICghW3NjaGVtZSBpc0VxdWFs
VG9TdHJpbmc6QCJodHRwIl0gJiYgIVtzY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cHMiXSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TU3RyaW5nICpob3N0TmFtZSA9IFtbc2VsZiBo
b3N0XSBsb3dlcmNhc2VTdHJpbmddOwotICAgIEJPT0wgaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJM
ID0gW2hvc3ROYW1lIGlzRXF1YWxUb1N0cmluZzpAIm0ueW91dHViZS5jb20iXTsKLSAgICBCT09M
IGlzWW91VHViZVNob3J0ZW5lZFVSTCA9IFtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJ5b3V0
dS5iZSJdOwotICAgIGlmICghaXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMCi0gICAgICAgICYmICFp
c1lvdVR1YmVTaG9ydGVuZWRVUkwKLSAgICAgICAgJiYgIVtob3N0TmFtZSBpc0VxdWFsVG9TdHJp
bmc6QCJ3d3cueW91dHViZS5jb20iXQotICAgICAgICAmJiAhW2hvc3ROYW1lIGlzRXF1YWxUb1N0
cmluZzpAInlvdXR1YmUuY29tIl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU1N0cmlu
ZyAqcGF0aCA9IFtzZWxmIHBhdGhdOwotCi0gICAgLy8gU2hvcnQgVVJMIG9mIHRoZSBmb3JtOiBo
dHRwOi8veW91dHUuYmUvdjFkMzAxRAotICAgIGlmIChpc1lvdVR1YmVTaG9ydGVuZWRVUkwpIHsK
LSAgICAgICAgTlNTdHJpbmcgKnZpZGVvSUQgPSBbcGF0aCBsYXN0UGF0aENvbXBvbmVudF07Ci0g
ICAgICAgIGlmICh2aWRlb0lEICYmICFbdmlkZW9JRCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pCi0g
ICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCBuaWwpOwotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIE5TU3RyaW5nICpxdWVyeSA9IFtzZWxmIHF1ZXJ5
XTsKLSAgICBOU1N0cmluZyAqZnJhZ21lbnQgPSBbc2VsZiBmcmFnbWVudF07Ci0KLSAgICAvLyBP
biB0aGUgWW91VHViZSBtb2JpbGUgd2ViIGFwcCwgdGhlIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBh
cmUgcHV0IGludG8gdGhlCi0gICAgLy8gZnJhZ21lbnQgc28gdGhhdCBvbmUgd2ViIHBhZ2UgaXMg
b25seSBldmVyIGxvYWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS85NTUwNjM5PikuCi0gICAgaWYg
KGlzWW91VHViZU1vYmlsZVdlYkFwcFVSTCkgewotICAgICAgICBOU1JhbmdlIHJhbmdlID0gW2Zy
YWdtZW50IHJhbmdlT2ZTdHJpbmc6QCI/Il07Ci0gICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICBwYXRoID0gZnJhZ21lbnQ7Ci0gICAgICAgICAg
ICBxdWVyeSA9IG5pbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhdGggPSBbZnJh
Z21lbnQgc3Vic3RyaW5nVG9JbmRleDpyYW5nZS5sb2NhdGlvbl07Ci0gICAgICAgICAgICBxdWVy
eSA9IFtmcmFnbWVudCBzdWJzdHJpbmdGcm9tSW5kZXg6KHJhbmdlLmxvY2F0aW9uICsgMSldOwot
ICAgICAgICB9Ci0gICAgICAgIGZyYWdtZW50ID0gbmlsOwotICAgIH0KLQotICAgIGlmIChbW3Bh
dGggbG93ZXJjYXNlU3RyaW5nXSBpc0VxdWFsVG9TdHJpbmc6QCIvd2F0Y2giXSkgewotICAgICAg
ICBpZiAoW3F1ZXJ5IGxlbmd0aF0pIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0g
W1txdWVyeSBfd2Via2l0X3F1ZXJ5S2V5c0FuZFZhbHVlc10gb2JqZWN0Rm9yS2V5OkAidiJdOwot
ICAgICAgICAgICAgaWYgKHZpZGVvSUQpIHsKLSAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkg
KmZyYWdtZW50RGljdCA9IFtbc2VsZiBmcmFnbWVudF0gX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1
ZXNdOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICp0aW1lSUQgPSBbZnJhZ21lbnREaWN0IG9i
amVjdEZvcktleTpAInQiXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVS
TCh2aWRlb0lELCB0aW1lSUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gTWF5IGJlIGEgbmV3LXN0eWxlIGxpbmsgKHNlZSA8cmRhcjovL3Byb2JsZW0vNzczMzY5Mj4p
LgotICAgICAgICBpZiAoW2ZyYWdtZW50IGhhc1ByZWZpeDpAIiEiXSkgewotICAgICAgICAgICAg
cXVlcnkgPSBbZnJhZ21lbnQgc3Vic3RyaW5nRnJvbUluZGV4OjFdOwotCi0gICAgICAgICAgICBp
ZiAoW3F1ZXJ5IGxlbmd0aF0pIHsKLSAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKnF1ZXJ5
RGljdCA9IFtxdWVyeSBfd2Via2l0X3F1ZXJ5S2V5c0FuZFZhbHVlc107Ci0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKnZpZGVvSUQgPSBbcXVlcnlEaWN0IG9iamVjdEZvcktleTpAInYiXTsKLSAg
ICAgICAgICAgICAgICBpZiAodmlkZW9JRCkgewotICAgICAgICAgICAgICAgICAgICBOU1N0cmlu
ZyAqdGltZUlEID0gW3F1ZXJ5RGljdCBvYmplY3RGb3JLZXk6QCJ0Il07Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVZb3VUdWJlVVJMKHZpZGVvSUQsIHRpbWVJRCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbcGF0
aCBfd2ViX2hhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeDpAIi92LyJdIHx8IFtwYXRoIF93ZWJfaGFz
Q2FzZUluc2Vuc2l0aXZlUHJlZml4OkAiL2UvIl0pIHsKLSAgICAgICAgTlNTdHJpbmcgKnZpZGVv
SUQgPSBbcGF0aCBsYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICAgICAgLy8gVGhlc2UgVVJMcyBh
cmUgZnVubnkgLSB0aGV5IGRvbid0IGhhdmUgYSA/IGZvciB0aGUgZmlyc3QgcXVlcnkgcGFyYW1l
dGVyLgotICAgICAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBhZnRlciBhbmQgaW5jbHVkaW5n
ICcmJyB0byByZW1vdmUgZXh0cmFuZW91cyBwYXJhbWV0ZXJzIGFmdGVyIHRoZSB2aWRlbyBJRC4K
LSAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmQgPSBbdmlkZW9JRCByYW5nZU9mU3RyaW5nOkAiJiJd
OwotICAgICAgICBpZiAoYW1wZXJzYW5kLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCi0gICAgICAg
ICAgICB2aWRlb0lEID0gW3ZpZGVvSUQgc3Vic3RyaW5nVG9JbmRleDphbXBlcnNhbmQubG9jYXRp
b25dOwotCi0gICAgICAgIGlmICh2aWRlb0lEKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlv
dVR1YmVVUkwodmlkZW9JRCwgbmlsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmlsOwotfQotCiAr
IChOU1VSTCAqKXVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQ6KE5TU3RyaW5nICopcmVsYXRpdmVQ
YXJ0CiB7CiAgICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCk7CkBAIC00OTAsNzMgKzM5Niw0IEBAIC0gKE5TU3RyaW5nICopX3dlYmtpdF9VUkxG
cmFnbWVudAogICAgIHJldHVybiBbc2VsZiBzdWJzdHJpbmdGcm9tSW5kZXg6ZnJhZ21lbnRSYW5n
ZS5sb2NhdGlvbiArIDFdOwogfQogCi0jaWYgUExBVEZPUk0oSU9TKQotCi0tIChOU1N0cmluZyAq
KV93ZWJraXRfdW5lc2NhcGVkUXVlcnlWYWx1ZQotewotICAgIE5TTXV0YWJsZVN0cmluZyAqc3Ry
aW5nID0gW1tbc2VsZiBzdHJpbmdCeVJlcGxhY2luZ1BlcmNlbnRFc2NhcGVzVXNpbmdFbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICBp
ZiAoIXN0cmluZykgLy8gSWYgd2UgZmFpbGVkIHRvIGRlY29kZSB0aGUgVVJMIGFzIFVURjgsIGZh
bGwgYmFjayB0byBMYXRpbjEKLSAgICAgICAgc3RyaW5nID0gW1tbc2VsZiBzdHJpbmdCeVJlcGxh
Y2luZ1BlcmNlbnRFc2NhcGVzVXNpbmdFbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5n
XSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAgIFtzdHJpbmcgcmVwbGFjZU9jY3VycmVu
Y2VzT2ZTdHJpbmc6QCIrIiB3aXRoU3RyaW5nOkAiICIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2gg
cmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKV07Ci0gICAgcmV0dXJuIHN0cmlu
ZzsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXMKLXsK
LSAgICB1bnNpZ25lZCBxdWVyeUxlbmd0aCA9IFtzZWxmIGxlbmd0aF07Ci0gICAgaWYgKCFxdWVy
eUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpxdWVyeUtleXNBbmRWYWx1ZXMgPSBuaWw7Ci0gICAgTlNSYW5nZSBlcXVhbFNlYXJjaFJh
bmdlID0gTlNNYWtlUmFuZ2UoMCwgcXVlcnlMZW5ndGgpOwotICAgIAotICAgIHdoaWxlIChlcXVh
bFNlYXJjaFJhbmdlLmxvY2F0aW9uIDwgcXVlcnlMZW5ndGggLSAxICYmIGVxdWFsU2VhcmNoUmFu
Z2UubGVuZ3RoKSB7Ci0gICAgICAgIAotICAgICAgICAvLyBTZWFyY2ggZm9yICI9Ii4KLSAgICAg
ICAgTlNSYW5nZSBlcXVhbFJhbmdlID0gW3NlbGYgcmFuZ2VPZlN0cmluZzpAIj0iIG9wdGlvbnM6
TlNMaXRlcmFsU2VhcmNoIHJhbmdlOmVxdWFsU2VhcmNoUmFuZ2VdOwotICAgICAgICBpZiAoZXF1
YWxSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBpbmRleEFmdGVyRXF1YWwgPSBlcXVhbFJhbmdlLmxvY2F0
aW9uICsgMTsKLSAgICAgICAgaWYgKGluZGV4QWZ0ZXJFcXVhbCA+IHF1ZXJ5TGVuZ3RoIC0gMSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIC8v
IEdldCB0aGUga2V5IGJlZm9yZSB0aGUgIj0iLgotICAgICAgICBOU1JhbmdlIGtleVJhbmdlID0g
TlNNYWtlUmFuZ2UoZXF1YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiwgZXF1YWxSYW5nZS5sb2NhdGlv
biAtIGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRpb24pOwotICAgICAgICAKLSAgICAgICAgLy8gU2Vh
Y2ggZm9yIHRoZSBhbXBlcnNhbmQuCi0gICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5kU2VhcmNoUmFu
Z2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1YWwsIHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRl
ckVxdWFsKTsKLSAgICAgICAgTlNSYW5nZSBhbXBlcnNhbmRSYW5nZSA9IFtzZWxmIHJhbmdlT2ZT
dHJpbmc6QCImIiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTphbXBlcnNhbmRTZWFyY2hS
YW5nZV07Ci0gICAgICAgIAotICAgICAgICAvLyBHZXQgdGhlIHZhbHVlIGFmdGVyIHRoZSAiPSIs
IGJlZm9yZSB0aGUgYW1wZXJzYW5kLgotICAgICAgICBOU1JhbmdlIHZhbHVlUmFuZ2U7Ci0gICAg
ICAgIGlmIChhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAgICAg
ICAgdmFsdWVSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVhbCwgYW1wZXJzYW5kUmFu
Z2UubG9jYXRpb24gLSBpbmRleEFmdGVyRXF1YWwpOwotICAgICAgICBlbHNlIAotICAgICAgICAg
ICAgdmFsdWVSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJFcXVhbCwgcXVlcnlMZW5ndGgg
LSBpbmRleEFmdGVyRXF1YWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAvLyBTYXZlIHRo
ZSBrZXkgYW5kIHRoZSB2YWx1ZS4KLSAgICAgICAgaWYgKGtleVJhbmdlLmxlbmd0aCAmJiB2YWx1
ZVJhbmdlLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHF1ZXJ5S2V5c0FuZFZhbHVlcyA9PSBu
aWwpCi0gICAgICAgICAgICAgICAgcXVlcnlLZXlzQW5kVmFsdWVzID0gW05TTXV0YWJsZURpY3Rp
b25hcnkgZGljdGlvbmFyeV07Ci0gICAgICAgICAgICBOU1N0cmluZyAqa2V5ID0gW1tzZWxmIHN1
YnN0cmluZ1dpdGhSYW5nZTprZXlSYW5nZV0gbG93ZXJjYXNlU3RyaW5nXTsKLSAgICAgICAgICAg
IE5TU3RyaW5nICp2YWx1ZSA9IFtbc2VsZiBzdWJzdHJpbmdXaXRoUmFuZ2U6dmFsdWVSYW5nZV0g
X3dlYmtpdF91bmVzY2FwZWRRdWVyeVZhbHVlXTsKLSAgICAgICAgICAgIGlmIChba2V5IGxlbmd0
aF0gJiYgW3ZhbHVlIGxlbmd0aF0pCi0gICAgICAgICAgICAgICAgW3F1ZXJ5S2V5c0FuZFZhbHVl
cyBzZXRPYmplY3Q6dmFsdWUgZm9yS2V5OmtleV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIEF0IHRoZSBlbmQuCi0gICAgICAgIGlmIChhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICAvLyBD
b250aW51ZSBzZWFyY2hpbmcgYWZ0ZXIgdGhlIGFtcGVyc2FuZC4KLSAgICAgICAgdW5zaWduZWQg
aW5kZXhBZnRlckFtcGVyc2FuZCA9IGFtcGVyc2FuZFJhbmdlLmxvY2F0aW9uICsgMTsKLSAgICAg
ICAgZXF1YWxTZWFyY2hSYW5nZSA9IE5TTWFrZVJhbmdlKGluZGV4QWZ0ZXJBbXBlcnNhbmQsIHF1
ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRlckFtcGVyc2FuZCk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBxdWVyeUtleXNBbmRWYWx1ZXM7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KIEBl
bmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAxNjgzNzEpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjAwMCw2NiArMjAwMCw3IEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxv
YWRlckNsaWVudDoKICAgICAgICAgICAgIFtlcnJvciByZWxlYXNlXTsKICAgICAgICAgfQogCi0j
aWYgUExBVEZPUk0oSU9TKQotICAgICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIFlvdVR1YmUgRmxh
c2ggcGx1Zy1pbgotICAgICAgICBpZiAoW01JTUVUeXBlIGlzRXF1YWxUb1N0cmluZzpAImFwcGxp
Y2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIl0pIHsKLSAgICAgICAgICAgIE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzOmtpdChwYXJh
bVZhbHVlcykgZm9yS2V5czpraXQocGFyYW1OYW1lcyldOwotICAgICAgICAgICAgTlNTdHJpbmcg
KnNyY1N0cmluZyA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpAInNyYyJdOwotICAgICAgICAg
ICAgaWYgKHNyY1N0cmluZykgewotICAgICAgICAgICAgICAgIE5TVVJMICpzcmNVUkwgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpzcmNTdHJpbmddOwotICAgICAgICAgICAgICAgIE5TVVJMICp5b3V0
dWJlVVJMID0gW3NyY1VSTCBfd2Via2l0X3lvdVR1YmVVUkxdOwotICAgICAgICAgICAgICAgIGlm
IChzcmNVUkwgJiYgeW91dHViZVVSTCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2Zv
cm0gdGhlIHlvdXR1YmVVUkwgKHlvdXR1YmU6VmlkZW9JRCkgdG8gaWZyYW1lIGVtYmVkIHVybCB3
aGljaCBoYXMgdGhlIGZvcm1hdDogaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9WaWRlb0lE
Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICpzcmNQYXRoID0gW3NyY1VSTCBwYXRoXTsK
LSAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZpZGVvSUQgPSBbW3lvdXR1YmVVUkwgYWJz
b2x1dGVTdHJpbmddIHN1YnN0cmluZ0Zyb21JbmRleDpbW3lvdXR1YmVVUkwgc2NoZW1lXSBsZW5n
dGhdICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2VPZlZpZGVvSURJblBh
dGggPSBbc3JjUGF0aCByYW5nZU9mU3RyaW5nOnZpZGVvSURdOwotICAgICAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqc3JjVVJMUHJlZml4ID0gbmlsOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cmFuZ2VPZlZpZGVvSURJblBhdGgubG9jYXRpb24gPT0gTlNOb3RGb3VuZCAmJiAhV2ViS2l0TGlu
a2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfWU9VVFVCRV9FTUJFRF9JRlJB
TUVfVFJBTlNGT1JNKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZpZGVv
SUQgaXMgbm90IGluc2lkZSBzcmNQYXRoLCB0aGUgZW1iZWQgc3JjIHVybCBpcyBpbiB3cm9uZyBm
b3JtYXQuIFdlIHN0aWxsIHdhbnQgdG8gc3VwcG9ydCB0aGVtIGZvciBhcHBzIGJ1aWxkIGFnYWlu
c3QgNS4xIGFuZCBvbGRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBlbWJlZCBz
cmMgbGlrZSBodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VmlkZW9JRCwgd2UgbWFrZSBz
cmNVUkxQcmVmaXggImh0dHA6Ly93d3cueW91dHViZS5jb20iLgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU2VlOiA8cmRhcjovL3Byb2JsZW0vMTE1MTc1MDI+IHlvdXR1YmUgdmlkZW9zIGRv
bid0IHdvcmsgaW4gRkFPIEZvcmVzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmNVUkxQ
cmVmaXggPSBbc3JjU3RyaW5nIHN1YnN0cmluZ1RvSW5kZXg6W3NyY1N0cmluZyByYW5nZU9mU3Ry
aW5nOnNyY1BhdGhdLmxvY2F0aW9uXTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyYW5nZU9mVmlkZW9JREluUGF0aC5sZW5ndGgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGcm9tIHRoZSBvcmlnaW5hbCBVUkwsIHdl
IG5lZWQgdG8gZ2V0IHRoZSBwYXJ0IGJlZm9yZSAvcGF0aC9WaWRlb0lkLgotICAgICAgICAgICAg
ICAgICAgICAgICAgTlNSYW5nZSByYW5nZU9mUGF0aEJlZm9yZVZpZGVvSUQgPSBbc3JjU3RyaW5n
IHJhbmdlT2ZTdHJpbmc6W3NyY1BhdGggc3Vic3RyaW5nVG9JbmRleDpyYW5nZU9mVmlkZW9JRElu
UGF0aC5sb2NhdGlvbl1dOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJhbmdlT2ZQ
YXRoQmVmb3JlVmlkZW9JRC5sZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNV
UkxQcmVmaXggPSBbc3JjU3RyaW5nIHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2VPZlBhdGhCZWZvcmVW
aWRlb0lELmxvY2F0aW9uXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqcXVlcnkgPSBbc3JjVVJMIHF1ZXJ5XTsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQnkgZGVmYXVsdCwgdGhlIGlmcmFtZSB3aWxsIGRpc3BsYXkgaW5mb3JtYXRpb24gbGlr
ZSB0aGUgdmlkZW8gdGl0bGUgYW5kIHVwbG9hZGVyIG9uIHRvcCBvZiB0aGUgdmlkZW8uICBEb24n
dCBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZW0gaWYgdGhlIGVtYmVkaW5nIGh0
bWwgZG9lc24ndCBzcGVjaWZ5IGl0LgotICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkgJiYg
W3F1ZXJ5IGxlbmd0aF0gJiYgW3F1ZXJ5IHJhbmdlT2ZTdHJpbmc6QCJzaG93aW5mbyJdLmxvY2F0
aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFtxdWVy
eSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiZzaG93aW5mbz0wIl07Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gQCJzaG93aW5mbz0w
IjsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHF1ZXJ5IHN0cmluZyBpZiBp
dCBpcyB2YWxpZC4gIFNvbWUgc2l0ZXMgYXBwYXJlbnRseSBmb3JnZXQgdG8gYWRkICI/IiBmb3Ig
dGhlIHF1ZXJ5IHN0cmluZywgaW4gdGhhdCBjYXNlLAotICAgICAgICAgICAgICAgICAgICAvLyB3
ZSB3aWxsIGRpc2NhcmQgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIHVybC4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gU2VlOiA8cmRhcjovL3Byb2JsZW0vMTE1MzUxNTU+IFtCaW5jb21wYXRdIFJlZ3Jl
c3Npb246IFNDMkNhc3RzIGFwcDogVmlkZW9zIGRvbid0IHBsYXkgaW4gU0MyQ2FzdHMKLSAgICAg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVtYmVkU3JjID0gcXVlcnkgPyBbc3JjVVJMUHJlZml4
IHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiL2VtYmVkLyVAPyVAIiwgdmlkZW9JRCwgcXVlcnld
IDogW3NyY1VSTFByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIi9lbWJlZC8lQCIsIHZp
ZGVvSURdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzaGFkb3cgc3Vi
dHJlZSBmb3IgdGhlIHBsdWdpbiBlbGVtZW50LCB0aGUgaWZyYW1lIHBsYXllciBpcyBpbmplY3Rl
ZCBpbiB0aGUgc2hhZG93IHRyZWUuCi0gICAgICAgICAgICAgICAgICAgICAgICB0b0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQoKmVsZW1lbnQpLmNyZWF0ZVNoYWRvd0lGcmFtZVN1YnRyZWUoZW1iZWRT
cmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgWW91VHVi
ZSBGbGFzaCBwbHVnLWluLiAgV2UgZG9uJ3QgaGF2ZSBGbGFzaC4gIENyZWF0ZSBhbiBpbnN0YW5j
ZSBvZiBBcHBsZSdzIHNwZWNpYWwgWW91VHViZSBwbHVnLWluIGluc3RlYWQKLSAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luUGFja2FnZSA9IFt3ZWJWaWV3IF9wbHVnaW5Gb3JNSU1FVHlwZTpAImFw
cGxpY2F0aW9uL3gtYXBwbGUtZmFrZS15b3V0dWJlLXBsdWdpbiJdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9
IHBsdWdpblZpZXcobV93ZWJGcmFtZS5nZXQoKSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5Q
YWNrYWdlLCBraXQocGFyYW1OYW1lcyksIGtpdChwYXJhbVZhbHVlcyksIGJhc2VVUkwsIGtpdChl
bGVtZW50KSwgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2lu
V2lkZ2V0SU9TKHZpZXcpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIEFTU0VSVCh2aWV3KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231009</attachid>
            <date>2014-05-07 12:03:05 -0700</date>
            <delta_ts>2014-05-07 12:51:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132568-20140507120244.patch</filename>
            <type>text/plain</type>
            <size>50692</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE0LTA1LTA2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVT
U0lPTjogV0syIFlvdVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBNb3ZlIHRo
ZSBjdXN0b20gWW91VHViZSBsb2FkZXIgY29kZSBvdXQgb2YgdGhlIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50IGludG8gYQorICAgICAgICBQbHVnaW5SZXBsYWNlbWVudC1iYXNlZCBjbGFzcy4KKworICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9QbHVnaW5SZXBsYWNlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzVVJMKTogTmV3IHByZWRpY2F0ZSBzbyB3
ZSBjYW4gcmVzdHJpY3QKKyAgICAgICAgdXNlIG9mIGEgcGx1Z2luIHRvIGEgcGFydGljdWxhciBj
YXRlZ29yeSBvZiBVUkxzLgorICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50KTogVXBkYXRlZCBmb3IgbmV3IHJlZ2lzdHJhciBzaWduYXR1cmUuCisgICAgICAgICog
TW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6cGFyZW50RWxlbWVudCk6Cisg
ICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3Rl
clBsdWdpblJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBs
YWNlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudDo6c3VwcG9ydHNNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpZb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpr
aXQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50OjpZb3VUdWJl
UGx1Z2luUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxh
Y2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0
Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6aW5z
dGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVlvdVR1YmVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6WW91VHViZVBsdWdpblJlcGxhY2VtZW50Ojp5b3VUdWJlVVJMKToKKyAgICAgICAg
KiBXZWJDb3JlLmV4cC5pbjogQWRkIG5ldyBleHBvcnQgZnJvbSBXZWJDb3JlLgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsdWdpblJlcGxhY2VtZW50Rm9y
VHlwZSk6IFVwZGF0ZSB0byBhbHNvIGNoZWNrIHRoYXQgdGhlIFVSTCBpcyBzdXBwb3J0ZWQKKyAg
ICAgICAgYnkgdGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyZWRQbHVnaW5S
ZXBsYWNlbWVudHMpOiBBZGQgbmV3IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCB0byByZWdpc3Ry
eS4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKTog
UmVtb3ZlIGN1c3RvbSBZb3VUdWJlIGNvZGUKKyAgICAgICAgbm93IHRoYXQgdGhpcyBsb2dpYyBp
cyBoYW5kbGVkIGluIHRoZSBwbHVnaW4gcmVwbGFjZW1lbnQgY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0cmVlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OllvdVR1YmVFbWJlZFNoYWRvd0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6c2hh
ZG93UHNldWRvSWQpOiBVc2UgY29ycmVjdCBwc2V1ZG9JRCBmb3IgdGhlCisgICAgICAgIHBsdWdp
biByZXBsYWNlbWVudCBhcmNoaXRlY3R1cmUuCisgICAgICAgICogaHRtbC9zaGFkb3cvWW91VHVi
ZUVtYmVkU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNV
UkxFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TVVJMRXh0cmFzLm1t
OgorICAgICAgICAoV2ViQ29yZTo6dW5lc2NhcGVkUXVlcnlWYWx1ZSk6IE1vdmVkIGZyb20gV2Vi
S2l0L01pc2MvV2ViTlNVUkxFeHRyYXMuCisgICAgICAgIChXZWJDb3JlOjpxdWVyeUtleXNBbmRW
YWx1ZXMpOiBEaXR0by4KKwogMjAxNC0wNS0wNiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgQ2xlYW4gdXAgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwYWludGluZyBm
b2N1cyByaW5ncyBhbmQgYWRkaW5nIFBERiBhbm5vdGF0aW9ucwpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDE2ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTY4LDcgKzI1NjgsNiBAQCBfX1pON1dlYkNvcmUyMWFwcGxp
Y2F0aW9uSXNGYWNlYm9va0V2CiBfX1pON1dlYkNvcmUyMW5leHRQYXJhZ3JhcGhQb3NpdGlvbkVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRWkKIF9fWk43V2ViQ29yZTIxc2V0U3Ryb2tlQW5kRmlsbENv
bG9yRVA5Q0dDb250ZXh0UDdDR0NvbG9yCiBfX1pON1dlYkNvcmUyMXdvcmRSYW5nZUZyb21Qb3Np
dGlvbkVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQotX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50MjVjcmVhdGVTaGFkb3dJRnJhbWVTdWJ0cmVlRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMjJzdGFydE9mRWRpdGFibGVDb250ZW50RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25F
CiBfX1pON1dlYkNvcmUyM2FwcGxpY2F0aW9uSXNNb2JpbGVNYWlsRXYKIF9fWk43V2ViQ29yZTIz
YXRCb3VuZGFyeU9mR3JhbnVsYXJpdHlFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18xNVRleHRH
cmFudWxhcml0eUVOU18xOFNlbGVjdGlvbkRpcmVjdGlvbkUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGx1Z2lucy9QbHVnaW5SZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9QbHVnaW5SZXBsYWNlbWVudC5oCShyZXZpc2lvbiAx
Njg0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2luUmVwbGFjZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBjbGFzcyBIVE1MUGx1Z0luRWxl
bWVudDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFNo
YWRvd1Jvb3Q7CitjbGFzcyBVUkw7CiAKIGNsYXNzIFBsdWdpblJlcGxhY2VtZW50IDogcHVibGlj
IFJlZkNvdW50ZWQ8UGx1Z2luUmVwbGFjZW1lbnQ+IHsKIHB1YmxpYzoKQEAgLTU4LDEzICs1OSwx
NSBAQCBwcm90ZWN0ZWQ6CiB0eXBlZGVmIFBhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+ICgq
Q3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQpKEhUTUxQbHVnSW5FbGVtZW50JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7
CiB0eXBlZGVmIGJvb2wgKCpQbHVnaW5SZXBsYWNlbWVudFN1cHBvcnRzVHlwZSkoY29uc3QgU3Ry
aW5nJik7CiB0eXBlZGVmIGJvb2wgKCpQbHVnaW5SZXBsYWNlbWVudFN1cHBvcnRzRmlsZUV4dGVu
c2lvbikoY29uc3QgU3RyaW5nJik7Ci0KK3R5cGVkZWYgYm9vbCAoKlBsdWdpblJlcGxhY2VtZW50
U3VwcG9ydHNVUkwpKGNvbnN0IFVSTCYpOworICAgIAogY2xhc3MgUmVwbGFjZW1lbnRQbHVnaW4g
ewogcHVibGljOgotICAgIFJlcGxhY2VtZW50UGx1Z2luKENyZWF0ZVBsdWdpblJlcGxhY2VtZW50
IGNvbnN0cnVjdG9yLCBQbHVnaW5SZXBsYWNlbWVudFN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUs
IFBsdWdpblJlcGxhY2VtZW50U3VwcG9ydHNGaWxlRXh0ZW5zaW9uIHN1cHBvcnRzRmlsZUV4dGVu
c2lvbikKKyAgICBSZXBsYWNlbWVudFBsdWdpbihDcmVhdGVQbHVnaW5SZXBsYWNlbWVudCBjb25z
dHJ1Y3RvciwgUGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlLCBQbHVn
aW5SZXBsYWNlbWVudFN1cHBvcnRzRmlsZUV4dGVuc2lvbiBzdXBwb3J0c0ZpbGVFeHRlbnNpb24s
IFBsdWdpblJlcGxhY2VtZW50U3VwcG9ydHNVUkwgc3VwcG9ydHNVUkwpCiAgICAgICAgIDogbV9j
b25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikKICAgICAgICAgLCBtX3N1cHBvcnRzVHlwZShzdXBwb3J0
c1R5cGUpCiAgICAgICAgICwgbV9zdXBwb3J0c0ZpbGVFeHRlbnNpb24oc3VwcG9ydHNGaWxlRXh0
ZW5zaW9uKQorICAgICAgICAsIG1fc3VwcG9ydHNVUkwoc3VwcG9ydHNVUkwpCiAgICAgewogICAg
IH0KIApAQCAtNzIsMTcgKzc1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2NvbnN0cnVjdG9y
KG90aGVyLm1fY29uc3RydWN0b3IpCiAgICAgICAgICwgbV9zdXBwb3J0c1R5cGUob3RoZXIubV9z
dXBwb3J0c1R5cGUpCiAgICAgICAgICwgbV9zdXBwb3J0c0ZpbGVFeHRlbnNpb24ob3RoZXIubV9z
dXBwb3J0c0ZpbGVFeHRlbnNpb24pCisgICAgICAgICwgbV9zdXBwb3J0c1VSTChvdGhlci5tX3N1
cHBvcnRzVVJMKQogICAgIHsKICAgICB9CiAKICAgICBQYXNzUmVmUHRyPFBsdWdpblJlcGxhY2Vt
ZW50PiBjcmVhdGUoSFRNTFBsdWdJbkVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RydWN0b3IoZWxlbWVudCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMp
OyB9CiAgICAgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Qg
eyByZXR1cm4gbV9zdXBwb3J0c1R5cGUobWltZVR5cGUpOyB9CiAgICAgYm9vbCBzdXBwb3J0c0Zp
bGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0IHsgcmV0dXJuIG1fc3Vw
cG9ydHNGaWxlRXh0ZW5zaW9uKGV4dGVuc2lvbik7IH0KLQorICAgIGJvb2wgc3VwcG9ydHNVUkwo
Y29uc3QgVVJMJiB1cmwpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNVUkwodXJsKTsgfQorICAg
IAogcHJpdmF0ZToKICAgICBDcmVhdGVQbHVnaW5SZXBsYWNlbWVudCBtX2NvbnN0cnVjdG9yOwog
ICAgIFBsdWdpblJlcGxhY2VtZW50U3VwcG9ydHNUeXBlIG1fc3VwcG9ydHNUeXBlOwogICAgIFBs
dWdpblJlcGxhY2VtZW50U3VwcG9ydHNGaWxlRXh0ZW5zaW9uIG1fc3VwcG9ydHNGaWxlRXh0ZW5z
aW9uOworICAgIFBsdWdpblJlcGxhY2VtZW50U3VwcG9ydHNVUkwgbV9zdXBwb3J0c1VSTDsKIH07
CiAKIHR5cGVkZWYgdm9pZCAoKlBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyKShjb25zdCBSZXBs
YWNlbWVudFBsdWdpbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgJKHJldmlzaW9uIDE2
ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KFBsdWdpblJlcGxhY2VtZW50
UmVnaXN0cmFyKTsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmlu
ZyYpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcm
KTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1VSTChjb25zdCBVUkwmKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+IGNyZWF0
ZShIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIH5RdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMTY4
NDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBTdHJp
bmcgcXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQKIAogdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVnaW5SZXBsYWNlbWVudFJlZ2lz
dHJhciByZWdpc3RyYXIpCiB7Ci0gICAgcmVnaXN0cmFyKFJlcGxhY2VtZW50UGx1Z2luKGNyZWF0
ZSwgc3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKSk7CisgICAgcmVnaXN0
cmFyKFJlcGxhY2VtZW50UGx1Z2luKGNyZWF0ZSwgc3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNG
aWxlRXh0ZW5zaW9uLCBzdXBwb3J0c1VSTCkpOwogfQogCiBQYXNzUmVmUHRyPFBsdWdpblJlcGxh
Y2VtZW50PiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRlKEhUTUxQbHVnSW5FbGVt
ZW50JiBwbHVnaW4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKKworI2luY2x1ZGUgIkhU
TUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJZb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgWW91VHViZVBsdWdpblJlcGxhY2VtZW50OjpyZWdp
c3RlclBsdWdpblJlcGxhY2VtZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJh
cikKK3sKKyAgICByZWdpc3RyYXIoUmVwbGFjZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01p
bWVUeXBlLCBzdXBwb3J0c0ZpbGVFeHRlbnNpb24sIHN1cHBvcnRzVVJMKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6Y3JlYXRl
KEhUTUxQbHVnSW5FbGVtZW50JiBwbHVnaW4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQocGx1Z2luLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcykpOworfQorCitib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9y
dHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikKKyAg
ICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi9mdXR1cmVz
cGxhc2giKTsKK30KKworYm9vbCBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmls
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoZXh0ZW5zaW9uLCAic3BsIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5z
aW9uLCAic3dmIik7Cit9CisKK1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6WW91VHViZVBsdWdp
blJlcGxhY2VtZW50KEhUTUxQbHVnSW5FbGVtZW50JiBwbHVnaW4sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCisgICAg
OiBtX3BhcmVudEVsZW1lbnQoJnBsdWdpbikKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXpl
KCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtTmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXR0cmlidXRlcy5hZGQocGFyYW1OYW1l
c1tpXSwgcGFyYW1WYWx1ZXNbaV0pOworfQorCitSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gWW91
VHViZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVs
ZW1lbnQmIHBsdWdpbiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCit7CisgICAgQVNTRVJU
X1VOVVNFRChwbHVnaW4sIG1fcGFyZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKKworICAgIGlmICgh
bV92aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIHJldHVy
biBtX3ZpZGVvRWxlbWVudC0+Y3JlYXRlRWxlbWVudFJlbmRlcmVyKHN0ZDo6bW92ZShzdHlsZSkp
OworfQorCitib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50
KFNoYWRvd1Jvb3QqIHJvb3QpCit7CisgICAgbV92aWRlb0VsZW1lbnQgPSBZb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50OjpjcmVhdGUobV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpKTsKKworICAg
IHJvb3QtPmFwcGVuZENoaWxkKG1fdmlkZW9FbGVtZW50LmdldCgpKTsKKworICAgIFJlZlB0cjxI
VE1MSUZyYW1lRWxlbWVudD4gaWZyYW1lRWxlbWVudCA9IEhUTUxJRnJhbWVFbGVtZW50OjpjcmVh
dGUoSFRNTE5hbWVzOjppZnJhbWVUYWcsIG1fcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKSk7Cisg
ICAgaWYgKG1fYXR0cmlidXRlcy5jb250YWlucygid2lkdGgiKSkKKyAgICAgICAgaWZyYW1lRWxl
bWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6d2lkdGhBdHRyLCBBdG9taWNTdHJpbmcoIjEw
MCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgCisgICAgY29u
c3QgYXV0byYgaGVpZ2h0VmFsdWUgPSBtX2F0dHJpYnV0ZXMuZmluZCgiaGVpZ2h0Iik7CisgICAg
aWYgKGhlaWdodFZhbHVlICE9IG1fYXR0cmlidXRlcy5lbmQoKSkgeworICAgICAgICBpZnJhbWVF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIEF0b21pY1N0cmluZygi
bWF4LWhlaWdodDogMTAwJSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
KyAgICAgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aGVpZ2h0QXR0
ciwgaGVpZ2h0VmFsdWUtPnZhbHVlKTsKKyAgICB9CisKKyAgICBpZnJhbWVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyLCB5b3VUdWJlVVJMKG1fYXR0cmlidXRlcy5nZXQo
InNyYyIpKSk7CisgICAgaWZyYW1lRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6ZnJh
bWVib3JkZXJBdHRyLCBBdG9taWNTdHJpbmcoIjAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CisgICAgCisgICAgLy8gRGlzYWJsZSBmcmFtZSBmbGF0dGVuaW5nIGZvciB0
aGlzIGlmcmFtZS4KKyAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpz
Y3JvbGxpbmdBdHRyLCBBdG9taWNTdHJpbmcoIm5vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOworICAgIG1fdmlkZW9FbGVtZW50LT5hcHBlbmRDaGlsZChpZnJhbWVFbGVt
ZW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorc3RhdGljIGlubGluZSBVUkwgY3Jl
YXRlWW91VHViZVVSTChjb25zdCBTdHJpbmcmIHZpZGVvSUQsIGNvbnN0IFN0cmluZyYgdGltZUlE
KQoreworICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSB5b3V0dWJlOiBVUkwsIHdoaWNoIGlz
IGFuIGludGVybmFsIGZvcm1hdCB0aGF0IGlzIHBhc3NlZCB0byBZb3VUdWJlLmFwcC4KKyAgICAv
LyBJZiB0aGUgZm9ybWF0IG9mIHRoZXNlIGludGVybmFsIGxpbmtzIGlzIGNoYW5nZWQgYmVsb3cs
IHRoZW4gdGhlIGFwcCBwcm9iYWJseSBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuCisgICAg
QVNTRVJUKCF2aWRlb0lELmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHZpZGVvSUQgIT0gIi8iKTsK
KyAgICAKKyAgICBVUkwgcmVzdWx0KFVSTCgpLCAieW91dHViZToiICsgdmlkZW9JRCk7CisgICAg
aWYgKCF0aW1lSUQuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHQuc2V0UXVlcnkoInQ9IiArIHRp
bWVJRCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRpYyBZb3VUdWJl
UGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHVlTWFwIHF1ZXJ5S2V5c0FuZFZhbHVlcyhjb25zdCBT
dHJpbmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6S2V5
VmFsdWVNYXAgcXVlcnlEaWN0aW9uYXJ5OworICAgIAorICAgIHNpemVfdCBxdWVyeUxlbmd0aCA9
IHF1ZXJ5U3RyaW5nLmxlbmd0aCgpOworICAgIGlmICghcXVlcnlMZW5ndGgpCisgICAgICAgIHJl
dHVybiBxdWVyeURpY3Rpb25hcnk7CisgICAgCisgICAgc2l6ZV90IGVxdWFsU2VhcmNoTG9jYXRp
b24gPSAwOworICAgIHNpemVfdCBlcXVhbFNlYXJjaExlbmd0aCA9IHF1ZXJ5TGVuZ3RoOworICAg
IAorICAgIHdoaWxlIChlcXVhbFNlYXJjaExvY2F0aW9uIDwgcXVlcnlMZW5ndGggLSAxICYmIGVx
dWFsU2VhcmNoTGVuZ3RoKSB7CisgICAgICAgIAorICAgICAgICAvLyBTZWFyY2ggZm9yICI9Ii4K
KyAgICAgICAgc2l6ZV90IGVxdWFsTG9jYXRpb24gPSBxdWVyeVN0cmluZy5maW5kKCI9IiwgZXF1
YWxTZWFyY2hMb2NhdGlvbik7CisgICAgICAgIGlmIChlcXVhbExvY2F0aW9uID09IG5vdEZvdW5k
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBpbmRleEFm
dGVyRXF1YWwgPSBlcXVhbExvY2F0aW9uICsgMTsKKyAgICAgICAgaWYgKGluZGV4QWZ0ZXJFcXVh
bCA+IHF1ZXJ5TGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgLy8gR2V0IHRoZSBrZXkgYmVmb3JlIHRoZSAiPSIuCisgICAgICAgIHVuc2lnbmVkIGtleUxv
Y2F0aW9uID0gZXF1YWxTZWFyY2hMb2NhdGlvbjsKKyAgICAgICAgdW5zaWduZWQga2V5TGVuZ3Ro
ID0gZXF1YWxMb2NhdGlvbiAtIGVxdWFsU2VhcmNoTG9jYXRpb247CisgICAgICAgIAorICAgICAg
ICAvLyBTZWFjaCBmb3IgdGhlIGFtcGVyc2FuZC4KKyAgICAgICAgc2l6ZV90IGFtcGVyc2FuZExv
Y2F0aW9uID0gcXVlcnlTdHJpbmcuZmluZCgiJiIsIGluZGV4QWZ0ZXJFcXVhbCk7CisgICAgICAg
IAorICAgICAgICAvLyBHZXQgdGhlIHZhbHVlIGFmdGVyIHRoZSAiPSIsIGJlZm9yZSB0aGUgYW1w
ZXJzYW5kLgorICAgICAgICBzaXplX3QgdmFsdWVMb2NhdGlvbiA9IGluZGV4QWZ0ZXJFcXVhbDsK
KyAgICAgICAgc2l6ZV90IHZhbHVlTGVuZ3RoOworICAgICAgICBpZiAoYW1wZXJzYW5kTG9jYXRp
b24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICB2YWx1ZUxlbmd0aCA9IGFtcGVyc2FuZExvY2F0
aW9uIC0gaW5kZXhBZnRlckVxdWFsOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZUxl
bmd0aCA9IHF1ZXJ5TGVuZ3RoIC0gaW5kZXhBZnRlckVxdWFsOworICAgICAgICAKKyAgICAgICAg
Ly8gU2F2ZSB0aGUga2V5IGFuZCB0aGUgdmFsdWUuCisgICAgICAgIGlmIChrZXlMZW5ndGggJiYg
dmFsdWVMZW5ndGgpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5ID0gcXVlcnlTdHJp
bmcuc3Vic3RyaW5nKGtleUxvY2F0aW9uLCBrZXlMZW5ndGgpLmxvd2VyKCk7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gcXVlcnlTdHJpbmcuc3Vic3RyaW5nKHZhbHVlTG9jYXRp
b24sIHZhbHVlTGVuZ3RoKS5yZXBsYWNlKCcrJywgJyAnKTsKKyAgICAgICAgICAgIGlmICgha2V5
LmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHF1ZXJ5RGlj
dGlvbmFyeS5hZGQoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEF0IHRoZSBlbmQuCisgICAgICAgIGlmIChhbXBlcnNhbmRMb2NhdGlvbiA9PSBub3RGb3VuZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gQ29udGludWUgc2VhcmNo
aW5nIGFmdGVyIHRoZSBhbXBlcnNhbmQuCisgICAgICAgIHNpemVfdCBpbmRleEFmdGVyQW1wZXJz
YW5kID0gYW1wZXJzYW5kTG9jYXRpb24gKyAxOworICAgICAgICBlcXVhbFNlYXJjaExvY2F0aW9u
ID0gaW5kZXhBZnRlckFtcGVyc2FuZDsKKyAgICAgICAgZXF1YWxTZWFyY2hMZW5ndGggPSBxdWVy
eUxlbmd0aCAtIGluZGV4QWZ0ZXJBbXBlcnNhbmQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBx
dWVyeURpY3Rpb25hcnk7Cit9CisgICAgCitzdGF0aWMgYm9vbCBoYXNDYXNlSW5zZW5zaXRpdmVQ
cmVmaXgoY29uc3QgU3RyaW5nJiBpbnB1dCwgY29uc3QgU3RyaW5nJiBwcmVmaXgpCit7CisgICAg
cmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgocHJlZml4LCB0cnVlKTsKK30KKyAgICAKK3N0YXRpYyBi
b29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBjb25zdCBTdHJpbmcmIGhv
c3ROYW1lID0gdXJsLmhvc3QoKS5sb3dlcigpOworICAgIAorICAgIHJldHVybiBob3N0TmFtZSA9
PSAibS55b3V0dWJlLmNvbSIKKyAgICAgICAgfHwgaG9zdE5hbWUgPT0gInlvdXR1LmJlIgorICAg
ICAgICB8fCBob3N0TmFtZSA9PSAid3d3LnlvdXR1YmUuY29tIgorICAgICAgICB8fCBob3N0TmFt
ZSA9PSAieW91dHViZS5jb20iOworfQorICAgIAorc3RhdGljIFVSTCBwcm9jZXNzQW5kQ3JlYXRl
WW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC5wcm90b2NvbElzKCJo
dHRwIikgJiYgIXVybC5wcm90b2NvbElzKCJodHRwcyIpKQorICAgICAgICByZXR1cm4gVVJMKCk7
CisgICAgCisgICAgLy8gQmFpbCBvdXQgZWFybHkgaWYgd2UgYXJlbid0IGV2ZW4gb24gd3d3Lnlv
dXR1YmUuY29tIG9yIHlvdXR1YmUuY29tLgorICAgIGlmICghaXNZb3VUdWJlVVJMKHVybCkpCisg
ICAgICAgIHJldHVybiBVUkwoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIGhvc3ROYW1lID0g
dXJsLmhvc3QoKS5sb3dlcigpOworICAgIAorICAgIGJvb2wgaXNZb3VUdWJlTW9iaWxlV2ViQXBw
VVJMID0gaG9zdE5hbWUgPT0gIm0ueW91dHViZS5jb20iOworICAgIGJvb2wgaXNZb3VUdWJlU2hv
cnRlbmVkVVJMID0gaG9zdE5hbWUgPT0gInlvdXR1LmJlIjsKKyAgICAKKyAgICAvLyBTaG9ydCBV
Ukwgb2YgdGhlIGZvcm06IGh0dHA6Ly95b3V0dS5iZS92MWQzMDFECisgICAgaWYgKGlzWW91VHVi
ZVNob3J0ZW5lZFVSTCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHZpZGVvSUQgPSB1cmwubGFz
dFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYgKHZpZGVvSUQuaXNFbXB0eSgpIHx8IHZpZGVv
SUQgPT0gIi8iKQorICAgICAgICAgICAgcmV0dXJuIFVSTCgpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgZW1wdHlTdHJpbmcoKSk7CisgICAgfQor
ICAgIAorICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICBTdHJpbmcgcXVlcnkgPSB1
cmwucXVlcnkoKTsKKyAgICBTdHJpbmcgZnJhZ21lbnQgPSB1cmwuZnJhZ21lbnRJZGVudGlmaWVy
KCk7CisgICAgCisgICAgLy8gT24gdGhlIFlvdVR1YmUgbW9iaWxlIHdlYiBhcHAsIHRoZSBwYXRo
IGFuZCBxdWVyeSBzdHJpbmcgYXJlIHB1dCBpbnRvIHRoZQorICAgIC8vIGZyYWdtZW50IHNvIHRo
YXQgb25lIHdlYiBwYWdlIGlzIG9ubHkgZXZlciBsb2FkZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0v
OTU1MDYzOT4pLgorICAgIGlmIChpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwpIHsKKyAgICAgICAg
c2l6ZV90IGxvY2F0aW9uID0gZnJhZ21lbnQuZmluZCgnPycpOworICAgICAgICBpZiAobG9jYXRp
b24gPT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHBhdGggPSBmcmFnbWVudDsKKyAgICAgICAg
ICAgIHF1ZXJ5ID0gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHBhdGggPSBmcmFnbWVudC5zdWJzdHJpbmcoMCwgbG9jYXRpb24pOworICAgICAgICAgICAgcXVl
cnkgPSBmcmFnbWVudC5zdWJzdHJpbmcobG9jYXRpb24gKyAxKTsKKyAgICAgICAgfQorICAgICAg
ICBmcmFnbWVudCA9IGVtcHR5U3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIGlmIChwYXRoLmxv
d2VyKCkgPT0gIi93YXRjaCIpIHsKKyAgICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIHF1ZXJ5RGljdCA9IHF1ZXJ5S2V5c0FuZFZhbHVlcyhxdWVy
eSk7CisgICAgICAgICAgICBTdHJpbmcgdmlkZW9JRDsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8m
IHZpZGVvVmFsdWUgPSBxdWVyeURpY3QuZmluZCgidiIpOworICAgICAgICAgICAgaWYgKHZpZGVv
VmFsdWUgIT0gcXVlcnlEaWN0LmVuZCgpKQorICAgICAgICAgICAgICAgIHZpZGVvSUQgPSB2aWRl
b1ZhbHVlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF2aWRlb0lELmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RGljdCA9IHF1
ZXJ5S2V5c0FuZFZhbHVlcyh1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyB0aW1lSUQ7CisgICAgICAgICAgICAgICAgY29u
c3QgYXV0byYgdGltZVZhbHVlID0gZnJhZ21lbnREaWN0LmZpbmQoInQiKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGltZVZhbHVlICE9IGZyYWdtZW50RGljdC5lbmQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgdGltZUlEID0gdGltZVZhbHVlLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0aW1lSUQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNYXkgYmUgYSBuZXct
c3R5bGUgbGluayAoc2VlIDxyZGFyOi8vcHJvYmxlbS83NzMzNjkyPikuCisgICAgICAgIGlmIChm
cmFnbWVudC5zdGFydHNXaXRoKCchJykpIHsKKyAgICAgICAgICAgIHF1ZXJ5ID0gZnJhZ21lbnQu
c3Vic3RyaW5nKDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXF1ZXJ5LmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHF1ZXJ5RGljdCA9IHF1ZXJ5S2V5
c0FuZFZhbHVlcyhxdWVyeSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZpZGVvSUQ7CisgICAg
ICAgICAgICAgICAgY29uc3QgYXV0byYgdmlkZW9WYWx1ZSA9IHF1ZXJ5RGljdC5maW5kKCJ2Iik7
CisgICAgICAgICAgICAgICAgaWYgKHZpZGVvVmFsdWUgIT0gcXVlcnlEaWN0LmVuZCgpKQorICAg
ICAgICAgICAgICAgICAgICB2aWRlb0lEID0gdmlkZW9WYWx1ZS0+dmFsdWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCF2aWRlb0lELmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgICAgICBTdHJpbmcgdGltZUlEOworICAgICAgICAgICAgICAgICAgICBjb25zdCBh
dXRvJiB0aW1lVmFsdWUgPSBxdWVyeURpY3QuZmluZCgidCIpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodGltZVZhbHVlICE9IHF1ZXJ5RGljdC5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVJRCA9IHRpbWVWYWx1ZS0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0aW1lSUQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoaGFzQ2FzZUluc2Vuc2l0aXZlUHJlZml4KHBhdGgsICIvdi8iKSB8fCBoYXNDYXNlSW5z
ZW5zaXRpdmVQcmVmaXgocGF0aCwgIi9lLyIpKSB7CisgICAgICAgIFN0cmluZyB2aWRlb0lEID0g
dXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBVUkxz
IGFyZSBmdW5ueSAtIHRoZXkgZG9uJ3QgaGF2ZSBhID8gZm9yIHRoZSBmaXJzdCBxdWVyeSBwYXJh
bWV0ZXIuCisgICAgICAgIC8vIFN0cmlwIGFsbCBjaGFyYWN0ZXJzIGFmdGVyIGFuZCBpbmNsdWRp
bmcgJyYnIHRvIHJlbW92ZSBleHRyYW5lb3VzIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIHZpZGVvIElE
LgorICAgICAgICBzaXplX3QgYW1wZXJzYW5kID0gdmlkZW9JRC5maW5kKCcmJyk7CisgICAgICAg
IGlmIChhbXBlcnNhbmQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICB2aWRlb0lEID0gdmlkZW9J
RC5zdWJzdHJpbmcoMCwgYW1wZXJzYW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmlkZW9J
RC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lE
LCBlbXB0eVN0cmluZygpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFVSTCgpOworfQorCitT
dHJpbmcgWW91VHViZVBsdWdpblJlcGxhY2VtZW50Ojp5b3VUdWJlVVJMKGNvbnN0IFN0cmluZyYg
c3JjU3RyaW5nKQoreworICAgIFVSTCBzcmNVUkwoVVJMKCksIHNyY1N0cmluZyk7CisgICAgVVJM
IHlvdVR1YmVVUkwgPSBwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVSTChzcmNVUkwpOworICAgIGlm
IChzcmNVUkwuaXNFbXB0eSgpIHx8IHlvdVR1YmVVUkwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gc3JjU3RyaW5nOworCisgICAgLy8gVHJhbnNmb3JtIHRoZSB5b3V0dWJlVVJMICh5b3V0dWJl
OlZpZGVvSUQpIHRvIGlmcmFtZSBlbWJlZCB1cmwgd2hpY2ggaGFzIHRoZSBmb3JtYXQ6IGh0dHA6
Ly93d3cueW91dHViZS5jb20vZW1iZWQvVmlkZW9JRAorICAgIGNvbnN0IFN0cmluZyYgc3JjUGF0
aCA9IHNyY1VSTC5wYXRoKCk7CisgICAgY29uc3QgU3RyaW5nJiB2aWRlb0lEID0geW91VHViZVVS
TC5zdHJpbmcoKS5zdWJzdHJpbmcoeW91VHViZVVSTC5wcm90b2NvbCgpLmxlbmd0aCgpICsgMSk7
CisgICAgc2l6ZV90IGxvY2F0aW9uT2ZWaWRlb0lESW5QYXRoID0gc3JjUGF0aC5maW5kKHZpZGVv
SUQpOworICAgIGlmIChsb2NhdGlvbk9mVmlkZW9JREluUGF0aCA9PSBub3RGb3VuZCkKKyAgICAg
ICAgcmV0dXJuIHNyY1N0cmluZzsKKyAgICAKKyAgICBBU1NFUlQobG9jYXRpb25PZlZpZGVvSURJ
blBhdGgpOworICAgIAorICAgIC8vIEZyb20gdGhlIG9yaWdpbmFsIFVSTCwgd2UgbmVlZCB0byBn
ZXQgdGhlIHBhcnQgYmVmb3JlIC9wYXRoL1ZpZGVvSWQuCisgICAgc2l6ZV90IGxvY2F0aW9uT2ZQ
YXRoQmVmb3JlVmlkZW9JRCA9IHNyY1N0cmluZy5maW5kKHNyY1BhdGguc3Vic3RyaW5nKDAsIGxv
Y2F0aW9uT2ZWaWRlb0lESW5QYXRoKSk7CisgICAgQVNTRVJUKGxvY2F0aW9uT2ZQYXRoQmVmb3Jl
VmlkZW9JRCAhPSBub3RGb3VuZCk7CisgICAgCisgICAgY29uc3QgU3RyaW5nJiBzcmNVUkxQcmVm
aXggPSBzcmNTdHJpbmcuc3Vic3RyaW5nKDAsIGxvY2F0aW9uT2ZQYXRoQmVmb3JlVmlkZW9JRCk7
CisgICAgU3RyaW5nIHF1ZXJ5ID0gc3JjVVJMLnF1ZXJ5KCk7CisKKyAgICAvLyBCeSBkZWZhdWx0
LCB0aGUgaWZyYW1lIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBsaWtlIHRoZSB2aWRlbyB0aXRs
ZSBhbmQgdXBsb2FkZXIgb24gdG9wIG9mIHRoZSB2aWRlby4gRG9uJ3QgZGlzcGxheQorICAgIC8v
IHRoZW0gaWYgdGhlIGVtYmVkaW5nIGh0bWwgZG9lc24ndCBzcGVjaWZ5IGl0LgorICAgIGlmICgh
cXVlcnkuaXNFbXB0eSgpICYmICFxdWVyeS5jb250YWlucygic2hvd2luZm8iKSkKKyAgICAgICAg
cXVlcnkuYXBwZW5kKCImc2hvd2luZm89MCIpOworICAgIGVsc2UKKyAgICAgICAgcXVlcnkgPSAi
c2hvd2luZm89MCI7CisgICAgCisgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQg
aXMgdmFsaWQuIFNvbWUgc2l0ZXMgYXBwYXJlbnRseSBmb3JnZXQgdG8gYWRkICI/IiBmb3IgdGhl
IHF1ZXJ5IHN0cmluZywgaW4gdGhhdCBjYXNlLAorICAgIC8vIHdlIHdpbGwgZGlzY2FyZCB0aGUg
cGFyYW1ldGVycyBpbiB0aGUgdXJsLgorICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTM1
MTU1PiBbQmluY29tcGF0XSBSZWdyZXNzaW9uOiBTQzJDYXN0cyBhcHA6IFZpZGVvcyBkb24ndCBw
bGF5IGluIFNDMkNhc3RzCisgICAgU3RyaW5nQnVpbGRlciBmaW5hbFVSTDsKKyAgICBmaW5hbFVS
TC5hcHBlbmQoc3JjVVJMUHJlZml4KTsKKyAgICBmaW5hbFVSTC5hcHBlbmRMaXRlcmFsKCIvZW1i
ZWQvIik7CisgICAgZmluYWxVUkwuYXBwZW5kKHZpZGVvSUQpOworICAgIGlmICghcXVlcnkuaXNF
bXB0eSgpKSB7CisgICAgICAgIGZpbmFsVVJMLmFwcGVuZExpdGVyYWwoIj8iKTsKKyAgICAgICAg
ZmluYWxVUkwuYXBwZW5kKHF1ZXJ5KTsKKyAgICB9CisgICAgcmV0dXJuIGZpbmFsVVJMLnRvU3Ry
aW5nKCk7Cit9CisgICAgCitib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNV
UkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGlzWW91VHViZVVSTCh1cmwpOworfQor
ICAgIAorfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVn
aW5SZXBsYWNlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1
Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgWW91VHViZVBsdWdpblJlcGxhY2VtZW50X2gKKyNkZWZp
bmUgWW91VHViZVBsdWdpblJlcGxhY2VtZW50X2gKKworI2luY2x1ZGUgIlBsdWdpblJlcGxhY2Vt
ZW50LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsK
K2NsYXNzIEhUTUxJRnJhbWVFbGVtZW50OworY2xhc3MgUmVuZGVyRWxlbWVudDsKK2NsYXNzIFJl
bmRlclN0eWxlOworY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFlvdVR1YmVFbWJlZFNoYWRvd0Vs
ZW1lbnQ7CisKK2NsYXNzIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudCA6IHB1YmxpYyBQbHVnaW5S
ZXBsYWNlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJQbHVnaW5SZXBs
YWNlbWVudChQbHVnaW5SZXBsYWNlbWVudFJlZ2lzdHJhcik7CisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zp
bGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNVUkwo
Y29uc3QgVVJMJik7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1l
bnQ+IGNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisgICAgdmlydHVh
bCBib29sIGluc3RhbGxSZXBsYWNlbWVudChTaGFkb3dSb290Kikgb3ZlcnJpZGU7CisgICAgCisg
ICAgU3RyaW5nIHlvdVR1YmVVUkwoY29uc3QgU3RyaW5nJiByYXdVUkwpOworICAgIAorICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gS2V5VmFsdWVNYXA7CisKK3ByaXZhdGU6Cisg
ICAgWW91VHViZVBsdWdpblJlcGxhY2VtZW50KEhUTUxQbHVnSW5FbGVtZW50JiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cyk7CisgICAgCisgICAgdmlydHVhbCBib29sIHdpbGxDcmVhdGVSZW5kZXJlcigpIG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50OyB9CisgICAgdmlydHVhbCBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKEhUTUxQbHVnSW5FbGVtZW50JiwgUGFzc1Jl
ZjxSZW5kZXJTdHlsZT4pIG92ZXJyaWRlOworICAgIAorICAgIEhUTUxQbHVnSW5FbGVtZW50KiBt
X3BhcmVudEVsZW1lbnQ7CisgICAgUmVmUHRyPFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ+IG1f
dmlkZW9FbGVtZW50OworICAgIEtleVZhbHVlTWFwIG1fYXR0cmlidXRlczsKK307CisKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjg0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzMDYsNiArMjMw
Niw4IEBACiAJCTdBNTQ4NTgwMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU0ODU3RTE0
RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oICovOyB9OwogCQk3QTU0ODgxNzE0
RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU0ODgxNTE0RTQzMkExMDA2QUUwNUEgLyogRE9N
UGF0Y2hTdXBwb3J0LmggKi87IH07CiAJCTdBNTQ4ODE4MTRFNDMyQTEwMDZBRTA1QSAvKiBET01Q
YXRjaFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E1NDg4MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi87
IH07CisJCTdBNTUxNUY1MTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNTUx
NUYzMTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCAqLzsgfTsK
KwkJN0E1NTE1RjYxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU1MTVG
NDE5MTgzMEEzMDA5Njg3RDIgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLzsgfTsK
IAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEOTBG
OUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJN0E2
NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovOyB9OwogCQk3QTc0RUNCQTEwMTgz
OUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5
RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwICovOyB9OwpAQCAtOTM1NSw2ICs5MzU3
LDggQEAKIAkJN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySGlzdG9yeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU0ODgxNTE0RTQzMkExMDA2QUUwNUEgLyogRE9N
UGF0Y2hTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBhdGNo
U3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU0ODgxNjE0RTQzMkEx
MDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERPTVBhdGNoU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdBNTUxNUYzMTkxODMwQTMwMDk2ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWW91VHViZVBsdWdpblJlcGxh
Y2VtZW50Lmg7IHBhdGggPSBwbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTU1MTVGNDE5MTgzMEEzMDA5Njg3RDIgLyogWW91
VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5jcHA7IHBhdGggPSBwbHVnaW5zL1lvdVR1
YmVQbHVnaW5SZXBsYWNlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
Njc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwTG9hZERlZmVycmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5
IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0E3MjU2QjkxNUVCOUY1QjAwNzMyM0E3IC8qIEluc3BlY3Rvck92ZXJsYXlQYWdlLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQzMTcsNiArMTQzMjEsOCBAQAogCQkwNzJB
RTFERTE4M0MwNTEzMDAwQTU5ODggLyogcGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0E1NTE1RjMxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1
YmVQbHVnaW5SZXBsYWNlbWVudC5oICovLAorCQkJCTdBNTUxNUY0MTkxODMwQTMwMDk2ODdEMiAv
KiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwICovLAogCQkJCTA3MkFFMURGMTgzQzA3NDEw
MDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oICovLAogCQkJCTA3MkFFMUUwMTgzQzA3NDEw
MDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSAqLywKIAkJCQkwNzJBRTFF
MTE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3NzICovLApA
QCAtMjMxNTcsNiArMjMxNjMsNyBAQAogCQkJCTA3OUQwODY4MTYyRjIwRTgwMERCODY1OCAvKiBD
YXB0aW9uVXNlclByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzlEMDg2QjE2MkYy
MUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5Q0MwQjRGMThCRTk4NDkwMDZDRUJDQyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0E1NTE1RjUxOTE4MzBBMzAwOTY4N0QyIC8qIFlvdVR1
YmVQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAy
NzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RERDU3MTUx
OEI1N0E4MjAwQTk0RkNCIC8qIENETVNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkw
NENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLApA
QCAtMjY4NTgsNiArMjY4NjUsNyBAQAogCQkJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBD
b2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNGMzMyNDBGMkI5NzE1MDA0QjY3OTUgLyog
Q29sb3JDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDOTExRDIwRTQ3MDA0QzIwMUMg
LyogQ29sb3JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdBNTUxNUY2MTkxODMwQTMwMDk2
ODdEMiAvKiBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5NjIwRDAwQkYyMjAwNzFCNzgyIC8qIENvbG9yRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyNzUzNTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5t
bSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDE0IEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTcsNiArNTcs
NyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQuaCIKKyNpbmNsdWRlICJZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMjgsNiArMzI5LDcgQEAgc3RhdGljIFZlY3Rv
cjxSZXBsYWNlbWVudFBsdWdpbio+JiByZWdpcwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyUGx1Z2luUmVwbGFjZW1lbnQocmVn
aXN0cmFyKTsKKyAgICBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnJlZ2lzdGVyUGx1Z2luUmVw
bGFjZW1lbnQocmVnaXN0cmFyKTsKICNlbmRpZgogICAgIAogICAgIHJldHVybiByZWdpc3RlcmVk
UmVwbGFjZW1lbnRzOwpAQCAtMzU3LDkgKzM1OSwxMCBAQCBzdGF0aWMgUmVwbGFjZW1lbnRQbHVn
aW4qIHBsdWdpblJlcGxhY2VtCiAgICAgICAgIHR5cGUgPSBtaW1lVHlwZUZyb21EYXRhVVJMKHVy
bC5zdHJpbmcoKSk7CiAgICAgCiAgICAgaWYgKHR5cGUuaXNFbXB0eSgpICYmICFleHRlbnNpb24u
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50c1tpXS0+c3VwcG9ydHNG
aWxlRXh0ZW5zaW9uKGV4dGVuc2lvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2Vt
ZW50c1tpXTsKKyAgICAgICAgZm9yIChhdXRvKiByZXBsYWNlbWVudCA6IHJlcGxhY2VtZW50cykg
eworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5zdXBwb3J0c0ZpbGVFeHRlbnNpb24oZXh0
ZW5zaW9uKSAmJiByZXBsYWNlbWVudC0+c3VwcG9ydHNVUkwodXJsKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVwbGFjZW1lbnQ7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKHR5
cGUuaXNFbXB0eSgpKSB7CkBAIC0zNzEsOSArMzc0LDEwIEBAIHN0YXRpYyBSZXBsYWNlbWVudFBs
dWdpbiogcGx1Z2luUmVwbGFjZW0KICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcGxhY2VtZW50
cy5zaXplKCk7IGkrKykKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50c1tpXS0+c3VwcG9ydHNUeXBl
KHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50c1tpXTsKKyAgICBmb3IgKGF1
dG8qIHJlcGxhY2VtZW50IDogcmVwbGFjZW1lbnRzKSB7CisgICAgICAgIGlmIChyZXBsYWNlbWVu
dC0+c3VwcG9ydHNUeXBlKHR5cGUpICYmIHJlcGxhY2VtZW50LT5zdXBwb3J0c1VSTCh1cmwpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OworICAgIH0KIAogICAgIHJldHVybiBudWxs
cHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjg0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsNiBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgogCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiWW91VHViZUVtYmVkU2hhZG93
RWxlbWVudC5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKQEAgLTIyNiwxNCArMjIwLDYgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IEhUTUxQbHVnSW5JbWFnZQogICAgIGlmIChpc0ltYWdlVHlwZSgpKQogICAgICAgICByZXR1
cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVySW1hZ2U+KCp0aGlzLCBzdGQ6Om1vdmUoc3R5bGUpKTsK
IAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHRo
aXMtPnNoYWRvd1Jvb3QoKSkgewotICAgICAgICBOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9v
dC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoc2hhZG93Tm9kZSAmJiBzaGFkb3dOb2RlLT5p
c0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KCpzaGFkb3dOb2RlKS5zaGFkb3dQc2V1ZG9JZCgp
ID09ICItYXBwbGUteW91dHViZS1zaGFkb3ctaWZyYW1lIikKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBzdGQ6Om1vdmUoc3R5bGUpKTsK
LSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiBIVE1MUGx1Z0luRWxlbWVudDo6Y3JlYXRlRWxl
bWVudFJlbmRlcmVyKHN0ZDo6bW92ZShzdHlsZSkpOwogfQogCkBAIC00MTEsMzUgKzM5Nyw2IEBA
IGJvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cGFydE9mU25hcHMKICAgICByZXR1cm4gbm9k
ZSAmJiBzbmFwc2hvdExhYmVsICYmIChub2RlID09IHNuYXBzaG90TGFiZWwuZ2V0KCkgfHwgbm9k
ZS0+aXNEZXNjZW5kYW50T2Yoc25hcHNob3RMYWJlbC5nZXQoKSkpOwogfQogCi0jaWYgUExBVEZP
Uk0oSU9TKQotdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVTaGFkb3dJRnJhbWVT
dWJ0cmVlKGNvbnN0IFN0cmluZyYgc3JjKQotewotICAgIGlmICh0aGlzLT5zaGFkb3dSb290KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzcmMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8WW91VHViZUVtYmVkU2hhZG93RWxlbWVudD4gc2hhZG93RWxlbWVu
dCA9IFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICBT
aGFkb3dSb290JiByb290ID0gdGhpcy0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwotICAg
IHJvb3QuYXBwZW5kQ2hpbGQoc2hhZG93RWxlbWVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0K
LSAgICBSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IGlmcmFtZUVsZW1lbnQgPSBIVE1MSUZyYW1l
RWxlbWVudDo6Y3JlYXRlKGlmcmFtZVRhZywgZG9jdW1lbnQoKSk7Ci0gICAgaWYgKGhhc0F0dHJp
YnV0ZSh3aWR0aEF0dHIpKQotICAgICAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lk
dGhBdHRyLCBBdG9taWNTdHJpbmcoIjEwMCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkgewotICAgICAgICBp
ZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBBdG9taWNTdHJpbmcoIm1heC1o
ZWlnaHQ6IDEwMCUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAg
ICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBnZXRBdHRyaWJ1dGUo
aGVpZ2h0QXR0cikpOwotICAgIH0KLSAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3Jj
QXR0ciwgc3JjKTsKLSAgICBpZnJhbWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoZnJhbWVib3JkZXJB
dHRyLCBBdG9taWNTdHJpbmcoIjAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7Ci0KLSAgICAvLyBEaXNhYmxlIGZyYW1lIGZsYXR0ZW5pbmcgZm9yIHRoaXMgaWZyYW1lLgot
ICAgIGlmcmFtZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzY3JvbGxpbmdBdHRyLCBBdG9taWNTdHJp
bmcoIm5vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHNoYWRv
d0VsZW1lbnQtPmFwcGVuZENoaWxkKGlmcmFtZUVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04p
OwotfQotI2VuZGlmCi0KIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVtb3ZlU25hcHNo
b3RUaW1lckZpcmVkKFRpbWVyPEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+JikKIHsKICAgICBtX3Nu
YXBzaG90SW1hZ2UgPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDE2ODQwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCAr
NjcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc1dpZGdldFVwZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmVlZHNXaWRnZXRVcGRhdGU7IH0KICAgICB2b2lkIHNldE5lZWRzV2lkZ2V0VXBkYXRl
KGJvb2wgbmVlZHNXaWRnZXRVcGRhdGUpIHsgbV9uZWVkc1dpZGdldFVwZGF0ZSA9IG5lZWRzV2lk
Z2V0VXBkYXRlOyB9CiAgICAgCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIHZvaWQgY3JlYXRlU2hh
ZG93SUZyYW1lU3VidHJlZShjb25zdCBTdHJpbmcmIHNyYyk7Ci0jZW5kaWYKLQogICAgIHZvaWQg
dXNlckRpZENsaWNrU25hcHNob3QoUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiwgYm9vbCBmb3J3YXJk
RXZlbnQpOwogICAgIHZvaWQgY2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgIEltYWdlKiBzbmFw
c2hvdEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdEltYWdlLmdldCgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Zb3VUdWJlRW1iZWRT
aGFkb3dFbGVtZW50LmNwcAkocmV2aXNpb24gMTY4NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJZb3VUdWJlRW1i
ZWRTaGFkb3dFbGVtZW50LmgiCiAKLSNpZiBQTEFURk9STShJT1MpCi0KICNpbmNsdWRlICJIVE1M
RW1iZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDYgKzQwLDEyIEBA
IFBhc3NSZWZQdHI8WW91VHViZUVtYmVkU2hhZG93RWxlbWVudD4gWW8KIFlvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQ6OllvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
KQogICAgIDogSFRNTERpdkVsZW1lbnQoSFRNTE5hbWVzOjpkaXZUYWcsIGRvY3VtZW50KQogewor
ICAgIHNldFBzZXVkbyhzaGFkb3dQc2V1ZG9JZCgpKTsKKworICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1ZUlubGluZUJsb2NrKTsKKyAgICBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUp
OworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWUx
MDApOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIENTU1Zh
bHVlMTAwKTsKIH0KIAogSFRNTFBsdWdJbkltYWdlRWxlbWVudCogWW91VHViZUVtYmVkU2hhZG93
RWxlbWVudDo6cGx1Z2luRWxlbWVudCgpIGNvbnN0CkBAIC01MywxMCArNTcsOCBAQCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50KiBZb3VUdWJlRW1iZWRTaGFkCiAKIGNvbnN0IEF0b21pY1N0cmluZyYg
WW91VHViZUVtYmVkU2hhZG93RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewotICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHBzZXVkb0lkLCAo
Ii1hcHBsZS15b3V0dWJlLXNoYWRvdy1pZnJhbWUiKSk7CisgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1wbHVnaW4tcmVw
bGFjZW1lbnQiKSk7CiAgICAgcmV0dXJuIHBzZXVkb0lkOwogfQogCiB9Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1lvdVR1YmVFbWJlZFNo
YWRvd0VsZW1lbnQuaAkocmV2aXNpb24gMTY4NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvWW91VHViZUVtYmVkU2hhZG93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaWZuZGVmIFlvdVR1YmVFbWJlZFNoYWRvd0VsZW1lbnRfaAogI2RlZmluZSBZ
b3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50X2gKIAotI2lmIFBMQVRGT1JNKElPUykKLQogI2luY2x1
ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNDgs
NiArNDYsNCBAQCBwcml2YXRlOgogCiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KICNl
bmRpZiAvLyBZb3VUdWJlRW1iZWRTaGFkb3dFbGVtZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2ODQwNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTA1LTA2ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMsIGlPU10gUkVHUkVTU0lPTjogV0syIFlv
dVR1YmUgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMyNTY4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ2NDM0ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRy
YXMuaDoKKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0cmFzLm1tOiBNb3ZlIHVzZWZ1bCBjb2Rl
IHRvIFdlYkNvcmUgc28gdGhhdCBpdCBjYW4KKyAgICAgICAgYmUgc2hhcmVkIHdpdGggV0syLgor
ICAgICAgICAoLVtOU1VSTCBfd2Via2l0X3lvdVR1YmVVUkxdKToKKyAgICAgICAgKC1bTlNTdHJp
bmcgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdKToKKyAgICAgICAgKGNyZWF0ZVlvdVR1YmVV
UkwpOiBEZWxldGVkLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Via2l0X3VuZXNjYXBlZFF1ZXJ5
VmFsdWVdKTogRGVsZXRlZC4KKwogMjAxNC0wNS0wNiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW01hY10gQWxsb3cgZm9jdXMgcmluZ3MgdG8gcmVkcmF3IHRoZW1z
ZWx2ZXMgaWYgbmVjZXNzYXJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJM
RXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4
dHJhcy5oCShyZXZpc2lvbiAxNjg0MDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYk5T
VVJMRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDYgQEAgQGludGVyZmFjZSBO
U1VSTCAoV2ViTlNVUkxFeHRyYXMpCiAtIChOU1VSTCAqKV93ZWJraXRfVVJMRnJvbVVSTE9yU2No
ZW1lbGVzc0ZpbGVVUkw7CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCi0tIChOU1VSTCAqKV93ZWJr
aXRfeW91VHViZVVSTDsKLQogKyAoTlNVUkwgKil1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OihO
U1N0cmluZyAqKXJlbGF0aXZlUGFydDsKICNlbmRpZgogQGVuZApAQCAtOTksOSArOTcsNCBAQCBA
aW50ZXJmYWNlIE5TU3RyaW5nIChXZWJOU1VSTEV4dHJhcykKIC0gKE5TU3RyaW5nICopX3dlYmtp
dF9VUkxGcmFnbWVudDsKIC0gKE5TU3RyaW5nICopX3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRV
Ukw7CiAKLSNpZiBUQVJHRVRfT1NfSVBIT05FCi0tIChOU1N0cmluZyAqKV93ZWJraXRfdW5lc2Nh
cGVkUXVlcnlWYWx1ZTsKLS0gKE5TRGljdGlvbmFyeSAqKV93ZWJraXRfcXVlcnlLZXlzQW5kVmFs
dWVzOwotI2VuZGlmCi0KIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViTlNV
UkxFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJOU1VS
TEV4dHJhcy5tbQkocmV2aXNpb24gMTY4NDA3KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc0LDEwMCArMjc0LDYgQEAgLSAo
TlNVUkwgKilfd2Via2l0X1VSTEZyb21VUkxPclNjaGVtZWxlcwogfQogCiAjaWYgUExBVEZPUk0o
SU9TKQotc3RhdGljIGlubGluZSBOU1VSTCAqY3JlYXRlWW91VHViZVVSTChOU1N0cmluZyAqdmlk
ZW9JRCwgTlNTdHJpbmcgKnRpbWVJRCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEg
eW91dHViZTogVVJMLCB3aGljaCBpcyBhbiBpbnRlcm5hbCBmb3JtYXQgdGhhdCBpcyBwYXNzZWQg
dG8gWW91VHViZS5hcHAuCi0gICAgLy8gSWYgdGhlIGZvcm1hdCBvZiB0aGVzZSBpbnRlcm5hbCBs
aW5rcyBpcyBjaGFuZ2VkIGJlbG93LCB0aGVuIHRoZSBhcHAgcHJvYmFibHkgbmVlZHMgdG8gYmUg
dXBkYXRlZCBhcyB3ZWxsLgotCi0gICAgQVNTRVJUKHZpZGVvSUQgJiYgW3ZpZGVvSUQgbGVuZ3Ro
XSA+IDAgJiYgIVt2aWRlb0lEIGlzRXF1YWxUb1N0cmluZzpAIi8iXSk7Ci0KLSAgICBpZiAoW3Rp
bWVJRCBsZW5ndGhdKQotICAgICAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ5b3V0dWJlOiVAP3Q9JUAiLCB2aWRlb0lELCB0aW1lSURd
XTsKLSAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJ5b3V0dWJlOiVAIiwgdmlkZW9JRF1dOwotfQotCi0tIChOU1VSTCAqKV93ZWJraXRf
eW91VHViZVVSTAotewotICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHdlIGFyZW4ndCBldmVuIG9u
IHd3dy55b3V0dWJlLmNvbSBvciB5b3V0dWJlLmNvbS4KLSAgICBOU1N0cmluZyAqc2NoZW1lID0g
W1tzZWxmIHNjaGVtZV0gbG93ZXJjYXNlU3RyaW5nXTsKLSAgICBpZiAoIVtzY2hlbWUgaXNFcXVh
bFRvU3RyaW5nOkAiaHR0cCJdICYmICFbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHBzIl0p
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU1N0cmluZyAqaG9zdE5hbWUgPSBbW3NlbGYg
aG9zdF0gbG93ZXJjYXNlU3RyaW5nXTsKLSAgICBCT09MIGlzWW91VHViZU1vYmlsZVdlYkFwcFVS
TCA9IFtob3N0TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJtLnlvdXR1YmUuY29tIl07Ci0gICAgQk9P
TCBpc1lvdVR1YmVTaG9ydGVuZWRVUkwgPSBbaG9zdE5hbWUgaXNFcXVhbFRvU3RyaW5nOkAieW91
dHUuYmUiXTsKLSAgICBpZiAoIWlzWW91VHViZU1vYmlsZVdlYkFwcFVSTAotICAgICAgICAmJiAh
aXNZb3VUdWJlU2hvcnRlbmVkVVJMCi0gICAgICAgICYmICFbaG9zdE5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAid3d3LnlvdXR1YmUuY29tIl0KLSAgICAgICAgJiYgIVtob3N0TmFtZSBpc0VxdWFsVG9T
dHJpbmc6QCJ5b3V0dWJlLmNvbSJdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNTdHJp
bmcgKnBhdGggPSBbc2VsZiBwYXRoXTsKLQotICAgIC8vIFNob3J0IFVSTCBvZiB0aGUgZm9ybTog
aHR0cDovL3lvdXR1LmJlL3YxZDMwMUQKLSAgICBpZiAoaXNZb3VUdWJlU2hvcnRlbmVkVVJMKSB7
Ci0gICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOwot
ICAgICAgICBpZiAodmlkZW9JRCAmJiAhW3ZpZGVvSUQgaXNFcXVhbFRvU3RyaW5nOkAiLyJdKQot
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVVUkwodmlkZW9JRCwgbmlsKTsKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBOU1N0cmluZyAqcXVlcnkgPSBbc2VsZiBxdWVy
eV07Ci0gICAgTlNTdHJpbmcgKmZyYWdtZW50ID0gW3NlbGYgZnJhZ21lbnRdOwotCi0gICAgLy8g
T24gdGhlIFlvdVR1YmUgbW9iaWxlIHdlYiBhcHAsIHRoZSBwYXRoIGFuZCBxdWVyeSBzdHJpbmcg
YXJlIHB1dCBpbnRvIHRoZQotICAgIC8vIGZyYWdtZW50IHNvIHRoYXQgb25lIHdlYiBwYWdlIGlz
IG9ubHkgZXZlciBsb2FkZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0vOTU1MDYzOT4pLgotICAgIGlm
IChpc1lvdVR1YmVNb2JpbGVXZWJBcHBVUkwpIHsKLSAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtm
cmFnbWVudCByYW5nZU9mU3RyaW5nOkAiPyJdOwotICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24g
PT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgcGF0aCA9IGZyYWdtZW50OwotICAgICAgICAg
ICAgcXVlcnkgPSBuaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXRoID0gW2Zy
YWdtZW50IHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2UubG9jYXRpb25dOwotICAgICAgICAgICAgcXVl
cnkgPSBbZnJhZ21lbnQgc3Vic3RyaW5nRnJvbUluZGV4OihyYW5nZS5sb2NhdGlvbiArIDEpXTsK
LSAgICAgICAgfQotICAgICAgICBmcmFnbWVudCA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAoW1tw
YXRoIGxvd2VyY2FzZVN0cmluZ10gaXNFcXVhbFRvU3RyaW5nOkAiL3dhdGNoIl0pIHsKLSAgICAg
ICAgaWYgKFtxdWVyeSBsZW5ndGhdKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqdmlkZW9JRCA9
IFtbcXVlcnkgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdIG9iamVjdEZvcktleTpAInYiXTsK
LSAgICAgICAgICAgIGlmICh2aWRlb0lEKSB7Ci0gICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5
ICpmcmFnbWVudERpY3QgPSBbW3NlbGYgZnJhZ21lbnRdIF93ZWJraXRfcXVlcnlLZXlzQW5kVmFs
dWVzXTsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGltZUlEID0gW2ZyYWdtZW50RGljdCBv
YmplY3RGb3JLZXk6QCJ0Il07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVlvdVR1YmVV
UkwodmlkZW9JRCwgdGltZUlEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE1heSBiZSBhIG5ldy1zdHlsZSBsaW5rIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzc3MzM2OTI+
KS4KLSAgICAgICAgaWYgKFtmcmFnbWVudCBoYXNQcmVmaXg6QCIhIl0pIHsKLSAgICAgICAgICAg
IHF1ZXJ5ID0gW2ZyYWdtZW50IHN1YnN0cmluZ0Zyb21JbmRleDoxXTsKLQotICAgICAgICAgICAg
aWYgKFtxdWVyeSBsZW5ndGhdKSB7Ci0gICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpxdWVy
eURpY3QgPSBbcXVlcnkgX3dlYmtpdF9xdWVyeUtleXNBbmRWYWx1ZXNdOwotICAgICAgICAgICAg
ICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW3F1ZXJ5RGljdCBvYmplY3RGb3JLZXk6QCJ2Il07Ci0g
ICAgICAgICAgICAgICAgaWYgKHZpZGVvSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNTdHJp
bmcgKnRpbWVJRCA9IFtxdWVyeURpY3Qgb2JqZWN0Rm9yS2V5OkAidCJdOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlWW91VHViZVVSTCh2aWRlb0lELCB0aW1lSUQpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW3Bh
dGggX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCIvdi8iXSB8fCBbcGF0aCBfd2ViX2hh
c0Nhc2VJbnNlbnNpdGl2ZVByZWZpeDpAIi9lLyJdKSB7Ci0gICAgICAgIE5TU3RyaW5nICp2aWRl
b0lEID0gW3BhdGggbGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAgICAgIC8vIFRoZXNlIFVSTHMg
YXJlIGZ1bm55IC0gdGhleSBkb24ndCBoYXZlIGEgPyBmb3IgdGhlIGZpcnN0IHF1ZXJ5IHBhcmFt
ZXRlci4KLSAgICAgICAgLy8gU3RyaXAgYWxsIGNoYXJhY3RlcnMgYWZ0ZXIgYW5kIGluY2x1ZGlu
ZyAnJicgdG8gcmVtb3ZlIGV4dHJhbmVvdXMgcGFyYW1ldGVycyBhZnRlciB0aGUgdmlkZW8gSUQu
Ci0gICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5kID0gW3ZpZGVvSUQgcmFuZ2VPZlN0cmluZzpAIiYi
XTsKLSAgICAgICAgaWYgKGFtcGVyc2FuZC5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAg
ICAgICAgdmlkZW9JRCA9IFt2aWRlb0lEIHN1YnN0cmluZ1RvSW5kZXg6YW1wZXJzYW5kLmxvY2F0
aW9uXTsKLQotICAgICAgICBpZiAodmlkZW9JRCkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVZ
b3VUdWJlVVJMKHZpZGVvSUQsIG5pbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5pbDsKLX0KLQog
KyAoTlNVUkwgKil1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0OihOU1N0cmluZyAqKXJlbGF0aXZl
UGFydAogewogICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQpOwpAQCAtNDkwLDczICszOTYsNCBAQCAtIChOU1N0cmluZyAqKV93ZWJraXRfVVJM
RnJhZ21lbnQKICAgICByZXR1cm4gW3NlbGYgc3Vic3RyaW5nRnJvbUluZGV4OmZyYWdtZW50UmFu
Z2UubG9jYXRpb24gKyAxXTsKIH0KIAotI2lmIFBMQVRGT1JNKElPUykKLQotLSAoTlNTdHJpbmcg
Kilfd2Via2l0X3VuZXNjYXBlZFF1ZXJ5VmFsdWUKLXsKLSAgICBOU011dGFibGVTdHJpbmcgKnN0
cmluZyA9IFtbW3NlbGYgc3RyaW5nQnlSZXBsYWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Ci0gICAg
aWYgKCFzdHJpbmcpIC8vIElmIHdlIGZhaWxlZCB0byBkZWNvZGUgdGhlIFVSTCBhcyBVVEY4LCBm
YWxsIGJhY2sgdG8gTGF0aW4xCi0gICAgICAgIHN0cmluZyA9IFtbW3NlbGYgc3RyaW5nQnlSZXBs
YWNpbmdQZXJjZW50RXNjYXBlc1VzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGlu
Z10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICBbc3RyaW5nIHJlcGxhY2VPY2N1cnJl
bmNlc09mU3RyaW5nOkAiKyIgd2l0aFN0cmluZzpAIiAiIG9wdGlvbnM6TlNMaXRlcmFsU2VhcmNo
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSldOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV93ZWJraXRfcXVlcnlLZXlzQW5kVmFsdWVzCi17
Ci0gICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBbc2VsZiBsZW5ndGhdOwotICAgIGlmICghcXVl
cnlMZW5ndGgpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgTlNNdXRhYmxlRGljdGlv
bmFyeSAqcXVlcnlLZXlzQW5kVmFsdWVzID0gbmlsOwotICAgIE5TUmFuZ2UgZXF1YWxTZWFyY2hS
YW5nZSA9IE5TTWFrZVJhbmdlKDAsIHF1ZXJ5TGVuZ3RoKTsKLSAgICAKLSAgICB3aGlsZSAoZXF1
YWxTZWFyY2hSYW5nZS5sb2NhdGlvbiA8IHF1ZXJ5TGVuZ3RoIC0gMSAmJiBlcXVhbFNlYXJjaFJh
bmdlLmxlbmd0aCkgewotICAgICAgICAKLSAgICAgICAgLy8gU2VhcmNoIGZvciAiPSIuCi0gICAg
ICAgIE5TUmFuZ2UgZXF1YWxSYW5nZSA9IFtzZWxmIHJhbmdlT2ZTdHJpbmc6QCI9IiBvcHRpb25z
Ok5TTGl0ZXJhbFNlYXJjaCByYW5nZTplcXVhbFNlYXJjaFJhbmdlXTsKLSAgICAgICAgaWYgKGVx
dWFsUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRlckVxdWFsID0gZXF1YWxSYW5nZS5sb2Nh
dGlvbiArIDE7Ci0gICAgICAgIGlmIChpbmRleEFmdGVyRXF1YWwgPiBxdWVyeUxlbmd0aCAtIDEp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAv
LyBHZXQgdGhlIGtleSBiZWZvcmUgdGhlICI9Ii4KLSAgICAgICAgTlNSYW5nZSBrZXlSYW5nZSA9
IE5TTWFrZVJhbmdlKGVxdWFsU2VhcmNoUmFuZ2UubG9jYXRpb24sIGVxdWFsUmFuZ2UubG9jYXRp
b24gLSBlcXVhbFNlYXJjaFJhbmdlLmxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNl
YWNoIGZvciB0aGUgYW1wZXJzYW5kLgotICAgICAgICBOU1JhbmdlIGFtcGVyc2FuZFNlYXJjaFJh
bmdlID0gTlNNYWtlUmFuZ2UoaW5kZXhBZnRlckVxdWFsLCBxdWVyeUxlbmd0aCAtIGluZGV4QWZ0
ZXJFcXVhbCk7Ci0gICAgICAgIE5TUmFuZ2UgYW1wZXJzYW5kUmFuZ2UgPSBbc2VsZiByYW5nZU9m
U3RyaW5nOkAiJiIgb3B0aW9uczpOU0xpdGVyYWxTZWFyY2ggcmFuZ2U6YW1wZXJzYW5kU2VhcmNo
UmFuZ2VdOwotICAgICAgICAKLSAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBhZnRlciB0aGUgIj0i
LCBiZWZvcmUgdGhlIGFtcGVyc2FuZC4KLSAgICAgICAgTlNSYW5nZSB2YWx1ZVJhbmdlOwotICAg
ICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAg
ICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1YWwsIGFtcGVyc2FuZFJh
bmdlLmxvY2F0aW9uIC0gaW5kZXhBZnRlckVxdWFsKTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAg
ICAgIHZhbHVlUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyRXF1YWwsIHF1ZXJ5TGVuZ3Ro
IC0gaW5kZXhBZnRlckVxdWFsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy8gU2F2ZSB0
aGUga2V5IGFuZCB0aGUgdmFsdWUuCi0gICAgICAgIGlmIChrZXlSYW5nZS5sZW5ndGggJiYgdmFs
dWVSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChxdWVyeUtleXNBbmRWYWx1ZXMgPT0g
bmlsKQotICAgICAgICAgICAgICAgIHF1ZXJ5S2V5c0FuZFZhbHVlcyA9IFtOU011dGFibGVEaWN0
aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgICAgICAgICAgTlNTdHJpbmcgKmtleSA9IFtbc2VsZiBz
dWJzdHJpbmdXaXRoUmFuZ2U6a2V5UmFuZ2VdIGxvd2VyY2FzZVN0cmluZ107Ci0gICAgICAgICAg
ICBOU1N0cmluZyAqdmFsdWUgPSBbW3NlbGYgc3Vic3RyaW5nV2l0aFJhbmdlOnZhbHVlUmFuZ2Vd
IF93ZWJraXRfdW5lc2NhcGVkUXVlcnlWYWx1ZV07Ci0gICAgICAgICAgICBpZiAoW2tleSBsZW5n
dGhdICYmIFt2YWx1ZSBsZW5ndGhdKQotICAgICAgICAgICAgICAgIFtxdWVyeUtleXNBbmRWYWx1
ZXMgc2V0T2JqZWN0OnZhbHVlIGZvcktleTprZXldOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBBdCB0aGUgZW5kLgotICAgICAgICBpZiAoYW1wZXJzYW5kUmFuZ2UubG9jYXRpb24g
PT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgLy8g
Q29udGludWUgc2VhcmNoaW5nIGFmdGVyIHRoZSBhbXBlcnNhbmQuCi0gICAgICAgIHVuc2lnbmVk
IGluZGV4QWZ0ZXJBbXBlcnNhbmQgPSBhbXBlcnNhbmRSYW5nZS5sb2NhdGlvbiArIDE7Ci0gICAg
ICAgIGVxdWFsU2VhcmNoUmFuZ2UgPSBOU01ha2VSYW5nZShpbmRleEFmdGVyQW1wZXJzYW5kLCBx
dWVyeUxlbmd0aCAtIGluZGV4QWZ0ZXJBbXBlcnNhbmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gcXVlcnlLZXlzQW5kVmFsdWVzOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCiBA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gMTY4NDA3KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIwMDAsNjYgKzIwMDAsNyBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVM
b2FkZXJDbGllbnQ6CiAgICAgICAgICAgICBbZXJyb3IgcmVsZWFzZV07CiAgICAgICAgIH0KIAot
I2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gU2VlIGlmIHRoaXMgaXMgYSBZb3VUdWJlIEZs
YXNoIHBsdWctaW4KLSAgICAgICAgaWYgKFtNSU1FVHlwZSBpc0VxdWFsVG9TdHJpbmc6QCJhcHBs
aWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdKSB7Ci0gICAgICAgICAgICBOU0RpY3Rpb25hcnkg
KmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0czpraXQocGFy
YW1WYWx1ZXMpIGZvcktleXM6a2l0KHBhcmFtTmFtZXMpXTsKLSAgICAgICAgICAgIE5TU3RyaW5n
ICpzcmNTdHJpbmcgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6QCJzcmMiXTsKLSAgICAgICAg
ICAgIGlmIChzcmNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBOU1VSTCAqc3JjVVJMID0gW05T
VVJMIFVSTFdpdGhTdHJpbmc6c3JjU3RyaW5nXTsKLSAgICAgICAgICAgICAgICBOU1VSTCAqeW91
dHViZVVSTCA9IFtzcmNVUkwgX3dlYmtpdF95b3VUdWJlVVJMXTsKLSAgICAgICAgICAgICAgICBp
ZiAoc3JjVVJMICYmIHlvdXR1YmVVUkwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNm
b3JtIHRoZSB5b3V0dWJlVVJMICh5b3V0dWJlOlZpZGVvSUQpIHRvIGlmcmFtZSBlbWJlZCB1cmwg
d2hpY2ggaGFzIHRoZSBmb3JtYXQ6IGh0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvVmlkZW9J
RAotICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqc3JjUGF0aCA9IFtzcmNVUkwgcGF0aF07
Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICp2aWRlb0lEID0gW1t5b3V0dWJlVVJMIGFi
c29sdXRlU3RyaW5nXSBzdWJzdHJpbmdGcm9tSW5kZXg6W1t5b3V0dWJlVVJMIHNjaGVtZV0gbGVu
Z3RoXSArIDFdOwotICAgICAgICAgICAgICAgICAgICBOU1JhbmdlIHJhbmdlT2ZWaWRlb0lESW5Q
YXRoID0gW3NyY1BhdGggcmFuZ2VPZlN0cmluZzp2aWRlb0lEXTsKLSAgICAgICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKnNyY1VSTFByZWZpeCA9IG5pbDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJhbmdlT2ZWaWRlb0lESW5QYXRoLmxvY2F0aW9uID09IE5TTm90Rm91bmQgJiYgIVdlYktpdExp
bmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIX1lPVVRVQkVfRU1CRURfSUZS
QU1FX1RSQU5TRk9STSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2aWRl
b0lEIGlzIG5vdCBpbnNpZGUgc3JjUGF0aCwgdGhlIGVtYmVkIHNyYyB1cmwgaXMgaW4gd3Jvbmcg
Zm9ybWF0LiBXZSBzdGlsbCB3YW50IHRvIHN1cHBvcnQgdGhlbSBmb3IgYXBwcyBidWlsZCBhZ2Fp
bnN0IDUuMSBhbmQgb2xkZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZW1iZWQg
c3JjIGxpa2UgaHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVZpZGVvSUQsIHdlIG1ha2Ug
c3JjVVJMUHJlZml4ICJodHRwOi8vd3d3LnlvdXR1YmUuY29tIi4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTE3NTAyPiB5b3V0dWJlIHZpZGVvcyBk
b24ndCB3b3JrIGluIEZBTyBGb3Jlc3RyeQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjVVJM
UHJlZml4ID0gW3NyY1N0cmluZyBzdWJzdHJpbmdUb0luZGV4OltzcmNTdHJpbmcgcmFuZ2VPZlN0
cmluZzpzcmNQYXRoXS5sb2NhdGlvbl07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmFuZ2VPZlZpZGVvSURJblBhdGgubGVuZ3Ro
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJvbSB0aGUgb3JpZ2luYWwgVVJMLCB3
ZSBuZWVkIHRvIGdldCB0aGUgcGFydCBiZWZvcmUgL3BhdGgvVmlkZW9JZC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2VPZlBhdGhCZWZvcmVWaWRlb0lEID0gW3NyY1N0cmlu
ZyByYW5nZU9mU3RyaW5nOltzcmNQYXRoIHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2VPZlZpZGVvSURJ
blBhdGgubG9jYXRpb25dXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyYW5nZU9m
UGF0aEJlZm9yZVZpZGVvSUQubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc3Jj
VVJMUHJlZml4ID0gW3NyY1N0cmluZyBzdWJzdHJpbmdUb0luZGV4OnJhbmdlT2ZQYXRoQmVmb3Jl
VmlkZW9JRC5sb2NhdGlvbl07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgTlNTdHJpbmcgKnF1ZXJ5ID0gW3NyY1VSTCBxdWVyeV07Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBpZnJhbWUgd2lsbCBkaXNwbGF5IGluZm9ybWF0aW9uIGxp
a2UgdGhlIHZpZGVvIHRpdGxlIGFuZCB1cGxvYWRlciBvbiB0b3Agb2YgdGhlIHZpZGVvLiAgRG9u
J3QgZGlzcGxheQotICAgICAgICAgICAgICAgICAgICAvLyB0aGVtIGlmIHRoZSBlbWJlZGluZyBo
dG1sIGRvZXNuJ3Qgc3BlY2lmeSBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5ICYm
IFtxdWVyeSBsZW5ndGhdICYmIFtxdWVyeSByYW5nZU9mU3RyaW5nOkAic2hvd2luZm8iXS5sb2Nh
dGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBbcXVl
cnkgc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCImc2hvd2luZm89MCJdOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IEAic2hvd2luZm89
MCI7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcgaWYg
aXQgaXMgdmFsaWQuICBTb21lIHNpdGVzIGFwcGFyZW50bHkgZm9yZ2V0IHRvIGFkZCAiPyIgZm9y
IHRoZSBxdWVyeSBzdHJpbmcsIGluIHRoYXQgY2FzZSwKLSAgICAgICAgICAgICAgICAgICAgLy8g
d2Ugd2lsbCBkaXNjYXJkIHRoZSBwYXJhbWV0ZXJzIGluIHRoZSB1cmwuCi0gICAgICAgICAgICAg
ICAgICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzExNTM1MTU1PiBbQmluY29tcGF0XSBSZWdy
ZXNzaW9uOiBTQzJDYXN0cyBhcHA6IFZpZGVvcyBkb24ndCBwbGF5IGluIFNDMkNhc3RzCi0gICAg
ICAgICAgICAgICAgICAgIE5TU3RyaW5nICplbWJlZFNyYyA9IHF1ZXJ5ID8gW3NyY1VSTFByZWZp
eCBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIi9lbWJlZC8lQD8lQCIsIHZpZGVvSUQsIHF1ZXJ5
XSA6IFtzcmNVUkxQcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIvZW1iZWQvJUAiLCB2
aWRlb0lEXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc2hhZG93IHN1
YnRyZWUgZm9yIHRoZSBwbHVnaW4gZWxlbWVudCwgdGhlIGlmcmFtZSBwbGF5ZXIgaXMgaW5qZWN0
ZWQgaW4gdGhlIHNoYWRvdyB0cmVlLgotICAgICAgICAgICAgICAgICAgICAgICAgdG9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50KCplbGVtZW50KS5jcmVhdGVTaGFkb3dJRnJhbWVTdWJ0cmVlKGVtYmVk
U3JjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIFlvdVR1
YmUgRmxhc2ggcGx1Zy1pbi4gIFdlIGRvbid0IGhhdmUgRmxhc2guICBDcmVhdGUgYW4gaW5zdGFu
Y2Ugb2YgQXBwbGUncyBzcGVjaWFsIFlvdVR1YmUgcGx1Zy1pbiBpbnN0ZWFkCi0gICAgICAgICAg
ICAgICAgICAgIHBsdWdpblBhY2thZ2UgPSBbd2ViVmlldyBfcGx1Z2luRm9yTUlNRVR5cGU6QCJh
cHBsaWNhdGlvbi94LWFwcGxlLWZha2UteW91dHViZS1wbHVnaW4iXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcg
PSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2lu
UGFja2FnZSwga2l0KHBhcmFtTmFtZXMpLCBraXQocGFyYW1WYWx1ZXMpLCBiYXNlVVJMLCBraXQo
ZWxlbWVudCksIGxvYWRNYW51YWxseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmll
dykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdp
bldpZGdldElPUyh2aWV3KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBBU1NFUlQodmlldyk7Cg==
</data>
<flag name="review"
          id="255416"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>