<?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>196838</bug_id>
          
          <creation_ts>2019-04-11 16:47:32 -0700</creation_ts>
          <short_desc>Send delayed Ad Click Attribution conversion requests to the click source</short_desc>
          <delta_ts>2019-04-17 20:04:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=196955</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=196970</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=196983</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=196934</see_also>
          <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="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1526541</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-11 16:47:32 -0700</bug_when>
    <thetext>If a conversion is reported and matches an ad click, we should schedule a conversion request with appropriate data going to the click source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526542</commentid>
    <comment_count>1</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-11 16:47:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/47650157&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526569</commentid>
    <comment_count>2</comment_count>
      <attachid>367271</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-11 17:53:16 -0700</bug_when>
    <thetext>Created attachment 367271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526570</commentid>
    <comment_count>3</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-11 17:53:58 -0700</bug_when>
    <thetext>The FIXME comments are for follow-up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526747</commentid>
    <comment_count>4</comment_count>
      <attachid>367271</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-04-12 09:07:34 -0700</bug_when>
    <thetext>Comment on attachment 367271
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Test: http/tests/adClickAttribution/send-attribution-conversion-request.html

I think this usually goes *after* the description, not before.

&gt; Source/WebCore/loader/AdClickAttribution.cpp:103
&gt; +        builder.append(&quot;?conversion=&quot;);

appendLiteral

&gt; Source/WebCore/loader/AdClickAttribution.cpp:105
&gt; +        builder.append(&quot;&amp;campaign=&quot;);

appendLiteral

&gt; Source/WebCore/loader/AdClickAttribution.cpp:143
&gt; +void AdClickAttribution::setConversionSent()

markConversionAsSent() ?

&gt; Source/WebCore/loader/AdClickAttribution.cpp:150
&gt; +bool AdClickAttribution::conversionSent() const

Needs a prefix, e.g. wasConversionSent()

&gt; Source/WebCore/loader/AdClickAttribution.cpp:174
&gt; +            builder.append((secondsUntilSend &gt;= 24_h &amp;&amp; secondsUntilSend &lt;= 48_h) ? &quot;Within 24-48 hours&quot; : &quot;Outside 24-48 hours&quot;);

appendLiteral

&gt; Source/WebCore/loader/AdClickAttribution.cpp:177
&gt; +        builder.append((m_conversion-&gt;hasBeenSent ? &quot;true&quot; : &quot;false&quot;));

appendLiteral

&gt; Source/WebCore/loader/AdClickAttribution.h:206
&gt; +        explicit Conversion(ConversionData data, Priority priority, bool hasBeenSent = false)

No need for explicit. Also, we do not like boolean parameters, please use a strong enum like:
enum class : bool WasSent { No, Yes };

&gt; Source/WebCore/loader/AdClickAttribution.h:237
&gt; +    WEBCORE_EXPORT URL url(Optional&lt;URL&gt; baseURLForTesting = { }) const;

const Optional&lt;URL&gt;&amp;

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:59
&gt; +void NetworkAdClickAttribution::setTimer(Seconds seconds)

startTimer?

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:61
&gt; +    m_firePendingConversionRequestsTimer.stop();

Why stop first? I believe startOneShot() takes care of updating the nextFireTime if already scheduled. Calling stop() and then start() is actually less efficient.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:65
&gt; +        m_firePendingConversionRequestsTimer.startOneShot(seconds);

m_firePendingConversionRequestsTimer.startOneShot(m_isRunningTest ? 0_s : seconds);

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:117
&gt; +    request.setHTTPMethod(&quot;POST&quot;);

&quot;POST&quot;_s

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:118
&gt; +    request.setHTTPHeaderField(HTTPHeaderName::CacheControl, &quot;max-age=0&quot;);

&quot;max-age=0&quot;_s

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:128
&gt; +    loadParameters.identifier = identifier++;

++identifier? We usually consider 0 identifiers as invalid (also note that by default, 0 cannot be stored as key in hash maps).

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:154
&gt; +

blank line looks weird here IMO.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:63
&gt; +    void setRequestTimerForTesting(bool value) { m_isRunningTest = value; }

setRequestTimerForTesting is not very understandable.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:64
&gt; +    void setConversionURLForTesting(const URL&amp; testURL) { m_conversionBaseURLForTesting = testURL; }

URL&amp;&amp; and WTFMove(testURL)

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:65
&gt;  private:

Blank line before.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2517
&gt; +    if (auto session = networkSession(sessionID))

auto* assuming it returns a raw pointer.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2525
&gt; +    if (auto session = networkSession(sessionID))

auto* assuming it returns a raw pointer.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2526
&gt; +        session-&gt;setAdClickAttributionConversionURLForTesting(url);

WTFMove(url)

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:331
&gt; +    void setAdClickAttributionConversionURLForTesting(PAL::SessionID, const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);

URL&amp;&amp;

&gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:166
&gt; +    m_adClickAttribution-&gt;setRequestTimerForTesting(value);

Do we need a second flag? Could we imply that we&apos;re running the tests if the conversionURLForTesting for set?

&gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:169
&gt; +void NetworkSession::setAdClickAttributionConversionURLForTesting(const URL&amp; url)

URL&amp;&amp;

&gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:171
&gt; +    m_adClickAttribution-&gt;setConversionURLForTesting(url);

WTFMove(url)

&gt; Source/WebKit/NetworkProcess/NetworkSession.h:87
&gt; +    void setAdClickAttributionConversionURLForTesting(const URL&amp;);

URL&amp;&amp;

&gt; Source/WebKit/NetworkProcess/PingLoad.h:28
&gt; +#include &quot;NetworkConnectionToWebProcess.h&quot;

Why is this needed?

&gt; Source/WebKit/NetworkProcess/PingLoad.h:48
&gt; +    void initialize(NetworkProcess&amp;);

I would put this below the destructor.

&gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2749
&gt; +void WKPageSetAdClickAttributionConversionURLForTesting(WKPageRef page, WKStringRef urlString, WKPageSetAdClickAttributionRequestTimerForTestingFunction callback, void* callbackContext)

Why isn&apos;t this a WKURL instead of a WKStringRef urlString?

&gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2751
&gt; +    

Please drop this blank line.

&gt; Source/WebKit/UIProcess/API/C/WKPagePrivate.h:192
&gt; +typedef void (*WKPageSetAdClickAttributionRequestTimerForTestingFunction)(void* functionContext);

Copy paste error?

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1191
&gt; +void NetworkProcessProxy::setAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

URL&amp;&amp;

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1198
&gt; +    sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(sessionID, url), WTFMove(completionHandler));

WTFMove(url)

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:176
&gt; +    void setAdClickAttributionConversionURLForTesting(PAL::SessionID, const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);

URL&amp;&amp;

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8874
&gt; +void WebPageProxy::setAdClickAttributionConversionURLForTesting(const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

URL&amp;&amp;

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8876
&gt; +    m_process-&gt;processPool().setAdClickAttributionConversionURLForTesting(m_websiteDataStore-&gt;sessionID(), url, WTFMove(completionHandler));

WTFMove(url)

&gt; Source/WebKit/UIProcess/WebPageProxy.h:1508
&gt; +    void setAdClickAttributionConversionURLForTesting(const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);

URL&amp;&amp;

&gt; Source/WebKit/UIProcess/WebProcessPool.h:498
&gt; +    void setAdClickAttributionRequestTimerForTesting(PAL::SessionID, bool value, CompletionHandler&lt;void()&gt;&amp;&amp;);

Can we please omit those things from WebProcessPool? Why does the process pool need to know about ad click? The call sites can simply get the networkProcess from the pool and send IPC directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526754</commentid>
    <comment_count>5</comment_count>
      <attachid>367271</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-12 09:12:09 -0700</bug_when>
    <thetext>Comment on attachment 367271
Patch

Some comments below.

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

&gt; Source/WebCore/loader/AdClickAttribution.cpp:94
&gt; +URL AdClickAttribution::url(Optional&lt;URL&gt; baseURLForTesting) const

I would create two urls getter, the current one and another one being: URL urlForTesting(const URL&amp; baseURL) const;

&gt; Source/WebCore/loader/AdClickAttribution.h:206
&gt; +        explicit Conversion(ConversionData data, Priority priority, bool hasBeenSent = false)

No need for explicit.

&gt; Source/WebCore/loader/AdClickAttribution.h:220
&gt; +        bool hasBeenSent;

I would set it to false here as well.

&gt; Source/WebCore/loader/AdClickAttribution.h:333
&gt;  }

No need to move priority since it is an uint

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:59
&gt; +void NetworkAdClickAttribution::setTimer(Seconds seconds)

The name NetworkAdClickAttribution is not great as it looks like it is one click attribution while it is a collection of attributions.
NetworkAdClickAttribution -&gt; AdClickAttributionManager?

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:65
&gt; +        m_firePendingConversionRequestsTimer.startOneShot(seconds);

m_firePendingConversionRequestsTimer.startOneShot(m_isRunningTest ? seconds : 0_s);

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:78
&gt;      destinationIter-&gt;value.setConversion(WTFMove(conversion));

setConversion might exit early in case the conversion is not valid.
I would tend for setConversion to return a boolean.
Then, here we would exit early and probably remove destinationIter from sourceIter-&gt;value.

By exiting early, we would not have to check for earliestTimeToSend below.
Alternatively, setConversion could return an earliestTimeToSend directly.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:86
&gt; +    auto seconds = *earliestTimeToSend - WallTime::now();

setConversion is doing seconds + WallTime::now() and here we are doing earliestTimeToSend - WallTime::now().
Could we simplify things here and have setConversion return an Optional&lt;Seconds&gt;?

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:87
&gt; +    if (seconds &lt;= 0_s) {

Check probably not needed, if seconds is negative, the timer will probably convert it to 0_s.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:100
&gt; +    m_firePendingConversionRequestsTimer.stop();

Is it needed?

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:102
&gt; +    if (!m_pingLoadFunction) {

Instead of doing this check, I would initialize m_pingLoadFunction to a no-op function.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:140
&gt; +    loadParameters.mainDocumentURL = conversionReferrerURL;

WTFMove(conversionReferrerURL)

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:155
&gt; +            if (attribution.conversionSent()) {

When attribution is marked as conversionSent, I believe we should remove it from the map.
This should make this check unnecessary.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:160
&gt; +            auto earliestTimeToSend = attribution.earliestTimeToSend();

Instead of having one big m_adClickAttributionMap map, it might be better to have two maps:
- One for not yet converted ad click attributions
- One for converted ad click attributions that are pending being sent.
Here, we would only iterate over the second one, which would make earliestTimeToSend always available.

Maybe that would call for two structures, one with an earliestTimeToSend and one without.

&gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:175
&gt; +                nextTimeToFire = seconds;

Shouldn&apos;t nextTimeToFire be set to max value initially and then std::min for each loop.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2523
&gt; +void NetworkProcess::setAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

Use one method for both?

&gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:78
&gt; +    m_adClickAttribution-&gt;setPingLoadFunction([this](NetworkResourceLoadParameters&amp;&amp; loadParameters, CompletionHandler&lt;void(const WebCore::ResourceError&amp;, const WebCore::ResourceResponse&amp;)&gt;&amp;&amp; completionHandler) {

We probably need to ref m_networkProcess or better makeWeakPtr it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526760</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-04-12 09:15:19 -0700</bug_when>
    <thetext>I see there is quite a bit of overlap between Youenn&apos;s comments and mine, good :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526942</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-12 16:42:26 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; Comment on attachment 367271 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367271&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Test: http/tests/adClickAttribution/send-attribution-conversion-request.html
&gt; 
&gt; I think this usually goes *after* the description, not before.

OK. I&apos;ve always written the description after the template stuff, before the file enumeration.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:103
&gt; &gt; +        builder.append(&quot;?conversion=&quot;);
&gt; 
&gt; appendLiteral

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:105
&gt; &gt; +        builder.append(&quot;&amp;campaign=&quot;);
&gt; 
&gt; appendLiteral

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:143
&gt; &gt; +void AdClickAttribution::setConversionSent()
&gt; 
&gt; markConversionAsSent() ?

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:150
&gt; &gt; +bool AdClickAttribution::conversionSent() const
&gt; 
&gt; Needs a prefix, e.g. wasConversionSent()

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:174
&gt; &gt; +            builder.append((secondsUntilSend &gt;= 24_h &amp;&amp; secondsUntilSend &lt;= 48_h) ? &quot;Within 24-48 hours&quot; : &quot;Outside 24-48 hours&quot;);
&gt; 
&gt; appendLiteral

The compiler doesn&apos;t accept it for such ternary expressions.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:177
&gt; &gt; +        builder.append((m_conversion-&gt;hasBeenSent ? &quot;true&quot; : &quot;false&quot;));
&gt; 
&gt; appendLiteral

Ditto.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:206
&gt; &gt; +        explicit Conversion(ConversionData data, Priority priority, bool hasBeenSent = false)
&gt; 
&gt; No need for explicit. Also, we do not like boolean parameters, please use a
&gt; strong enum like:
&gt; enum class : bool WasSent { No, Yes };

Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:237
&gt; &gt; +    WEBCORE_EXPORT URL url(Optional&lt;URL&gt; baseURLForTesting = { }) const;
&gt; 
&gt; const Optional&lt;URL&gt;&amp;

I&apos;ll go with Youenn&apos;s suggestion of two URL getters instead.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:59
&gt; &gt; +void NetworkAdClickAttribution::setTimer(Seconds seconds)
&gt; 
&gt; startTimer?

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:61
&gt; &gt; +    m_firePendingConversionRequestsTimer.stop();
&gt; 
&gt; Why stop first? I believe startOneShot() takes care of updating the
&gt; nextFireTime if already scheduled. Calling stop() and then start() is
&gt; actually less efficient.

I had a bunch of trouble with the timer firing repeatedly. I&apos;ll check that it doesn&apos;t happen without this call.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:65
&gt; &gt; +        m_firePendingConversionRequestsTimer.startOneShot(seconds);
&gt; 
&gt; m_firePendingConversionRequestsTimer.startOneShot(m_isRunningTest ? 0_s :
&gt; seconds);

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:117
&gt; &gt; +    request.setHTTPMethod(&quot;POST&quot;);
&gt; 
&gt; &quot;POST&quot;_s

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:118
&gt; &gt; +    request.setHTTPHeaderField(HTTPHeaderName::CacheControl, &quot;max-age=0&quot;);
&gt; 
&gt; &quot;max-age=0&quot;_s

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:128
&gt; &gt; +    loadParameters.identifier = identifier++;
&gt; 
&gt; ++identifier? We usually consider 0 identifiers as invalid (also note that
&gt; by default, 0 cannot be stored as key in hash maps).

Got it. Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:154
&gt; &gt; +
&gt; 
&gt; blank line looks weird here IMO.

OK. This will be cleaner after my follow-up patch for removing entries.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:63
&gt; &gt; +    void setRequestTimerForTesting(bool value) { m_isRunningTest = value; }
&gt; 
&gt; setRequestTimerForTesting is not very understandable.

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:64
&gt; &gt; +    void setConversionURLForTesting(const URL&amp; testURL) { m_conversionBaseURLForTesting = testURL; }
&gt; 
&gt; URL&amp;&amp; and WTFMove(testURL)

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.h:65
&gt; &gt;  private:
&gt; 
&gt; Blank line before.

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2517
&gt; &gt; +    if (auto session = networkSession(sessionID))
&gt; 
&gt; auto* assuming it returns a raw pointer.

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2525
&gt; &gt; +    if (auto session = networkSession(sessionID))
&gt; 
&gt; auto* assuming it returns a raw pointer.

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2526
&gt; &gt; +        session-&gt;setAdClickAttributionConversionURLForTesting(url);
&gt; 
&gt; WTFMove(url)

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.h:331
&gt; &gt; +    void setAdClickAttributionConversionURLForTesting(PAL::SessionID, const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:166
&gt; &gt; +    m_adClickAttribution-&gt;setRequestTimerForTesting(value);
&gt; 
&gt; Do we need a second flag? Could we imply that we&apos;re running the tests if the
&gt; conversionURLForTesting for set?

I want a way to override the timer without changing the conversion URL. It will be used in manual tests and demos where we want the real URL but don&apos;t want to wait 24-48 hours for the request to be sent.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:169
&gt; &gt; +void NetworkSession::setAdClickAttributionConversionURLForTesting(const URL&amp; url)
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:171
&gt; &gt; +    m_adClickAttribution-&gt;setConversionURLForTesting(url);
&gt; 
&gt; WTFMove(url)

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkSession.h:87
&gt; &gt; +    void setAdClickAttributionConversionURLForTesting(const URL&amp;);
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/PingLoad.h:28
&gt; &gt; +#include &quot;NetworkConnectionToWebProcess.h&quot;
&gt; 
&gt; Why is this needed?

I think it was when I included PingLoad.h in WebKit::NetworkSession. That made the compiler to process WebKit::PingLoad earlier and complain about the missing dependency. But I&apos;ll do a forward declare instead.

&gt; &gt; Source/WebKit/NetworkProcess/PingLoad.h:48
&gt; &gt; +    void initialize(NetworkProcess&amp;);
&gt; 
&gt; I would put this below the destructor.

Will fix.

&gt; &gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2749
&gt; &gt; +void WKPageSetAdClickAttributionConversionURLForTesting(WKPageRef page, WKStringRef urlString, WKPageSetAdClickAttributionRequestTimerForTestingFunction callback, void* callbackContext)
&gt; 
&gt; Why isn&apos;t this a WKURL instead of a WKStringRef urlString?

We seem to always convert them back to strings anyway, like so:
URL(URL(), toWTFString(URLRef))

Also, WKURL can only create objects from const char* strings.

But I managed to make it happen like this:
    auto wtfURLString = toWTFString(WKStringCreateWithJSString(urlString));
    WKRetainPtr&lt;WKURLRef&gt; messageBody(AdoptWK, WKURLCreateWithUTF8CString(wtfURLString.utf8().data()));


&gt; &gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2751
&gt; &gt; +    
&gt; 
&gt; Please drop this blank line.

Will fix.

&gt; &gt; Source/WebKit/UIProcess/API/C/WKPagePrivate.h:192
&gt; &gt; +typedef void (*WKPageSetAdClickAttributionRequestTimerForTestingFunction)(void* functionContext);
&gt; 
&gt; Copy paste error?

Yes. Thanks. Will fix.

&gt; &gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1191
&gt; &gt; +void NetworkProcessProxy::setAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1198
&gt; &gt; +    sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(sessionID, url), WTFMove(completionHandler));
&gt; 
&gt; WTFMove(url)

Will fix.

&gt; &gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:176
&gt; &gt; +    void setAdClickAttributionConversionURLForTesting(PAL::SessionID, const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8874
&gt; &gt; +void WebPageProxy::setAdClickAttributionConversionURLForTesting(const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8876
&gt; &gt; +    m_process-&gt;processPool().setAdClickAttributionConversionURLForTesting(m_websiteDataStore-&gt;sessionID(), url, WTFMove(completionHandler));
&gt; 
&gt; WTFMove(url)

Will fix.

&gt; &gt; Source/WebKit/UIProcess/WebPageProxy.h:1508
&gt; &gt; +    void setAdClickAttributionConversionURLForTesting(const URL&amp;, CompletionHandler&lt;void()&gt;&amp;&amp;);
&gt; 
&gt; URL&amp;&amp;

Will fix.

&gt; &gt; Source/WebKit/UIProcess/WebProcessPool.h:498
&gt; &gt; +    void setAdClickAttributionRequestTimerForTesting(PAL::SessionID, bool value, CompletionHandler&lt;void()&gt;&amp;&amp;);
&gt; 
&gt; Can we please omit those things from WebProcessPool? Why does the process
&gt; pool need to know about ad click? The call sites can simply get the
&gt; networkProcess from the pool and send IPC directly.

Yes, I&apos;ll removed all the Ad Click Attribution piping from WebKit::WebProcessPool and WebKit::NetworkProcessProxy.

Thanks for all the comments, Chris!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526948</commentid>
    <comment_count>8</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-12 16:55:56 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 367271 [details]
&gt; Patch
&gt; 
&gt; Some comments below.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367271&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:94
&gt; &gt; +URL AdClickAttribution::url(Optional&lt;URL&gt; baseURLForTesting) const
&gt; 
&gt; I would create two urls getter, the current one and another one being: URL
&gt; urlForTesting(const URL&amp; baseURL) const;

Good idea. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:206
&gt; &gt; +        explicit Conversion(ConversionData data, Priority priority, bool hasBeenSent = false)
&gt; 
&gt; No need for explicit.

OK. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:220
&gt; &gt; +        bool hasBeenSent;
&gt; 
&gt; I would set it to false here as well.

OK. Will fix.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:333
&gt; &gt;  }
&gt; 
&gt; No need to move priority since it is an uint

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:59
&gt; &gt; +void NetworkAdClickAttribution::setTimer(Seconds seconds)
&gt; 
&gt; The name NetworkAdClickAttribution is not great as it looks like it is one
&gt; click attribution while it is a collection of attributions.
&gt; NetworkAdClickAttribution -&gt; AdClickAttributionManager?

Will fix. (But this is not a new class. :)

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:65
&gt; &gt; +        m_firePendingConversionRequestsTimer.startOneShot(seconds);
&gt; 
&gt; m_firePendingConversionRequestsTimer.startOneShot(m_isRunningTest ? seconds
&gt; : 0_s);

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:78
&gt; &gt;      destinationIter-&gt;value.setConversion(WTFMove(conversion));
&gt; 
&gt; setConversion might exit early in case the conversion is not valid.
&gt; I would tend for setConversion to return a boolean.
&gt; Then, here we would exit early and probably remove destinationIter from
&gt; sourceIter-&gt;value.

We might return early because this conversion had lower priority than an previous one. In that case we should not remove the map entry. So instead I added a validity check first in NetworkAdClickAttribution::convert() and return early if it&apos;s false.

&gt; By exiting early, we would not have to check for earliestTimeToSend below.
&gt; Alternatively, setConversion could return an earliestTimeToSend directly.

Now we don&apos;t have to do this if the conversion is invalid.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:86
&gt; &gt; +    auto seconds = *earliestTimeToSend - WallTime::now();
&gt; 
&gt; setConversion is doing seconds + WallTime::now() and here we are doing
&gt; earliestTimeToSend - WallTime::now().
&gt; Could we simplify things here and have setConversion return an
&gt; Optional&lt;Seconds&gt;?

Good idea. Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:87
&gt; &gt; +    if (seconds &lt;= 0_s) {
&gt; 
&gt; Check probably not needed, if seconds is negative, the timer will probably
&gt; convert it to 0_s.

If you say so. :)

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:100
&gt; &gt; +    m_firePendingConversionRequestsTimer.stop();
&gt; 
&gt; Is it needed?

I had problems earlier with repeated triggers but it seems fine to remove this.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:102
&gt; &gt; +    if (!m_pingLoadFunction) {
&gt; 
&gt; Instead of doing this check, I would initialize m_pingLoadFunction to a
&gt; no-op function.

OK. I managed to do this by calling the completion handler with empty resource objects.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:140
&gt; &gt; +    loadParameters.mainDocumentURL = conversionReferrerURL;
&gt; 
&gt; WTFMove(conversionReferrerURL)

Will fix.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:155
&gt; &gt; +            if (attribution.conversionSent()) {
&gt; 
&gt; When attribution is marked as conversionSent, I believe we should remove it
&gt; from the map.
&gt; This should make this check unnecessary.

Yes, but as indicated in one of my FIXME comments, I will do the maintenance of the map in a follow-up patch.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:160
&gt; &gt; +            auto earliestTimeToSend = attribution.earliestTimeToSend();
&gt; 
&gt; Instead of having one big m_adClickAttributionMap map, it might be better to
&gt; have two maps:
&gt; - One for not yet converted ad click attributions
&gt; - One for converted ad click attributions that are pending being sent.
&gt; Here, we would only iterate over the second one, which would make
&gt; earliestTimeToSend always available.

This sounds like a good idea. I will try to implement it in my next patch where I do the map maintenance anyway (one of the FIXMEs).

&gt; Maybe that would call for two structures, one with an earliestTimeToSend and
&gt; one without.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/NetworkAdClickAttribution.cpp:175
&gt; &gt; +                nextTimeToFire = seconds;
&gt; 
&gt; Shouldn&apos;t nextTimeToFire be set to max value initially and then std::min for
&gt; each loop.

Good idea. I&apos;ll try to use Seconds::infinity() for this.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2523
&gt; &gt; +void NetworkProcess::setAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, const URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
&gt; 
&gt; Use one method for both?

As explained above, I want the ability to override the timer while not overriding the URL for manual testing and demos.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkSession.cpp:78
&gt; &gt; +    m_adClickAttribution-&gt;setPingLoadFunction([this](NetworkResourceLoadParameters&amp;&amp; loadParameters, CompletionHandler&lt;void(const WebCore::ResourceError&amp;, const WebCore::ResourceResponse&amp;)&gt;&amp;&amp; completionHandler) {
&gt; 
&gt; We probably need to ref m_networkProcess or better makeWeakPtr it.

OK. Will fix.

Thanks, Youenn!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526953</commentid>
    <comment_count>9</comment_count>
      <attachid>367360</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-12 17:33:29 -0700</bug_when>
    <thetext>Created attachment 367360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527308</commentid>
    <comment_count>10</comment_count>
      <attachid>367360</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-04-15 11:58:42 -0700</bug_when>
    <thetext>Comment on attachment 367360
Patch

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

&gt; Source/WebCore/loader/AdClickAttribution.cpp:83
&gt; +Optional&lt;Seconds&gt; AdClickAttribution::setConversion(Conversion&amp;&amp; conversion)

I personally find it confusing that a setter is returning a value. I also have no idea what it returns. This should be refactored to be clearer.

&gt; Source/WebCore/loader/AdClickAttribution.h:38
&gt; +enum class ConversionWasSent : bool { No, Yes };

Can this be moved to the AdClickAttribution::Conversion scope to avoid polluting the global scope? And likely renamed to &quot;WasSent&quot;

&gt; Source/WebCore/loader/AdClickAttribution.h:222
&gt; +        ConversionWasSent wasSent = ConversionWasSent::No;

I think we prefer curly bracket initialization.

&gt; Source/WebCore/loader/AdClickAttribution.h:245
&gt; +    WEBCORE_EXPORT void markConversionWasSent();

I&apos;d prefer markConversionAsSent

&gt; Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp:138
&gt; +

We should drop this extra line.

&gt; Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp:176
&gt; +        return completionHandler(&quot;No stored Ad Click Attribution data.&quot;);

_s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527312</commentid>
    <comment_count>11</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-15 12:04:01 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #10)
&gt; Comment on attachment 367360 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367360&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/AdClickAttribution.cpp:83
&gt; &gt; +Optional&lt;Seconds&gt; AdClickAttribution::setConversion(Conversion&amp;&amp; conversion)
&gt; 
&gt; I personally find it confusing that a setter is returning a value. I also
&gt; have no idea what it returns. This should be refactored to be clearer.

I agree it&apos;s a little weird. I&apos;ll make it not a setter but a more clear action.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:38
&gt; &gt; +enum class ConversionWasSent : bool { No, Yes };
&gt; 
&gt; Can this be moved to the AdClickAttribution::Conversion scope to avoid
&gt; polluting the global scope? And likely renamed to &quot;WasSent&quot;

I&apos;ll try to do that.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:222
&gt; &gt; +        ConversionWasSent wasSent = ConversionWasSent::No;
&gt; 
&gt; I think we prefer curly bracket initialization.

OK.

&gt; &gt; Source/WebCore/loader/AdClickAttribution.h:245
&gt; &gt; +    WEBCORE_EXPORT void markConversionWasSent();
&gt; 
&gt; I&apos;d prefer markConversionAsSent

I changed it to always say &quot;was&quot; but sure.

&gt; &gt; Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp:138
&gt; &gt; +
&gt; 
&gt; We should drop this extra line.

Yup.

&gt; &gt; Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp:176
&gt; &gt; +        return completionHandler(&quot;No stored Ad Click Attribution data.&quot;);
&gt; 
&gt; _s

OK.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527323</commentid>
    <comment_count>12</comment_count>
      <attachid>367440</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-15 12:31:52 -0700</bug_when>
    <thetext>Created attachment 367440
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527362</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 13:28:01 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 367440:

imported/w3c/web-platform-tests/xhr/event-upload-progress.htm bug 196736 (author: youennf@gmail.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527365</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 13:28:18 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 367440:

media/W3C/video/events/event_progress_manual.html bug 196929 (author: pilgrim@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527393</commentid>
    <comment_count>15</comment_count>
      <attachid>367440</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 14:10:10 -0700</bug_when>
    <thetext>Comment on attachment 367440
Patch for landing

Clearing flags on attachment: 367440

Committed r244288: &lt;https://trac.webkit.org/changeset/244288&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527394</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-15 14:10:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527411</commentid>
    <comment_count>17</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-15 14:31:04 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #8)
&gt; (In reply to youenn fablet from comment #5)
&gt; &gt; Comment on attachment 367271 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Instead of having one big m_adClickAttributionMap map, it might be better to
&gt; &gt; have two maps:
&gt; &gt; - One for not yet converted ad click attributions
&gt; &gt; - One for converted ad click attributions that are pending being sent.
&gt; &gt; Here, we would only iterate over the second one, which would make
&gt; &gt; earliestTimeToSend always available.
&gt; 
&gt; This sounds like a good idea. I will try to implement it in my next patch
&gt; where I do the map maintenance anyway (one of the FIXMEs).
&gt; 
&gt; &gt; Maybe that would call for two structures, one with an earliestTimeToSend and
&gt; &gt; one without.

This work is tracked in https://bugs.webkit.org/show_bug.cgi?id=196934.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527505</commentid>
    <comment_count>18</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-04-15 16:25:23 -0700</bug_when>
    <thetext>It appears that the test http/tests/adClickAttribution/send-attribution-conversion-request.html

added in https://trac.webkit.org/changeset/244288/webkit

is a flakey failure. History:
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2FadClickAttribution%2Fsend-attribution-conversion-request.html

Diff:
--- /Volumes/Data/slave/ios-simulator-12-release-tests-wk2/build/layout-test-results/http/tests/adClickAttribution/send-attribution-conversion-request-expected.txt
+++ /Volumes/Data/slave/ios-simulator-12-release-tests-wk2/build/layout-test-results/http/tests/adClickAttribution/send-attribution-conversion-request-actual.txt
@@ -5,10 +5,7 @@
 --------
 Frame: &apos;&lt;!--frame1--&gt;&apos;
 --------
-Conversion received.
-HTTP_HOST: 127.0.0.1:8000
-REQUEST_URI: /adClickAttribution/resources/conversionReport.php?conversion=12&amp;campaign=3
-No cookies in conversion request.
+Conversion not received - timed out.
 WebCore::AdClickAttribution 1
 Source: 127.0.0.1
 Destination: localhost
@@ -16,4 +13,4 @@
 Conversion data: 12
 Conversion priority: 0
 Conversion earliest time to send: Within 24-48 hours
-Conversion request sent: true
+Conversion request sent: false</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527508</commentid>
    <comment_count>19</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-15 16:30:27 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #18)
&gt; It appears that the test
&gt; http/tests/adClickAttribution/send-attribution-conversion-request.html
&gt; 
&gt; added in https://trac.webkit.org/changeset/244288/webkit
&gt; 
&gt; is a flakey failure. History:
&gt; https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.
&gt; html#showAllRuns=true&amp;tests=http%2Ftests%2FadClickAttribution%2Fsend-
&gt; attribution-conversion-request.html
&gt; 
&gt; Diff:
&gt; ---
&gt; /Volumes/Data/slave/ios-simulator-12-release-tests-wk2/build/layout-test-
&gt; results/http/tests/adClickAttribution/send-attribution-conversion-request-
&gt; expected.txt
&gt; +++
&gt; /Volumes/Data/slave/ios-simulator-12-release-tests-wk2/build/layout-test-
&gt; results/http/tests/adClickAttribution/send-attribution-conversion-request-
&gt; actual.txt
&gt; @@ -5,10 +5,7 @@
&gt;  --------
&gt;  Frame: &apos;&lt;!--frame1--&gt;&apos;
&gt;  --------
&gt; -Conversion received.
&gt; -HTTP_HOST: 127.0.0.1:8000
&gt; -REQUEST_URI:
&gt; /adClickAttribution/resources/conversionReport.php?conversion=12&amp;campaign=3
&gt; -No cookies in conversion request.
&gt; +Conversion not received - timed out.
&gt;  WebCore::AdClickAttribution 1
&gt;  Source: 127.0.0.1
&gt;  Destination: localhost
&gt; @@ -16,4 +13,4 @@
&gt;  Conversion data: 12
&gt;  Conversion priority: 0
&gt;  Conversion earliest time to send: Within 24-48 hours
&gt; -Conversion request sent: true
&gt; +Conversion request sent: false

:( It is probably the php file write. Maybe I can introduce a nonce or something. I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527603</commentid>
    <comment_count>20</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-15 20:44:45 -0700</bug_when>
    <thetext>Test gardening fix tracked in https://bugs.webkit.org/show_bug.cgi?id=196955.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527722</commentid>
    <comment_count>21</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-16 06:25:49 -0700</bug_when>
    <thetext>Seems like we still see flakiness. I wonder if the timeout I set is too short. Will try to extend it next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527769</commentid>
    <comment_count>22</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-16 10:46:57 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #21)
&gt; Seems like we still see flakiness. I wonder if the timeout I set is too
&gt; short. Will try to extend it next.

Changed timeout tracked in https://bugs.webkit.org/show_bug.cgi?id=196970.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527864</commentid>
    <comment_count>23</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-16 13:57:14 -0700</bug_when>
    <thetext>Further attempts at fixing the flakiness tracked in https://bugs.webkit.org/show_bug.cgi?id=196983. Note that this test is not flaky at all on my machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527963</commentid>
    <comment_count>24</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-16 18:20:14 -0700</bug_when>
    <thetext>I have a change to the test infrastructure that seems to address the flakiness locally. It&apos;s bundled in a patch that soon goes up for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527999</commentid>
    <comment_count>25</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-16 21:02:54 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #24)
&gt; I have a change to the test infrastructure that seems to address the
&gt; flakiness locally. It&apos;s bundled in a patch that soon goes up for review.

The fix mentioned above is tracked here and awaits review:
https://bugs.webkit.org/show_bug.cgi?id=196934</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528380</commentid>
    <comment_count>26</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-04-17 20:04:05 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #25)
&gt; (In reply to John Wilander from comment #24)
&gt; &gt; I have a change to the test infrastructure that seems to address the
&gt; &gt; flakiness locally. It&apos;s bundled in a patch that soon goes up for review.
&gt; 
&gt; The fix mentioned above is tracked here and awaits review:
&gt; https://bugs.webkit.org/show_bug.cgi?id=196934

Looks green after the above fix landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367271</attachid>
            <date>2019-04-11 17:53:16 -0700</date>
            <delta_ts>2019-04-12 17:33:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196838-20190411175316.patch</filename>
            <type>text/plain</type>
            <size>56434</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVmNjFiN2JmNmE0NGUz
ODJhNmE0ZTRmOWNjODQ1ZGZkZTU5YTA1YS4uMTNkNTFmNjcxM2E3Y2ZjNjFhOWQ5MGM2MjUwZDkz
MjA0MTBiNGUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA0LTExICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNlbmQgZGVsYXllZCBB
ZCBDbGljayBBdHRyaWJ1dGlvbiBjb252ZXJzaW9uIHJlcXVlc3RzIHRvIHRoZSBjbGljayBzb3Vy
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Njgz
OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2NTAxNTc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9hZENsaWNrQXR0
cmlidXRpb24vc2VuZC1hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXJlcXVlc3QuaHRtbAorCisgICAg
ICAgIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiBub3c6CisgICAgICAgIC0gU2V0cyBtX2Vh
cmxpZXN0VGltZVRvU2VuZCBjb3JyZWN0bHkgYmFzZWQgb24gV2FsbFRpbWU6Om5vdygpLgorICAg
ICAgICAtIEFsbG93cyBmb3IgYSB0ZXN0IG92ZXJyaWRlIG9mIHRoZSBiYXNlIFVSTCBmb3IgY29u
dmVyc2lvbnMuCisgICAgICAgIC0gSG9sZHMgc3RhdGUgZm9yIHdoZXRoZXIgb3Igbm90IGEgY29u
dmVyc2lvbiByZXF1ZXN0IGhhcyBiZWVuIHNlbnQuCisgICAgICAgIC0gT3V0cHV0cyBtX2Vhcmxp
ZXN0VGltZVRvU2VuZCBhbmQgbV9jb252ZXJzaW9uLT5oYXNCZWVuU2VudCBpbiB0b1N0cmluZygp
LgorCisgICAgICAgICogbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OnNldENvbnZlcnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjp1cmwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJzaW9uU2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpBZENsaWNrQXR0cmlidXRpb246OmNvbnZlcnNpb25TZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAqIGxv
YWRlci9BZENsaWNrQXR0cmlidXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRy
aWJ1dGlvbjo6Q29udmVyc2lvbjo6Q29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBZENs
aWNrQXR0cmlidXRpb246OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRp
b246OkNvbnZlcnNpb246OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNr
QXR0cmlidXRpb246OkNvbnZlcnNpb246OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vVGlt
ZXIuaDoKKyAgICAgICAgICAgIE5vdyBleHBvcnRzIG5leHRGaXJlSW50ZXJ2YWwuCisKIDIwMTkt
MDQtMTEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgQHBh
Z2UgbWFyZ2luIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOTFjMzk4Njg2ZDczOTZhMjUyMTZhYzI0MzQ0
NTViZTAyODdjYzY3Yy4uODI3NDU2MmFkZjRkNzE1YmYwZTZkYWYxMWM0ZThmNmJjNTEwZjQ3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxOS0wNC0xMSAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIGRlbGF5ZWQgQWQgQ2xpY2sgQXR0cmli
dXRpb24gY29udmVyc2lvbiByZXF1ZXN0cyB0byB0aGUgY2xpY2sgc291cmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4MzgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUwMTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2NoZWR1bGVzIGEgY29udmVyc2lvbiByZXF1ZXN0
IHdpdGggYXBwcm9wcmlhdGUgZGF0YSBnb2luZyB0byB0aGUKKyAgICAgICAgY2xpY2sgc291cmNl
IGFzIGEgcmVzdWx0IG9mIGFuIGFkIGNsaWNrIGNvbnZlcnNpb24uCisKKyAgICAgICAgV2ViS2l0
OjpOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uIG1ha2VzIHVzZSBvZiBleGlzdGluZyBXZWJLaXQ6
OlBpbmdMb2FkCisgICAgICAgIGluZnJhc3RydWN0dXJlIHRvIG1ha2UgdGhlIHJlcXVlc3QuIFRo
aXMgd2lsbCBwcm9iYWJseSBiZSByZXdvcmtlZCBpbnRvIGEKKyAgICAgICAgZGVkaWNhdGVkIGxv
YWQgY2xhc3MgZnVydGhlciBvbi4KKworICAgICAgICBOZXcgdGVzdCBpbmZyYXN0cnVjdHVyZSBh
bGxvd3MgZm9yIGFuIG92ZXJyaWRlIG9mIGJvdGggdGhlIGNvbnZlcnNpb24gVVJMCisgICAgICAg
IGFuZCB0aGUgMjQtNDggaG91ciB0aW1lci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQWRD
bGlja0F0dHJpYnV0aW9uOjpzZXRUaW1lcik6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5j
dGlvbiB0byBzdXBwb3J0IHRlc3Qgb3ZlcnJpZGUuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtB
ZENsaWNrQXR0cmlidXRpb246OmNvbnZlcnQpOgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBu
b3cgc2V0cyB0aGUgdGltZXIuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtBZENsaWNrQXR0cmli
dXRpb246OmZpcmVDb252ZXJzaW9uUmVxdWVzdCk6CisgICAgICAgICAgICBGaXJlIGFuIGluZGl2
aWR1YWwgcmVxdWVzdC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlv
bjo6ZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHMpOgorICAgICAgICAgICAgVGhpcyBpcyB0
aGUgdGltZXIgZnVuY3Rpb24gdGhhdCBpdGVyYXRlcyBvdmVyIGFsbCBwZW5kaW5nIGF0dHJpYnV0
aW9ucy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6Y2xlYXIp
OgorICAgICAgICAgICAgQ2xlYXJzIHRoZSB0d28gbmV3IHRlc3Qgc2V0dGluZ3MgbWVtYmVycy4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmg6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246Ok5ldHdvcmtBZENsaWNr
QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9u
OjpzZXRQaW5nTG9hZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0FkQ2xpY2tB
dHRyaWJ1dGlvbjo6c2V0UmVxdWVzdFRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246OnNldENvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJG
b3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNldEFkQ2xpY2tBdHRyaWJ1dGlv
blJlcXVlc3RUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvUGluZ0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQaW5nTG9hZDo6UGluZ0xvYWQp
OgorICAgICAgICAoV2ViS2l0OjptX2Jsb2JGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlBpbmdM
b2FkOjppbml0aWFsaXplKToKKyAgICAgICAgICAgIFRoZSBQaW5nTG9hZCBjb25zdHJ1Y3RvciBp
cyBub3cgc3BsaXQgaW4gdHdvIHRvIGFsbG93IGZvciBjb25zdHJ1Y3Rpb24KKyAgICAgICAgICAg
IHdpdGhvdXQgYSBXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIG9iamVjdC4g
VGhlIGJvZHkgb2YKKyAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciB3YXMgbW92ZWQgaW50byB0
aGUgbmV3IGluaXRpYWxpemUoKSBmdW5jdGlvbiB3aGljaCBpcworICAgICAgICAgICAgc2hhcmVk
IGJldHdlZW4gY29uc3RydWN0b3JzLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1BpbmdMb2Fk
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1Bh
Z2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNr
QXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpz
ZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAx
OS0wNC0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVuYWJs
ZSB0byBydW4gc3lzdGVtIFNhZmFyaSB3aXRoIHRydW5rIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcAppbmRleCA1ZDk3ZmFhYzdhMzRlN2ZhZTVm
NGIzYmQ0OTllNTQ2YjQ2OTBiOGJhLi42N2Q1ZmRhMDlmMzJmZDI2NmNlYzliOGY4YjEwMWIwNDE4
NTZkM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNw
cApAQCAtODgsMTggKzg4LDMwIEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJz
aW9uKENvbnZlcnNpb24mJiBjb252ZXJzaW9uKQogICAgIG1fY29udmVyc2lvbiA9IFdURk1vdmUo
Y29udmVyc2lvbik7CiAgICAgLy8gMjQtNDggaG91ciBkZWxheSBiZWZvcmUgc2VuZGluZy4gVGhp
cyBoZWxwcyBwcml2YWN5IHNpbmNlIHRoZSBjb252ZXJzaW9uIGFuZCB0aGUgYXR0cmlidXRpb24K
ICAgICAvLyByZXF1ZXN0cyBhcmUgZGV0YWNoZWQgYW5kIHRoZSB0aW1lIG9mIHRoZSBhdHRyaWJ1
dGlvbiBkb2VzIG5vdCByZXZlYWwgdGhlIHRpbWUgb2YgdGhlIGNvbnZlcnNpb24uCi0gICAgbV9l
YXJsaWVzdFRpbWVUb1NlbmQgPSBtX3RpbWVPZkFkQ2xpY2sgKyAyNF9oICsgU2Vjb25kcyhyYW5k
b21OdW1iZXIoKSAqICgyNF9oKS52YWx1ZSgpKTsKKyAgICBtX2VhcmxpZXN0VGltZVRvU2VuZCA9
IFdhbGxUaW1lOjpub3coKSArIDI0X2ggKyBTZWNvbmRzKHJhbmRvbU51bWJlcigpICogKDI0X2gp
LnZhbHVlKCkpOwogfQogCi1VUkwgQWRDbGlja0F0dHJpYnV0aW9uOjp1cmwoKSBjb25zdAorVVJM
IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6dXJsKE9wdGlvbmFsPFVSTD4gYmFzZVVSTEZvclRlc3Rpbmcp
IGNvbnN0CiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBVUkwoKTsKIAor
ICAgIGF1dG8gaG9zdCA9IG1fc291cmNlLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpOworCisg
ICAgaWYgKGJhc2VVUkxGb3JUZXN0aW5nICYmIChob3N0ID09ICJsb2NhbGhvc3QiIHx8IGhvc3Qg
PT0gIjEyNy4wLjAuMSIpKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIj9jb252ZXJzaW9uPSIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihtX2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiZjYW1wYWlnbj0iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9jYW1wYWln
bi5pZCk7CisgICAgICAgIGJhc2VVUkxGb3JUZXN0aW5nLT5zZXRRdWVyeShidWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICByZXR1cm4gKmJhc2VVUkxGb3JUZXN0aW5nOworICAgIH0KKwogICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHBz
Oi8vIik7Ci0gICAgYnVpbGRlci5hcHBlbmQobV9zb3VyY2UucmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLy53ZWxsLWtub3duL2FkLWNsaWNr
LWF0dHJpYnV0aW9uLyIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGhvc3QpOworICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbChhZENsaWNrQXR0cmlidXRpb25QYXRoUHJlZml4KTsKICAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihtX2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKICAgICBidWlsZGVyLmFw
cGVuZCgnLycpOwogICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1fY2FtcGFpZ24uaWQpOwpAQCAt
MTI4LDYgKzE0MCwxOCBAQCBVUkwgQWRDbGlja0F0dHJpYnV0aW9uOjpyZWZlcnJlcigpIGNvbnN0
CiAgICAgcmV0dXJuIFVSTCgpOwogfQogCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6c2V0Q29u
dmVyc2lvblNlbnQoKQoreworICAgIEFTU0VSVChtX2NvbnZlcnNpb24pOworICAgIGlmIChtX2Nv
bnZlcnNpb24pCisgICAgICAgIG1fY29udmVyc2lvbi0+aGFzQmVlblNlbnQgPSB0cnVlOworfQor
Citib29sIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Y29udmVyc2lvblNlbnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnZlcnNpb24gJiYgbV9jb252ZXJzaW9uLT5oYXNCZWVuU2VudDsKK30KKwog
U3RyaW5nIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKQEAgLTE0Miw2ICsxNjYsMTUgQEAgU3RyaW5nIEFkQ2xpY2tBdHRy
aWJ1dGlvbjo6dG9TdHJpbmcoKSBjb25zdAogICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlciht
X2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcbkNvbnZlcnNpb24gcHJpb3JpdHk6ICIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJl
cihtX2NvbnZlcnNpb24udmFsdWUoKS5wcmlvcml0eSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiXG5Db252ZXJzaW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7CisgICAgICAg
IGlmICghbV9lYXJsaWVzdFRpbWVUb1NlbmQpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIk5vdCBzZXQiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNlY29u
ZHNVbnRpbFNlbmQgPSAqbV9lYXJsaWVzdFRpbWVUb1NlbmQgLSBXYWxsVGltZTo6bm93KCk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoc2Vjb25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNl
Y29uZHNVbnRpbFNlbmQgPD0gNDhfaCkgPyAiV2l0aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRl
IDI0LTQ4IGhvdXJzIik7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcbkNvbnZlcnNpb24gcmVxdWVzdCBzZW50OiAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
KG1fY29udmVyc2lvbi0+aGFzQmVlblNlbnQgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG5ObyBjb252ZXJzaW9uIGRhdGEu
Iik7CiAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRD
bGlja0F0dHJpYnV0aW9uLmgKaW5kZXggODhkYjhjMjE2MDY0NzJhMjc3YWMxMjE5Y2ZmNWVmYzk2
MGNkMDA4MS4uYzA4ZmJkYTNiOTU5ZDM2MWEyZjk5MmRhNzk0OGE2ZTE3MmZkZjY0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uaApAQCAtMjAzLDkgKzIwMywx
MCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgQ29udmVyc2lvbiB7Ci0gICAg
ICAgIGV4cGxpY2l0IENvbnZlcnNpb24oQ29udmVyc2lvbkRhdGEgZGF0YSwgUHJpb3JpdHkgcHJp
b3JpdHkpCisgICAgICAgIGV4cGxpY2l0IENvbnZlcnNpb24oQ29udmVyc2lvbkRhdGEgZGF0YSwg
UHJpb3JpdHkgcHJpb3JpdHksIGJvb2wgaGFzQmVlblNlbnQgPSBmYWxzZSkKICAgICAgICAgICAg
IDogZGF0YSB7IGRhdGEgfQogICAgICAgICAgICAgLCBwcmlvcml0eSB7IHByaW9yaXR5LnZhbHVl
IH0KKyAgICAgICAgICAgICwgaGFzQmVlblNlbnQgeyBoYXNCZWVuU2VudCB9CiAgICAgICAgIHsK
ICAgICAgICAgfQogCkBAIC0yMTYsNiArMjE3LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgQ29udmVyc2lvbkRhdGEgZGF0YTsKICAgICAgICAgUHJpb3JpdHlWYWx1ZSBwcmlvcml0eTsK
KyAgICAgICAgYm9vbCBoYXNCZWVuU2VudDsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb252ZXJzaW9uPiBkZWNvZGUoRGVjb2RlciYpOwpA
QCAtMjMyLDExICsyMzQsMTMgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IE9wdGlvbmFsPENvbnZlcnNpb24+IHBhcnNlQ29udmVyc2lvblJlcXVlc3QoY29uc3QgVVJMJiBy
ZWRpcmVjdFVSTCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb252ZXJzaW9uKENvbnZl
cnNpb24mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVVJMIHVybCgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIFVSTCB1cmwoT3B0aW9uYWw8VVJMPiBiYXNlVVJMRm9yVGVzdGluZyA9IHsgfSkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVVJMIHJlZmVycmVyKCkgY29uc3Q7CiAgICAgY29u
c3QgU291cmNlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfTsKICAgICBjb25z
dCBEZXN0aW5hdGlvbiYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9OwogICAgIE9wdGlvbmFsPFdhbGxUaW1lPiBlYXJsaWVzdFRpbWVUb1NlbmQoKSBjb25zdCB7
IHJldHVybiBtX2VhcmxpZXN0VGltZVRvU2VuZDsgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldENvbnZlcnNpb25TZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb252ZXJzaW9u
U2VudCgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Q7CiAKQEAgLTMwNCw3ICszMDgsNyBAQCBPcHRpb25hbDxBZENsaWNrQXR0cmlidXRpb24+IEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb246OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgZGF0YSA8PCBwcmlvcml0
eTsKKyAgICBlbmNvZGVyIDw8IGRhdGEgPDwgcHJpb3JpdHkgPDwgaGFzQmVlblNlbnQ7CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0zMjAsNyArMzI0LDEyIEBAIE9wdGlvbmFsPEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbj4gQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJz
aW9uOjpkZWNvZGUoCiAgICAgaWYgKCFwcmlvcml0eSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAKLSAgICByZXR1cm4gQ29udmVyc2lvbiB7IFdURk1vdmUoKmRhdGEpLCBQcmlv
cml0eSB7IFdURk1vdmUoKnByaW9yaXR5KSB9IH07CisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzQmVl
blNlbnQ7CisgICAgZGVjb2RlciA+PiBoYXNCZWVuU2VudDsKKyAgICBpZiAoIWhhc0JlZW5TZW50
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIHJldHVybiBDb252ZXJz
aW9uIHsgV1RGTW92ZSgqZGF0YSksIFByaW9yaXR5IHsgV1RGTW92ZSgqcHJpb3JpdHkpIH0sICpo
YXNCZWVuU2VudCB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGltZXIuaAppbmRleCAxN2VmMDIxYzY3MmJmYjUzMzEwODI2ZjMxOWRkNjBiZTkxYTcwODAyLi5l
NzA4MTU2N2Y0M2RiOTQ3OThlZmE5NGVjNWYzYTQ2MmMyNTJiZDA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RpbWVyLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc3RvcCgpOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKIAotICAgIFNlY29uZHMgbmV4
dEZpcmVJbnRlcnZhbCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgbmV4dEZp
cmVJbnRlcnZhbCgpIGNvbnN0OwogICAgIFNlY29uZHMgbmV4dFVuYWxpZ25lZEZpcmVJbnRlcnZh
bCgpIGNvbnN0OwogICAgIFNlY29uZHMgcmVwZWF0SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBt
X3JlcGVhdEludGVydmFsOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwCmluZGV4IDM5MWMwOTg0YzAw
OTFmZDMyMmMxZDg0ZGMxYzU2ODE3YzliNDkxNmYuLmJiNDZlN2RjZmFkODQ3MzMxYmVlZjI0Njg2
YWQ3YTE4ZTVmYmExYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcApAQCAtMjYsMTcgKzI2LDIyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlv
bi5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9GZXRjaE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zvcm1EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLXVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47Ci11c2luZyBBZENsaWNrQXR0cmlidXRpb24gPSBXZWJDb3JlOjpBZENsaWNrQXR0
cmlidXRpb247Ci11c2luZyBTb3VyY2UgPSBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OlNv
dXJjZTsKLXVzaW5nIERlc3RpbmF0aW9uID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpE
ZXN0aW5hdGlvbjsKK3VzaW5nIFNvdXJjZSA9IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlOwor
dXNpbmcgRGVzdGluYXRpb24gPSBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uOwogdXNp
bmcgRGVzdGluYXRpb25NYXAgPSBIYXNoTWFwPERlc3RpbmF0aW9uLCBBZENsaWNrQXR0cmlidXRp
b24+OwotdXNpbmcgQ29udmVyc2lvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29u
dmVyc2lvbjsKK3VzaW5nIENvbnZlcnNpb24gPSBBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNp
b247CiAKIERlc3RpbmF0aW9uTWFwJiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uOjplbnN1cmVE
ZXN0aW5hdGlvbk1hcEZvclNvdXJjZShjb25zdCBTb3VyY2UmIHNvdXJjZSkKIHsKQEAgLTUxLDYg
KzU2LDE1IEBAIHZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6c3RvcmUoQWRDbGlja0F0
dHJpYnV0aW9uJiYgYWRDbGlja0F0dHJpYnV0aW9uKQogICAgIGRlc3RpbmF0aW9uTWFwRm9yU291
cmNlLmFkZChhZENsaWNrQXR0cmlidXRpb24uZGVzdGluYXRpb24oKSwgV1RGTW92ZShhZENsaWNr
QXR0cmlidXRpb24pKTsKIH0KIAordm9pZCBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uOjpzZXRU
aW1lcihTZWNvbmRzIHNlY29uZHMpCit7CisgICAgbV9maXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1
ZXN0c1RpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9pc1J1bm5pbmdUZXN0KQorICAgICAgICBtX2Zp
cmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAg
ZWxzZQorICAgICAgICBtX2ZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzVGltZXIuc3RhcnRP
bmVTaG90KHNlY29uZHMpOworfQorCiB2b2lkIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246OmNv
bnZlcnQoY29uc3QgU291cmNlJiBzb3VyY2UsIGNvbnN0IERlc3RpbmF0aW9uJiBkZXN0aW5hdGlv
biwgQ29udmVyc2lvbiYmIGNvbnZlcnNpb24pCiB7CiAgICAgYXV0byBzb3VyY2VJdGVyID0gbV9h
ZENsaWNrQXR0cmlidXRpb25NYXAuZmluZChzb3VyY2UpOwpAQCAtNjIsMTEgKzc2LDExNyBAQCB2
b2lkIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246OmNvbnZlcnQoY29uc3QgU291cmNlJiBzb3Vy
Y2UsIGNvbnN0IERlc3RpbmF0aW9uJgogICAgICAgICByZXR1cm47CiAKICAgICBkZXN0aW5hdGlv
bkl0ZXItPnZhbHVlLnNldENvbnZlcnNpb24oV1RGTW92ZShjb252ZXJzaW9uKSk7CisgICAgCisg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBkZXN0aW5hdGlvbkl0ZXItPnZhbHVlLmVhcmxp
ZXN0VGltZVRvU2VuZCgpOworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGF1dG8gc2Vjb25kcyA9ICplYXJsaWVzdFRpbWVUb1NlbmQgLSBXYWxsVGltZTo6bm93KCk7Cisg
ICAgaWYgKHNlY29uZHMgPD0gMF9zKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZmlyZVBlbmRpbmdDb252ZXJzaW9u
UmVxdWVzdHNUaW1lci5pc0FjdGl2ZSgpICYmIG1fZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVz
dHNUaW1lci5uZXh0RmlyZUludGVydmFsKCkgPCBzZWNvbmRzKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgc2V0VGltZXIoc2Vjb25kcyk7Cit9CisKK3ZvaWQgTmV0d29ya0FkQ2xpY2tBdHRy
aWJ1dGlvbjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0KGNvbnN0IEFkQ2xpY2tBdHRyaWJ1dGlvbiYg
YXR0cmlidXRpb24pCit7CisgICAgbV9maXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1ZXN0c1RpbWVy
LnN0b3AoKTsKKworICAgIGlmICghbV9waW5nTG9hZEZ1bmN0aW9uKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBjb252
ZXJzaW9uVVJMID0gbV9jb252ZXJzaW9uQmFzZVVSTEZvclRlc3RpbmcgPyBhdHRyaWJ1dGlvbi51
cmwoKm1fY29udmVyc2lvbkJhc2VVUkxGb3JUZXN0aW5nKSA6IGF0dHJpYnV0aW9uLnVybCgpOwor
ICAgIGlmIChjb252ZXJzaW9uVVJMLmlzRW1wdHkoKSB8fCAhY29udmVyc2lvblVSTC5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29udmVyc2lvblJlZmVycmVyVVJMID0g
YXR0cmlidXRpb24ucmVmZXJyZXIoKTsKKyAgICBpZiAoY29udmVyc2lvblJlZmVycmVyVVJMLmlz
RW1wdHkoKSB8fCAhY29udmVyc2lvblJlZmVycmVyVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgeyBjb252ZXJzaW9uVVJMIH07Cisg
ICAgCisgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm1heC1hZ2U9MCIp
OworICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKGNvbnZlcnNpb25SZWZlcnJlclVSTC5zdHJp
bmcoKSk7CisKKyAgICBGZXRjaE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLmNyZWRlbnRp
YWxzID0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6T21pdDsKKyAgICBvcHRpb25zLnJlZGly
ZWN0ID0gRmV0Y2hPcHRpb25zOjpSZWRpcmVjdDo6RXJyb3I7CisKKyAgICBzdGF0aWMgdWludDY0
X3QgaWRlbnRpZmllciA9IDA7CisgICAgCisgICAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllciA9IGlkZW50
aWZpZXIrKzsKKyAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNp
b25SZWZlcnJlclVSTCk7CisgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGlu
Z0FwcGxpY2F0aW9uUElEKCk7CisgICAgLy8gRklYTUU6IFN3aXRjaCB0byB0aGUgdXNlIG9mIGFu
IGVwaGVtZXJhbCwgc3RhdGVsZXNzIHNlc3Npb24uCisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lv
bklEID0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKKyAgICBsb2FkUGFyYW1l
dGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZTsKKyAgICBsb2FkUGFyYW1ldGVycy5vcHRpb25zID0gb3B0aW9uczsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gdHJ1
ZTsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRSZXN0cmljdEhUVFBSZXNwb25zZUFjY2VzcyA9
IGZhbHNlOworCisgICAgLy8gU2V0IHJlZmVycmVyIGFzIG1haW4gZG9jdW1lbnQgVVJMIHRvIGlu
Zm9ybSBjb250ZW50IGJsb2NrZXJzIGNvcnJlY3RseS4KKyAgICBsb2FkUGFyYW1ldGVycy5tYWlu
RG9jdW1lbnRVUkwgPSBjb252ZXJzaW9uUmVmZXJyZXJVUkw7CisKKyAgICBtX3BpbmdMb2FkRnVu
Y3Rpb24oV1RGTW92ZShsb2FkUGFyYW1ldGVycyksIFtdKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImIGVycm9yLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkg
eworICAgICAgICAvLyBGSVhNRTogQWRkIGxvZ2dpbmcgb2YgZXJyb3JzIHRvIGEgZGVkaWNhdGVk
IGNoYW5uZWwuCisgICAgICAgIFVOVVNFRF9QQVJBTShyZXNwb25zZSk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1
dGlvbjo6ZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHMoKQoreworICAgIGF1dG8gbmV4dFRp
bWVUb0ZpcmUgPSAwX3M7CisgICAgZm9yIChhdXRvJiBpbm5lck1hcCA6IG1fYWRDbGlja0F0dHJp
YnV0aW9uTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRpb24gOiBp
bm5lck1hcC52YWx1ZXMoKSkgeworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRpb24uY29udmVy
c2lvblNlbnQoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRv
IGVhcmxpZXN0VGltZVRvU2VuZCA9IGF0dHJpYnV0aW9uLmVhcmxpZXN0VGltZVRvU2VuZCgpOwor
ICAgICAgICAgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgICAg
ICAgICAgaWYgKCplYXJsaWVzdFRpbWVUb1NlbmQgPD0gbm93IHx8IG1faXNSdW5uaW5nVGVzdCkg
eworICAgICAgICAgICAgICAgIGZpcmVDb252ZXJzaW9uUmVxdWVzdChhdHRyaWJ1dGlvbik7ICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uLnNldENvbnZlcnNpb25T
ZW50KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF1dG8gc2Vjb25kcyA9ICplYXJsaWVzdFRpbWVUb1NlbmQgLSBub3c7CisgICAgICAg
ICAgICBpZiAobmV4dFRpbWVUb0ZpcmUgPiAwX3MpCisgICAgICAgICAgICAgICAgbmV4dFRpbWVU
b0ZpcmUgPSBzdGQ6Om1pbihuZXh0VGltZVRvRmlyZSwgc2Vjb25kcyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbmV4dFRpbWVUb0ZpcmUgPSBzZWNvbmRzOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG5leHRUaW1lVG9GaXJlID4gMF9zKQorICAgICAgICBzZXRUaW1l
cihuZXh0VGltZVRvRmlyZSk7CisKKyAgICAvLyBGSVhNRTogQWRkIGNsZWFuaW5nIG9mIHNlbnQg
Y29udmVyc2lvbnMuCiB9CiAKIHZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6Y2xlYXIo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1f
YWRDbGlja0F0dHJpYnV0aW9uTWFwLmNsZWFyKCk7CisgICAgbV9jb252ZXJzaW9uQmFzZVVSTEZv
clRlc3RpbmcgPSB7IH07CisgICAgbV9pc1J1bm5pbmdUZXN0ID0gZmFsc2U7CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaAppbmRleCAwOWEwZWQzZDU5ZDRiMTRk
ZmU5NDNlMGQyMDM1NmZlYzc3MzQxNGFiLi41YTllNTU5MzliYzQ2ODAyMWJhMjIwMjcwZTBjNmIy
ZjU0ZjhjNjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtBZENsaWNrQXR0cmlidXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaApAQCAtMjUsMTIgKzI1LDE5IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7Cit9CisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uIHsKQEAgLTQzLDE1
ICs1MCwyOSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRGVzdGluYXRpb25NYXAgPSBIYXNoTWFwPERl
c3RpbmF0aW9uLCBBZENsaWNrQXR0cmlidXRpb24+OwogICAgIHVzaW5nIENvbnZlcnNpb24gPSBX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb247CiAKKyAgICBOZXR3b3JrQWRD
bGlja0F0dHJpYnV0aW9uKCkKKyAgICAgICAgOiBtX2ZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVl
c3RzVGltZXIoKnRoaXMsICZOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uOjpmaXJlUGVuZGluZ0Nv
bnZlcnNpb25SZXF1ZXN0cykKKyAgICB7CisgICAgfQorCiAgICAgdm9pZCBzdG9yZShBZENsaWNr
QXR0cmlidXRpb24mJik7CiAgICAgdm9pZCBjb252ZXJ0KGNvbnN0IFNvdXJjZSYsIGNvbnN0IERl
c3RpbmF0aW9uJiwgQ29udmVyc2lvbiYmKTsKICAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCB0b1N0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyk+JiYpIGNvbnN0OwotCisgICAgdm9pZCBzZXRQaW5nTG9hZEZ1bmN0aW9uKEZ1bmN0
aW9uPHZvaWQoTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpPiYmKT4mJiBwaW5nTG9hZEZ1bmN0aW9uKSB7IG1fcGluZ0xvYWRGdW5j
dGlvbiA9IFdURk1vdmUocGluZ0xvYWRGdW5jdGlvbik7IH0KKyAgICB2b2lkIHNldFJlcXVlc3RU
aW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX2lzUnVubmluZ1Rlc3QgPSB2YWx1ZTsgfQor
ICAgIHZvaWQgc2V0Q29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB0ZXN0VVJMKSB7
IG1fY29udmVyc2lvbkJhc2VVUkxGb3JUZXN0aW5nID0gdGVzdFVSTDsgfQogcHJpdmF0ZToKICAg
ICBEZXN0aW5hdGlvbk1hcCYgZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2UoY29uc3QgU291
cmNlJik7CisgICAgdm9pZCBzZXRUaW1lcihTZWNvbmRzKTsKKyAgICB2b2lkIGZpcmVDb252ZXJz
aW9uUmVxdWVzdChjb25zdCBBZENsaWNrQXR0cmlidXRpb24mKTsKKyAgICB2b2lkIGZpcmVQZW5k
aW5nQ29udmVyc2lvblJlcXVlc3RzKCk7CiAKICAgICBIYXNoTWFwPFNvdXJjZSwgRGVzdGluYXRp
b25NYXA+IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwOworICAgIFdlYkNvcmU6OlRpbWVyIG1fZmly
ZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHNUaW1lcjsKKyAgICBGdW5jdGlvbjx2b2lkKE5ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KT4mJik+IG1fcGluZ0xvYWRGdW5jdGlvbjsKKyAgICBib29sIG1faXNSdW5uaW5nVGVzdCB7IGZh
bHNlIH07CisgICAgT3B0aW9uYWw8VVJMPiBtX2NvbnZlcnNpb25CYXNlVVJMRm9yVGVzdGluZzsK
IH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMGNjYmNlODM4YTAzOGFlNGM3YTlj
MGYwMzJiNDUyNzJhMzY4ODcyMi4uNTA2NjRhNGYyMzIwMGU1MDI4ZDBhYjk4MDZmNzkwZTcxMDBk
MGVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTI1MTIsNCArMjUxMiwyMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpbwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25J
RCkpCisgICAgICAgIHNlc3Npb24tPnNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZv
clRlc3RpbmcodmFsdWUpOworICAgIAorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3Zv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JU
ZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoYXV0byBz
ZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcodXJsKTsKKyAgICAKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA3YWU0OTQ2
OGE4ZDQ0YjEyOGIzZjQyNzk5MDkzYjRiZTUzODNlN2NkLi5mYTYwNTFmZWQ3ZGQ3MGExNDJiYmQ4
MTgwNzg3OWIxYzMyNmE3OWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCkBAIC0zMjcsNiArMzI3LDggQEAgcHVibGljOgogICAgIHZvaWQgc3Rv
cmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRy
aWJ1dGlvbiYmKTsKICAgICB2b2lkIGR1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7CiAgICAgdm9pZCBjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZvclRlc3Rp
bmcoUEFMOjpTZXNzaW9uSUQsIGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKIAogICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNz
YWdlcy5pbgppbmRleCBkYmYzY2E3YWUyZTViMDhmMDhkNjVhODhkYzU2MDBmY2FlNTNkNmJkLi4x
NDhmMDAyNDZjNTlkZDMzZTk1ODg2ODRhMjFlM2YxYjVhZGVjNDUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4K
QEAgLTE2OSw0ICsxNjksNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNl
aXZlciB7CiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0aW9uKQogICAg
IER1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoU3Ry
aW5nIGFkQ2xpY2tBdHRyaWJ1dGlvblN0YXRlKSBBc3luYwogICAgIENsZWFyQWRDbGlja0F0dHJp
YnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKKyAgICBTZXRBZENs
aWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgYm9vbCB2YWx1ZSkgLT4gKCkgQXN5bmMKKyAgICBTZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFVSTCB1cmwp
IC0+ICgpIEFzeW5jCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uY3BwCmluZGV4IDk4Y2QwNWJiNzU3MWY2NGIxZmZjMTZjYzNkYmE4YzU4M2Q2OWY1
Y2MuLmFmYTU0OThlNDQyYTNlYTVjYTE5ZTcyYmMwZjI0NzIzMGNiMTM4NjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRl
ICJQaW5nTG9hZC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCkBAIC03Myw2
ICs3NSwxMCBAQCBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3Mm
IG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZQogICAgICwgbV9uZXR3b3JrUHJvY2Vz
cyhuZXR3b3JrUHJvY2VzcykKICAgICAsIG1fYWRDbGlja0F0dHJpYnV0aW9uKG1ha2VVbmlxdWVS
ZWY8TmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbj4oKSkKIHsKKyAgICBtX2FkQ2xpY2tBdHRyaWJ1
dGlvbi0+c2V0UGluZ0xvYWRGdW5jdGlvbihbdGhpc10oTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmJiBsb2FkUGFyYW1ldGVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIC8vIFBpbmdMb2FkIG1hbmFnZXMgaXRzIG93
biBsaWZldGltZSwgZGVsZXRpbmcgaXRzZWxmIHdoZW4gaXRzIHB1cnBvc2UgaGFzIGJlZW4gZnVs
ZmlsbGVkLgorICAgICAgICBuZXcgUGluZ0xvYWQobV9uZXR3b3JrUHJvY2VzcywgV1RGTW92ZShs
b2FkUGFyYW1ldGVycyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKIH0K
IAogTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCkBAIC0xNTUsNCArMTYxLDE0IEBA
IHZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0CiAgICAgbV9hZENsaWNrQXR0cmlidXRpb24tPmNsZWFy
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAordm9pZCBOZXR3b3JrU2Vzc2lvbjo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKQor
eworICAgIG1fYWRDbGlja0F0dHJpYnV0aW9uLT5zZXRSZXF1ZXN0VGltZXJGb3JUZXN0aW5nKHZh
bHVlKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwpCit7CisgICAgbV9hZENsaWNrQXR0
cmlidXRpb24tPnNldENvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHVybCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vz
c2lvbi5oCmluZGV4IGE5ZWEyODc2NjEwZmM1YTliN2MyMjIwMzZiZTQwZjk5NmQ1MGJkMmUuLmQ3
MDBkZDA2Y2U4ZjczZDQwNDVjMjVlNGU0MjhhMDU0Y2Y0NzE1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVi
bGljOgogICAgIHZvaWQgY29udmVydEFkQ2xpY2tBdHRyaWJ1dGlvbihjb25zdCBXZWJDb3JlOjpB
ZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSYsIGNvbnN0IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1
dGlvbjo6RGVzdGluYXRpb24mLCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNp
b24mJik7CiAgICAgdm9pZCBkdW1wQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RyaW5nKT4mJik7CiAgICAgdm9pZCBjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9u
UmVxdWVzdFRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgTmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Npb25JRCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCmluZGV4IDI5Njg1ZTdl
NTlmNzMzZDI5OTM2YTUwMTM2ZmY5MjU3NjQ4YWQ4ZTYuLjQ5NTUzMDJkYTA3ODljMWU1ODNjMDhm
OTQ3M2M5MmNhMzk5ZTIzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUGluZ0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xv
YWQuY3BwCkBAIC00MCw2ICs0MCwxNSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKK1BpbmdMb2FkOjpQaW5nTG9hZChOZXR3b3JrUHJvY2VzcyYgbmV0
d29ya1Byb2Nlc3MsIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZUVycm9yJiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIDogbV9wYXJhbWV0ZXJzKFdU
Rk1vdmUocGFyYW1ldGVycykpCisgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKQorICAgICwgbV90aW1lb3V0VGltZXIoKnRoaXMsICZQaW5nTG9hZDo6
dGltZW91dFRpbWVyRmlyZWQpCisgICAgLCBtX25ldHdvcmtMb2FkQ2hlY2tlcihtYWtlVW5pcXVl
UmVmPE5ldHdvcmtMb2FkQ2hlY2tlcj4obmV0d29ya1Byb2Nlc3MsIEZldGNoT3B0aW9ucyB7IG1f
cGFyYW1ldGVycy5vcHRpb25zfSwgbV9wYXJhbWV0ZXJzLnNlc3Npb25JRCwgbV9wYXJhbWV0ZXJz
LndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdURk1vdmUobV9wYXJhbWV0ZXJz
Lm9yaWdpbmFsUmVxdWVzdEhlYWRlcnMpLCBVUkwgeyBtX3BhcmFtZXRlcnMucmVxdWVzdC51cmwo
KSB9LCBtX3BhcmFtZXRlcnMuc291cmNlT3JpZ2luLmNvcHlSZWYoKSwgbV9wYXJhbWV0ZXJzLnBy
ZWZsaWdodFBvbGljeSwgbV9wYXJhbWV0ZXJzLnJlcXVlc3QuaHR0cFJlZmVycmVyKCkpKQorewor
ICAgIGluaXRpYWxpemUobmV0d29ya1Byb2Nlc3MpOworfQorCiBQaW5nTG9hZDo6UGluZ0xvYWQo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb24sIE5ldHdvcmtQcm9jZXNz
JiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291cmNlRXJyb3ImLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgOiBtX3BhcmFtZXRl
cnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpCkBAIC01Miw2ICs2MSwxMSBAQCBQaW5nTG9hZDo6UGluZ0xv
YWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rpb24sIE5ldHdvcmtQcm9j
ZXNzJiBuZQogICAgICAgICAgICAgZmlsZS0+cHJlcGFyZUZvckZpbGVBY2Nlc3MoKTsKICAgICB9
CiAKKyAgICBpbml0aWFsaXplKG5ldHdvcmtQcm9jZXNzKTsKK30KKwordm9pZCBQaW5nTG9hZDo6
aW5pdGlhbGl6ZShOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MpCit7CiAgICAgbV9uZXR3
b3JrTG9hZENoZWNrZXItPmVuYWJsZUNvbnRlbnRFeHRlbnNpb25zQ2hlY2soKTsKICAgICBpZiAo
bV9wYXJhbWV0ZXJzLmNzcFJlc3BvbnNlSGVhZGVycykKICAgICAgICAgbV9uZXR3b3JrTG9hZENo
ZWNrZXItPnNldENTUFJlc3BvbnNlSGVhZGVycyhXVEZNb3ZlKG1fcGFyYW1ldGVycy5jc3BSZXNw
b25zZUhlYWRlcnMudmFsdWUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9QaW5nTG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9h
ZC5oCmluZGV4IGM0YTA5N2ViNDQ2MDgxOTQwYWRiMzdjZjUzODZkNGQ5MjFjZjUzZTAuLmZlYzVk
YjdhZWVlZjJmOWZmYzM1ZjgzZmUyODk2YjNmZjYzNjRjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1BpbmdMb2FkLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CkBAIC00MSw4ICs0MiwxMCBA
QCBjbGFzcyBOZXR3b3JrUHJvY2VzczsKIGNsYXNzIFBpbmdMb2FkIGZpbmFsIDogcHVibGljIENh
bk1ha2VXZWFrUHRyPFBpbmdMb2FkPiwgcHJpdmF0ZSBOZXR3b3JrRGF0YVRhc2tDbGllbnQgewog
cHVibGljOgogICAgIFBpbmdMb2FkKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgTmV0
d29ya1Byb2Nlc3MmLCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJik+JiYpOwotICAgIAorICAgIFBpbmdMb2FkKE5ldHdvcmtQcm9j
ZXNzJiwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpPiYmKTsKKwogcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoTmV0d29y
a1Byb2Nlc3MmKTsKICAgICB+UGluZ0xvYWQoKTsKIAogICAgIGNvbnN0IFVSTCYgY3VycmVudFVS
TCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXgg
NWY2NjVhNTIyYzViZGM3MzdmZWExNWVlZjVmZWNlZjFjYmYxNjMwYS4uZjVhMTgyMjAwZDQ4ZTg4
MzMwZWMxZTJiNDJlMTU5Y2VmZmU1NzgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCkBAIC0yNzM4LDMgKzI3MzgsMTggQEAgdm9pZCBXS1BhZ2VDbGVhckFkQ2xp
Y2tBdHRyaWJ1dGlvbihXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlQ2xlYXJBZENsaWNrQXR0cmlidXRp
b24KICAgICAgICAgY2FsbGJhY2soY2FsbGJhY2tDb250ZXh0KTsKICAgICB9KTsKIH0KKwordm9p
ZCBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKFdLUGFn
ZVJlZiBwYWdlLCBib29sIHZhbHVlLCBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0
VGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNrQ29udGV4dCkK
K3sKKyAgICB0b0ltcGwocGFnZSktPnNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZv
clRlc3RpbmcodmFsdWUsIFtjYWxsYmFja0NvbnRleHQsIGNhbGxiYWNrXSAoKSB7CisgICAgICAg
IGNhbGxiYWNrKGNhbGxiYWNrQ29udGV4dCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV0tQYWdlU2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIHVybFN0cmluZywgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVz
dFRpbWVyRm9yVGVzdGluZ0Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja0NvbnRleHQp
Cit7CisgICAgCisgICAgdG9JbXBsKHBhZ2UpLT5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJz
aW9uVVJMRm9yVGVzdGluZyhVUkwoVVJMKCksIHRvSW1wbCh1cmxTdHJpbmcpLT5zdHJpbmcoKSks
IFtjYWxsYmFja0NvbnRleHQsIGNhbGxiYWNrXSAoKSB7CisgICAgICAgIGNhbGxiYWNrKGNhbGxi
YWNrQ29udGV4dCk7CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2VQcml2YXRlLmgKaW5kZXggYjA3NmU3NWRhN2Y1YTU1ODk0OGE1NmU4ZGIxM2E5MjJk
ODg1MmQyYS4uN2I4ZjYyYWI0ZjMyNjQzN2JmMjlkNjVjMzAzYjU4ODIyZDQ1OWExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZVByaXZhdGUuaApAQCAtMTg3LDYg
KzE4NywxMCBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEdW1wQWRDbGlja0F0dHJpYnV0aW9uRnVu
Y3Rpb24pKFdLU3RyaW5nUmVmIGFkQ2xpY2tBdHRyaWJ1dAogV0tfRVhQT1JUIHZvaWQgV0tQYWdl
RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihXS1BhZ2VSZWYsIFdLUGFnZUR1bXBBZENsaWNrQXR0cmli
dXRpb25GdW5jdGlvbiwgdm9pZCogY2FsbGJhY2tDb250ZXh0KTsKIHR5cGVkZWYgdm9pZCAoKldL
UGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9uQ29udGV4
dCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihXS1BhZ2VS
ZWYsIFdLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24sIHZvaWQqIGNhbGxiYWNr
Q29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1
ZXN0VGltZXJGb3JUZXN0aW5nRnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CitXS19F
WFBPUlQgdm9pZCBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0
aW5nKFdLUGFnZVJlZiBwYWdlLCBib29sIHZhbHVlLCBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRp
b25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNhbGxiYWNr
Q29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1
ZXN0VGltZXJGb3JUZXN0aW5nRnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CitXS19F
WFBPUlQgdm9pZCBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdXJsU3RyaW5nLCBXS1BhZ2VTZXRBZENs
aWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ssIHZv
aWQqIGNhbGxiYWNrQ29udGV4dCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKaW5kZXggYzZiMDIwYzU2OTJmZTcyMzAxYTJhZmYyMjAzMWY5ODBhNTMwZjRjNy4uYWM5YmY4
ODI4ZmNkZTZkZGFkMmI5OTVjZDk1NGJjNmI1OGVmNjhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0x
MTc5LDYgKzExNzksMjUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXAKICAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
bihzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVz
dGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWNhblNlbmRNZXNz
YWdlKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZvclRlc3Rpbmcoc2Vzc2lvbklELCB2
YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghY2FuU2VuZE1lc3NhZ2Uo
KSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmcoc2Vzc2lvbklELCB1cmwp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2VuZFByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCkKIHsKICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91
bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGRhY2VlYWViYWI0NzM2ZGYxZDIyYTc4MWJjMTY5YjVi
ODg3ZTkwMjcuLmVkY2Y2MmE5MzRkZjFjYjVjNTcxODcwNDMzOGZlYzRiMTI2ZmQ1OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCkBAIC0xNzIsNiArMTcyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wQWRDbGlj
a0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlj
a0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgYm9vbCB2
YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBV
UkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdm9pZCBhZGRTZXNzaW9u
KFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
MzEyMWY5YjU0ZDkxNzhmYWU5ZjYwODM4MmQ3ZDZhMjM0MjA3YTBkZC4uZGQ3NWQ3NjhmM2Y3OWRl
ZDQ5MDg2OGRjYzY2MzE3YWY0ODVlMTk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCkBAIC04ODY2LDYgKzg4NjYsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW8KICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuY2xlYXJBZENsaWNrQXR0cmlidXRpb24o
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVz
dFRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNldEFk
Q2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgdmFsdWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwor
dm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHVybCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCiAjaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCiBXZWJQYWdlUHJveHk6OlNwZWVjaFN5bnRoZXNpc0RhdGEm
IFdlYlBhZ2VQcm94eTo6c3BlZWNoU3ludGhlc2lzRGF0YSgpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDNlODZhZjk1MWUwZWRiZWU3OWJmNzg4ZjgzOTg2NDFh
YWMxNzhhMmYuLjEzOTFmNjlhMzAzNGZmYmVkZTkwYTIzMzU1NDAyZjkwZGI5YWY1NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNTA0LDYgKzE1MDQsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CiAgICAgdm9pZCBjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0
dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogICAgIHZvaWQgc3BlZWNoU3ludGhlc2lz
Vm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiYmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKaW5kZXggMmE2MDQ2OTI3YTZmNmY5MWVlOGM2NGRlYWRmOTc3N2Y2YTJiMmNjNy4uMjI2ZTU4
Zjc0MzFiMTJjYTJiYzUzMGI5ZWVlOGRmNDJkZWZiZTExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjUyNiw3ICsyNTI2LDI2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvCiAgICAgCiAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBZENsaWNr
QXR0cmlidXRpb24oc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CisK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX25ldHdv
cmtQcm9jZXNzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2V0QWRDbGlja0F0dHJpYnV0
aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyhzZXNzaW9uSUQsIHZhbHVlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9Cit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmcoc2Vzc2lv
bklELCB1cmwsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6Y29tbWl0dGVkQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgKaW5kZXggM2JiMWY3NTg2ZDYzNGUzMmIwMjEwMjZiOWE0NDZhZmEz
MDBlN2M4Zi4uMjg4ZTI0MGZkMDJhZDJhMmU0M2ExMTZkNGQzZGIzNmQ1NDFkMWYzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC00OTUsNiArNDk1LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBkdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9y
VGVzdGluZyhQQUw6OlNlc3Npb25JRCwgYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JU
ZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogICAgIHZvaWQgY29tbWl0dGVkQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
bihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGZyb21E
b21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgdWludDY0
X3QgcGFnZUlEKTsKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhlY2ZlMTFjNmY1
OGRhM2NjNTJlMmIzYjQ4MDljMmMyZWUyOWE4YzAuLjQyNTdiMTY0MGE4MDZhMmM0M2U2Y2E0OTM2
MzFjNzRhZDhlZDQzYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxOS0wNC0xMSAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIGRlbGF5ZWQgQWQgQ2xpY2sgQXR0cmli
dXRpb24gY29udmVyc2lvbiByZXF1ZXN0cyB0byB0aGUgY2xpY2sgc291cmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4MzgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUwMTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0ZXN0IGluZnJhc3RydWN0dXJlIHRvIG92
ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGluCisgICAgICAgIFdlYktpdDo6TmV0d29ya0Fk
Q2xpY2tBdHRyaWJ1dGlvbi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvblJlcXVlc3RUaW1lckZv
clRlc3RpbmcpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE5LTA0LTEwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV0tOYXZpZ2F0
aW9uUmVzcG9uc2UuX2Rvd25sb2FkQXR0cmlidXRlIHNob3VsZCBiZSBuaWwgd2hlbiBubyBkb3du
bG9hZCBhdHRyaWJ1dGUgaXMgcHJlc2VudApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXgg
MDg3ZGE4NDY1MjU3ZmJlNjlkMzU4YmY1NzcwZWY3MjMyYzY5NTViMC4uNTFiOGYwZGYzMmZjNjk2
N2IwMWNmOTk3YzU4MDIzMDI3OTNjNGI0OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBA
IC0zODEsNCArMzgxLDYgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogCiAgICAgLy8gQWQgQ2xp
Y2sgQXR0cmlidXRpb24KICAgICB2b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CisgICAg
dm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JUZXN0aW5nKGJvb2xlYW4g
dmFsdWUpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRl
c3RpbmcoRE9NU3RyaW5nIHVybCk7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggMWM5YWYzMzE5NzBiZTRjNDY3
NWZiNjkzOWY5NDdkODlhMTFjMWU0Ni4uZjZmZDhlYmQ2ZWY0NzI5OTg0NjExOTI5MjYxZWM2ZjBi
YzFlYzg4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0yNzk1LDE0ICsyNzk1LDI4IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sIHNo
b3VsZERpc21pCiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiB7
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImR1bXBBZENsaWNrQXR0cmlidXRpb24iKSk7CisgICAgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBBZENsaWNrQXR0cmli
dXRpb24iKSk7CiAgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
ZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsK
KyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7CiAgICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CiAK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVz
dGluZyhib29sIHZhbHVlKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0
dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwor
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRBZENs
aWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmluZ1JlZiB1cmwpCit7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9u
VVJMRm9yVGVzdGluZyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXJsKSk7CisgICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKaW5kZXggODRhYjIx
OTMzMzY2ZDNkN2U2N2M5MTY4ZWQ4ZDA2NmMxNjE0MTYxNS4uYjE3MTE2MTQzNzlmNWRhNTI3YTEy
N2RkMTgzOTY2MTMzZjU1ODcxZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKQEAgLTQ5NCw2ICs0OTQsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQWQgQ2xpY2sgQXR0cmlidXRpb24uCiAgICAgdm9pZCBkdW1wQWRDbGlja0F0dHJpYnV0
aW9uKCk7CiAgICAgdm9pZCBjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOworICAgIHZvaWQgc2V0
QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKTsKKyAg
ICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKEpTU3Ry
aW5nUmVmKTsKIAogcHJpdmF0ZToKICAgICBUZXN0UnVubmVyKCk7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDczZGIzMDMxMDExZDQwMzVmNWMyM2Q1M2Uy
NjQyM2UzNDcxMTRlYTkuLmQ4OTY3NzRmOGU2MzViMWJjY2U5NmMzMmM4OTkxNmVlYTkwZjYzYjQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNTc0LDQg
KzM1NzQsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24o
KQogICAgIHJ1blVudGlsKGNhbGxiYWNrQ29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogfQogCit2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25SZXF1ZXN0VGltZXJGb3JU
ZXN0aW5nKGJvb2wgdmFsdWUpCit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uVm9pZENhbGxiYWNr
Q29udGV4dCBjYWxsYmFja0NvbnRleHQoKnRoaXMpOworICAgIFdLUGFnZVNldEFkQ2xpY2tBdHRy
aWJ1dGlvblJlcXVlc3RUaW1lckZvclRlc3RpbmcobV9tYWluV2ViVmlldy0+cGFnZSgpLCB2YWx1
ZSwgYWRDbGlja0F0dHJpYnV0aW9uVm9pZENhbGxiYWNrLCAmY2FsbGJhY2tDb250ZXh0KTsKKyAg
ICBydW5VbnRpbChjYWxsYmFja0NvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKK30KKwordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rp
bmcoV0tTdHJpbmdSZWYgdXJsU3RyaW5nKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvblZvaWRD
YWxsYmFja0NvbnRleHQgY2FsbGJhY2tDb250ZXh0KCp0aGlzKTsKKyAgICBXS1BhZ2VTZXRBZENs
aWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX21haW5XZWJWaWV3LT5wYWdl
KCksIHVybFN0cmluZywgYWRDbGlja0F0dHJpYnV0aW9uVm9pZENhbGxiYWNrLCAmY2FsbGJhY2tD
b250ZXh0KTsKKyAgICBydW5VbnRpbChjYWxsYmFja0NvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKaW5kZXggZGU5MTMwYzY4NDM0NWZkNWZmOThhNmFlZjA2NmU4NTFjZGNkYWFlNS4uZjYy
YzJhYzk4MGY2MzQ2ZjkyMGMwMDZiZTdiYzZjNTNmMjQzNDUzYiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMzA2LDYgKzMwNiw4IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyBkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCk7CiAgICAgdm9pZCBjbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbigpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRpbWVy
Rm9yVGVzdGluZyhib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKFdLU3RyaW5nUmVmKTsKIAogcHJpdmF0ZToKICAgICBXS1Jl
dGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9u
KGNvbnN0IFRlc3RPcHRpb25zJik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwCmluZGV4IDRjNzAzN2I3ZjU3NzVjNjY3ZGYzOGIwMzEzYzFkYWMwMDRhYmU1MjAuLmNl
OWQxMTVmZjVkMTFmYWY4MmEzNDNkOTg1NzBiNjZkMjMzODU2OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0xNjA2LDE2ICsxNjA2LDMwIEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01l
c3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiZHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbiIpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJEdW1wQWRDbGlja0F0dHJpYnV0aW9uIikpIHsKICAgICAgICAgZHVtcEFk
Q2xpY2tBdHRyaWJ1dGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJjbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKSB7CiAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25SZXF1
ZXN0VGltZXJGb3JUZXN0aW5nIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uUmVxdWVzdFRp
bWVyRm9yVGVzdGluZyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHVybFN0cmluZyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
Zyh1cmxTdHJpbmcpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmYw
NmM1OTMyMjViZjM4ODMxNmNjOGRjNTU2OTEwNDUyY2NmZGFjMy4uNzg2MWFhNWZlNzUxZjg1ZmNh
OTFmZjUwZGY5N2M4MzY5MjNmOWIxMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA0LTEx
ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNlbmQgZGVs
YXllZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBjb252ZXJzaW9uIHJlcXVlc3RzIHRvIHRoZSBjbGlj
ayBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NjgzOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2NTAxNTc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2FkQ2xpY2tB
dHRyaWJ1dGlvbi9yZXNvdXJjZXMvY29udmVyc2lvbkZpbGVQYXRoLnBocDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25S
ZXBvcnQucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlv
bi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVx
dWVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYWRDbGlja0F0
dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0Lmh0bWw6IEFkZGVk
LgorCiAyMDE5LTA0LTExICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIEBwYWdlIG1hcmdpbiBzdXBwb3J0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRocm91Z2gt
aW1hZ2UtcmVkaXJlY3Qtd2l0aC1wcmlvcml0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRocm91
Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aC1wcmlvcml0eS1leHBlY3RlZC50eHQKaW5kZXggYmMyNzFk
NDJiOWViNWZiNDNlMTRmYmY0ODQzN2QzZmQ1ZTYwZjU5ZS4uZGY0MTg1MzY5ZjVlMDI3YWM1MzQ2
YWU3MzdlM2Y2OTk5ODE3YjZkMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9h
ZENsaWNrQXR0cmlidXRpb24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJl
ZGlyZWN0LXdpdGgtcHJpb3JpdHktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1p
bWFnZS1yZWRpcmVjdC13aXRoLXByaW9yaXR5LWV4cGVjdGVkLnR4dApAQCAtNywzICs3LDUgQEAg
RGVzdGluYXRpb246IGxvY2FsaG9zdAogQ2FtcGFpZ24gSUQ6IDMKIENvbnZlcnNpb24gZGF0YTog
MTIKIENvbnZlcnNpb24gcHJpb3JpdHk6IDMKK0NvbnZlcnNpb24gZWFybGllc3QgdGltZSB0byBz
ZW5kOiBXaXRoaW4gMjQtNDggaG91cnMKK0NvbnZlcnNpb24gcmVxdWVzdCBzZW50OiBmYWxzZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vYXR0
cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0LXdpdGhvdXQtcHJpb3Jp
dHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRp
b24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0LXdpdGhvdXQt
cHJpb3JpdHktZXhwZWN0ZWQudHh0CmluZGV4IDRjODU4ZjAyNGQ2ODUyNWMxNjlhZWY5NTUxZWE2
OGFhMGI0OWQ3MTguLmQzYzJhYzZlYTczNzA3NDlhMTdlY2FhNGRkYmUxMzMxZGI5Yzg2NTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJp
YnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1pbWFnZS1yZWRpcmVjdC13aXRob3V0LXByaW9yaXR5
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1
dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aG91
dC1wcmlvcml0eS1leHBlY3RlZC50eHQKQEAgLTcsMyArNyw1IEBAIERlc3RpbmF0aW9uOiBsb2Nh
bGhvc3QKIENhbXBhaWduIElEOiAzCiBDb252ZXJzaW9uIGRhdGE6IDEyCiBDb252ZXJzaW9uIHBy
aW9yaXR5OiAwCitDb252ZXJzaW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogV2l0aGluIDI0LTQ4
IGhvdXJzCitDb252ZXJzaW9uIHJlcXVlc3Qgc2VudDogZmFsc2UKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9u
RmlsZVBhdGgucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24v
cmVzb3VyY2VzL2NvbnZlcnNpb25GaWxlUGF0aC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU1M2NmOTYwNjNi
ZTdjNmFmYWYwYTlkZjNhMThjMWFmYmNkYWIzMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uRmls
ZVBhdGgucGhwCkBAIC0wLDAgKzEsNiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAnLi4vLi4vcmVz
b3VyY2VzL3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKworJGNvbnZlcnNpb25GaWxlUGF0aCA9IHN5
c19nZXRfdGVtcF9kaXIoKSAuICIvYWRDbGlja0NvbnZlcnNpb24udHh0IjsKKworPz4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNl
cy9jb252ZXJzaW9uUmVwb3J0LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0
dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjNm
Nzg3ODZmY2YwYzhmYWQ2YmY2MTE4N2M2MTYxMjliZmI3NDlkCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZl
cnNpb25SZXBvcnQucGhwCkBAIC0wLDAgKzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29uY2UgJ2Nv
bnZlcnNpb25GaWxlUGF0aC5waHAnOworCiskY29udmVyc2lvbkZpbGUgPSBmb3BlbigkY29udmVy
c2lvbkZpbGVQYXRoIC4gIi50bXAiLCAndycpOworJGh0dHBIZWFkZXJzID0gJF9TRVJWRVI7Cisk
Y29va2llc0ZvdW5kID0gZmFsc2U7Citmb3JlYWNoICgkaHR0cEhlYWRlcnMgYXMgJG5hbWUgPT4g
JHZhbHVlKSB7CisgICAgaWYgKCRuYW1lID09PSAiSFRUUF9IT1NUIiB8fCAkbmFtZSA9PT0gIlJF
UVVFU1RfVVJJIikKKyAgICAgICAgZndyaXRlKCRjb252ZXJzaW9uRmlsZSwgIiRuYW1lOiAkdmFs
dWVcbiIpOworICAgIGVsc2UgaWYgKCRuYW1lID09PSAiSFRUUF9DT09LSUUiKSB7CisgICAgICAg
IGZ3cml0ZSgkY29udmVyc2lvbkZpbGUsICJDb29raWVzIGluIGNvbnZlcnNpb24gcmVxdWVzdDog
JHZhbHVlXG4iKTsKKyAgICAgICAgJGNvb2tpZXNGb3VuZCA9IHRydWU7CisgICAgfQorfQoraWYg
KCEkY29va2llc0ZvdW5kKSB7CisgICAgZndyaXRlKCRjb252ZXJzaW9uRmlsZSwgIk5vIGNvb2tp
ZXMgaW4gY29udmVyc2lvbiByZXF1ZXN0LlxuIik7Cit9CitmY2xvc2UoJGNvbnZlcnNpb25GaWxl
KTsKK3JlbmFtZSgkY29udmVyc2lvbkZpbGVQYXRoIC4gIi50bXAiLCAkY29udmVyc2lvbkZpbGVQ
YXRoKTsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRy
aWJ1dGlvbi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2dldENvbnZlcnNpb25EYXRhLnBo
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yOTk2ZmEwOTI2ODZiNmYxODEyMTUyYmUwM2JjNjQzZGZlOGE4NmM1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRp
b24vcmVzb3VyY2VzL2dldENvbnZlcnNpb25EYXRhLnBocApAQCAtMCwwICsxLDUwIEBACis8P3Bo
cAorcmVxdWlyZV9vbmNlICdjb252ZXJzaW9uRmlsZVBhdGgucGhwJzsKKworJG5vVGltZW91dCA9
IFRydWU7CiskdGltZW91dE1zZWNzID0gMDsKK2lmIChpc3NldCgkX0dFVFsndGltZW91dF9tcydd
KSkgeworICAgICRub1RpbWVvdXQgPSBGYWxzZTsKKyAgICAkdGltZW91dE1zZWNzID0gKGludCkg
JF9HRVRbJ3RpbWVvdXRfbXMnXTsKK30KKworJGNvbnZlcnNpb25GaWxlRm91bmQgPSBGYWxzZTsK
K3doaWxlICgkbm9UaW1lb3V0IHx8ICR0aW1lb3V0TXNlY3MgPiAwKSB7CisgICAgaWYgKGZpbGVf
ZXhpc3RzKCRjb252ZXJzaW9uRmlsZVBhdGgpKSB7CisgICAgICAgICRjb252ZXJzaW9uRmlsZUZv
dW5kID0gVHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICRzbGVlcE1zZWNzID0gMTA7
CisgICAgdXNsZWVwKCRzbGVlcE1zZWNzICogMTAwMCk7CisgICAgaWYgKCEkbm9UaW1lb3V0KSB7
CisgICAgICAgICR0aW1lb3V0TXNlY3MgLT0gJHNsZWVwTXNlY3M7CisgICAgfQorICAgIC8vIGZp
bGVfZXhpc3RzKCkgY2FjaGVzIHJlc3VsdHMsIHdlIHdhbnQgdG8gaW52YWxpZGF0ZSB0aGUgY2Fj
aGUuCisgICAgY2xlYXJzdGF0Y2FjaGUoKTsKK30KKworCitlY2hvICI8aHRtbD48Ym9keT5cbiI7
CisKK2lmICgkY29udmVyc2lvbkZpbGVGb3VuZCkgeworICAgIGVjaG8gIkNvbnZlcnNpb24gcmVj
ZWl2ZWQuIjsKKyAgICAkY29udmVyc2lvbkZpbGUgPSBmb3BlbigkY29udmVyc2lvbkZpbGVQYXRo
LCAncicpOworICAgIHdoaWxlICgkbGluZSA9IGZnZXRzKCRjb252ZXJzaW9uRmlsZSkpIHsKKyAg
ICAgICAgZWNobyAiPGJyPiI7CisgICAgICAgIGVjaG8gdHJpbSgkbGluZSk7CisgICAgfQorICAg
IGZjbG9zZSgkY29udmVyc2lvbkZpbGUpOworICAgIHVubGluaygkY29udmVyc2lvbkZpbGVQYXRo
KTsKK30gZWxzZSB7CisgICAgZWNobyAiQ29udmVyc2lvbiBub3QgcmVjZWl2ZWQgLSB0aW1lZCBv
dXQuIjsKK30KKworaWYgKGlzc2V0KCRfR0VUWydlbmRUZXN0J10pKSB7CisgICAgZWNobyAiPHNj
cmlwdD4iOworICAgIGVjaG8gImlmICh3aW5kb3cudGVzdFJ1bm5lcikiOworICAgIGVjaG8gIiAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsiOworICAgIGVjaG8gIjwvc2NyaXB0PiI7Cit9CisK
K2VjaG8gIjwvYm9keT48L2h0bWw+IjsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVx
dWVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1
dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVxdWVzdC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2VhOTAxMjFhMjlhNjMwMzk0ZGZmOTkyNmUyYjliYWU4MzMwZmFhYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Nl
bmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE5IEBACitUZXN0cyBzZW5kaW5nIG9mIGFkIGNsaWNrIGF0dHJpYnV0aW9uIHJlcXVlc3RzIGFm
dGVyIGEgY29udmVyc2lvbi4KKworCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZTEtLT4n
CistLS0tLS0tLQorQ29udmVyc2lvbiByZWNlaXZlZC4KK0hUVFBfSE9TVDogMTI3LjAuMC4xOjgw
MDAKK1JFUVVFU1RfVVJJOiAvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9u
UmVwb3J0LnBocD9jb252ZXJzaW9uPTEyJmNhbXBhaWduPTMKK05vIGNvb2tpZXMgaW4gY29udmVy
c2lvbiByZXF1ZXN0LgorV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uIDEKK1NvdXJjZTogMTI3
LjAuMC4xCitEZXN0aW5hdGlvbjogbG9jYWxob3N0CitDYW1wYWlnbiBJRDogMworQ29udmVyc2lv
biBkYXRhOiAxMgorQ29udmVyc2lvbiBwcmlvcml0eTogMAorQ29udmVyc2lvbiBlYXJsaWVzdCB0
aW1lIHRvIHNlbmQ6IFdpdGhpbiAyNC00OCBob3VycworQ29udmVyc2lvbiByZXF1ZXN0IHNlbnQ6
IHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0
aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNp
b24tcmVxdWVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MDAwMzNjZTY4NWRmZDRlZWUzZWRlZTAwYWNl
YzNkMWE0YjljMmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fk
Q2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVxdWVzdC5odG1s
CkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBpbnRlcm5hbDpBZENsaWNrQXR0cmlidXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNo
YXJzZXQ9IlVURi04Ij4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9
ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9bm8iPgorICAgIDxz
Y3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0VGltZW91dChydW5UZXN0LCAwKSI+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+VGVzdHMgc2VuZGluZyBvZiBhZCBjbGljayBhdHRyaWJ1dGlvbiByZXF1ZXN0
cyBhZnRlciBhIGNvbnZlcnNpb24uPC9kaXY+Cis8YSBpZD0idGFyZ2V0TGluayIgaHJlZj0iaHR0
cDovL2xvY2FsaG9zdDo4MDAwL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNv
bnZlcnNpb24tcmVxdWVzdC5odG1sP3N0ZXBUd28iIGFkY2FtcGFpZ25pZD0iMyIgYWRkZXN0aW5h
dGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIj5MaW5rPC9hPjxicj4KKzxkaXYgaWQ9Im91dHB1
dCI+PC9kaXY+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQ2hp
bGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZSh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRBZENsaWNrQXR0cmlidXRpb25S
ZXF1ZXN0VGltZXJGb3JUZXN0aW5nKHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKCJodHRwOi8vMTI3LjAuMC4xOjgw
MDAvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocCIpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGFjdGl2YXRlRWxlbWVudChlbGVtZW50SUQpIHsKKyAgICAg
ICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SUQpOworICAg
ICAgICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lk
dGggLyAyOworICAgICAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVu
dC5vZmZzZXRIZWlnaHQgLyAyOworICAgICAgICBVSUhlbHBlci5hY3RpdmF0ZUF0KGNlbnRlclgs
IGNlbnRlclkpLnRoZW4oCisgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJvdXRwdXQiKS5pbm5lclRleHQgPSAiRkFJTCBQcm9taXNlIHJlamVjdGVk
LiI7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXBwZW5kQ29udmVyc2lvbkRh
dGFJZnJhbWVBbmRGaW5pc2goKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbigpOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0YXJnZXRMaW5rIikpOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92
ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwaXhlbCIpKTsKKworICAgICAgICBsZXQg
aWZyYW1lRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAg
ICBpZnJhbWVFbGVtZW50LnNyYyA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvYWRDbGlja0F0dHJp
YnV0aW9uL3Jlc291cmNlcy9nZXRDb252ZXJzaW9uRGF0YS5waHA/ZW5kVGVzdD10cnVlJnRpbWVv
dXRfbXM9MjAwMCI7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lRWxl
bWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJj
aCA9PT0gIj9zdGVwVHdvIikgeworICAgICAgICAgICAgICAgIGxldCBpbWFnZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgICAgICAgICBpbWFnZUVsZW1l
bnQuc3JjID0gImh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291
cmNlcy9yZWRpcmVjdFRvQ29udmVyc2lvbi5waHA/Y29udmVyc2lvbkRhdGE9MTIiOworICAgICAg
ICAgICAgICAgIGltYWdlRWxlbWVudC5pZCA9ICJwaXhlbCI7CisgICAgICAgICAgICAgICAgaW1h
Z2VFbGVtZW50Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kQ29udmVyc2lvbkRhdGFJZnJhbWVBbmRGaW5pc2goKTsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1hZ2VFbGVtZW50KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWN0aXZhdGVFbGVtZW50KCJ0
YXJnZXRMaW5rIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0cHV0IikuaW5uZXJUZXh0ID0gIkZBSUwgTm8g
dGVzdFJ1bm5lci4iOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367360</attachid>
            <date>2019-04-12 17:33:29 -0700</date>
            <delta_ts>2019-04-15 12:31:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196838-20190412173328.patch</filename>
            <type>text/plain</type>
            <size>77455</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ2MzU3ZDM5N2MyY2Fi
ODg4YzU1ZWExYWViYzI3ZDQ4YTBiZDBlMi4uNDA3ZjUwYmVjZjMyNDViOWUwZDJlY2ZhMmJhMTRh
Y2I5MmQyNjgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA0LTEyICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNlbmQgZGVsYXllZCBB
ZCBDbGljayBBdHRyaWJ1dGlvbiBjb252ZXJzaW9uIHJlcXVlc3RzIHRvIHRoZSBjbGljayBzb3Vy
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Njgz
OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2NTAxNTc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9u
IG5vdzoKKyAgICAgICAgLSBTZXRzIG1fZWFybGllc3RUaW1lVG9TZW5kIGNvcnJlY3RseSBiYXNl
ZCBvbiBXYWxsVGltZTo6bm93KCkuCisgICAgICAgIC0gQWxsb3dzIGZvciBhIHRlc3Qgb3ZlcnJp
ZGUgb2YgdGhlIGJhc2UgVVJMIGZvciBjb252ZXJzaW9ucy4KKyAgICAgICAgLSBIb2xkcyBzdGF0
ZSBmb3Igd2hldGhlciBvciBub3QgYSBjb252ZXJzaW9uIHJlcXVlc3QgaGFzIGJlZW4gc2VudC4K
KyAgICAgICAgLSBPdXRwdXRzIG1fZWFybGllc3RUaW1lVG9TZW5kIGFuZCBtX2NvbnZlcnNpb24t
Pmhhc0JlZW5TZW50IGluIHRvU3RyaW5nKCkuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9h
ZENsaWNrQXR0cmlidXRpb24vc2VuZC1hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXJlcXVlc3QuaHRt
bAorCisgICAgICAgICogbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OnNldENvbnZlcnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjp1cmwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOjp1cmxGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6bWFya0NvbnZlcnNpb25XYXNTZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6d2FzQ29udmVyc2lvblNlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjp0b1N0cmluZyBjb25zdCk6Cisg
ICAgICAgICogbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOjpDb252ZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjo6ZGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5oOgorICAgICAgICAgICAgTm93IGV4cG9ydHMgbmV4
dEZpcmVJbnRlcnZhbC4KKwogMjAxOS0wNC0xMiAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXZWIgR1BVXSBQcmV2ZW50IG5hcnJvd2luZyBjb252ZXJzaW9u
cyBkdXJpbmcgTWV0YWwgZnVuY3Rpb24gY2FsbHMgb24gMzItYml0IHBsYXRmb3JtcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCA2NDE0NzNlNmRlM2FkMTI4YTgzNzcxYTVjOGNjNmViZGQ5N2FmMWE2Li43ZmVjZmUyNzEx
ZGI4MGEzMzVmZTJiNTkyNmUzMzBlMGU4MWQ2ZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBA
CisyMDE5LTA0LTEyICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIFNlbmQgZGVsYXllZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBjb252ZXJzaW9uIHJlcXVlc3Rz
IHRvIHRoZSBjbGljayBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjgzOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2NTAxNTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzY2hlZHVsZXMgYSBjb252ZXJzaW9uIHJlcXVlc3Qgd2l0aCBhcHByb3ByaWF0ZSBkYXRhIGdv
aW5nIHRvIHRoZQorICAgICAgICBjbGljayBzb3VyY2UgYXMgYSByZXN1bHQgb2YgYW4gYWQgY2xp
Y2sgY29udmVyc2lvbi4KKworICAgICAgICBXZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFn
ZXIgbWFrZXMgdXNlIG9mIGV4aXN0aW5nIFdlYktpdDo6UGluZ0xvYWQKKyAgICAgICAgaW5mcmFz
dHJ1Y3R1cmUgdG8gbWFrZSB0aGUgcmVxdWVzdC4gVGhpcyB3aWxsIHByb2JhYmx5IGJlIHJld29y
a2VkIGludG8gYQorICAgICAgICBkZWRpY2F0ZWQgbG9hZCBjbGFzcyBmdXJ0aGVyIG9uLgorCisg
ICAgICAgIE5ldyB0ZXN0IGluZnJhc3RydWN0dXJlIGFsbG93cyBmb3IgYW4gb3ZlcnJpZGUgb2Yg
Ym90aCB0aGUgY29udmVyc2lvbiBVUkwKKyAgICAgICAgYW5kIHRoZSAyNC00OCBob3VyIHRpbWVy
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpl
bnN1cmVEZXN0aW5hdGlvbk1hcEZvclNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tB
dHRyaWJ1dGlvbk1hbmFnZXI6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJp
YnV0aW9uTWFuYWdlcjo6c3RhcnRUaW1lcik6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5j
dGlvbiB0byBzdXBwb3J0IHRlc3Qgb3ZlcnJpZGUuCisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tB
dHRyaWJ1dGlvbk1hbmFnZXI6OmNvbnZlcnQpOgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBu
b3cgc2V0cyB0aGUgdGltZXIuCisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1h
bmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdCk6CisgICAgICAgICAgICBGaXJlIGFuIGluZGl2
aWR1YWwgcmVxdWVzdC4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdl
cjo6ZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHMpOgorICAgICAgICAgICAgVGhpcyBpcyB0
aGUgdGltZXIgZnVuY3Rpb24gdGhhdCBpdGVyYXRlcyBvdmVyIGFsbCBwZW5kaW5nIGF0dHJpYnV0
aW9ucy4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6Y2xlYXIp
OgorICAgICAgICAgICAgTm93IGNsZWFycyB0aGUgdHdvIG5ldyB0ZXN0IHNldHRpbmdzIG1lbWJl
cnMuCisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OnRvU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtB
ZENsaWNrQXR0cmlidXRpb24uaC4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9u
TWFuYWdlcjo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OkFk
Q2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OnNldFBpbmdMb2FkRnVuY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpzZXRPdmVycmlkZVRpbWVyRm9yVGVz
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OnNldENv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWRDbGlja0F0dHJpYnV0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6c3RvcmVBZENsaWNrQXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Q
aW5nTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBpbmdMb2FkOjpQaW5nTG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Om1fYmxvYkZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6UGluZ0xvYWQ6Omlu
aXRpYWxpemUpOgorICAgICAgICAgICAgVGhlIFBpbmdMb2FkIGNvbnN0cnVjdG9yIGlzIG5vdyBz
cGxpdCBpbiB0d28gdG8gYWxsb3cgZm9yIGNvbnN0cnVjdGlvbgorICAgICAgICAgICAgd2l0aG91
dCBhIFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mgb2JqZWN0LiBUaGUgYm9k
eSBvZgorICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIHdhcyBtb3ZlZCBpbnRvIHRoZSBuZXcg
aW5pdGlhbGl6ZSgpIGZ1bmN0aW9uIHdoaWNoIGlzCisgICAgICAgICAgICBzaGFyZWQgYmV0d2Vl
biBjb25zdHJ1Y3RvcnMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaDoKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgICAgIFJlbW92ZWQgTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYW5kIGFkZGVkCisgICAgICAgICAgICBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1
dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdLUGFnZVNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA0LTEyICBCcmlhbiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkRyaXZlcjogZml4IHR5cG8gaW4gRW50
ZXJGdWxsc2NyZWVuLmpzIGluIGVycm9yLWhhbmRsaW5nIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKaW5kZXggNWQ5N2ZhYWM3YTM0ZTdmYWU1ZjRi
M2JkNDk5ZTU0NmI0NjkwYjhiYS4uMTQ0ZjJmZDUxOGFiM2U4NDU4ZGMyNDFjZmJmYzE2MWZkNTFl
NTNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAK
QEAgLTgwLDE1ICs4MCwxNyBAQCBPcHRpb25hbDxBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNp
b24+IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6cGFyc2VDb252ZXJzaW9uUmVxdQogICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgQWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJzaW9uKENvbnZlcnNp
b24mJiBjb252ZXJzaW9uKQorT3B0aW9uYWw8U2Vjb25kcz4gQWRDbGlja0F0dHJpYnV0aW9uOjpz
ZXRDb252ZXJzaW9uKENvbnZlcnNpb24mJiBjb252ZXJzaW9uKQogewogICAgIGlmICghY29udmVy
c2lvbi5pc1ZhbGlkKCkgfHwgKG1fY29udmVyc2lvbiAmJiBtX2NvbnZlcnNpb24tPnByaW9yaXR5
ID4gY29udmVyc2lvbi5wcmlvcml0eSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIG1fY29udmVyc2lvbiA9IFdURk1vdmUoY29udmVyc2lvbik7CiAgICAgLy8g
MjQtNDggaG91ciBkZWxheSBiZWZvcmUgc2VuZGluZy4gVGhpcyBoZWxwcyBwcml2YWN5IHNpbmNl
IHRoZSBjb252ZXJzaW9uIGFuZCB0aGUgYXR0cmlidXRpb24KICAgICAvLyByZXF1ZXN0cyBhcmUg
ZGV0YWNoZWQgYW5kIHRoZSB0aW1lIG9mIHRoZSBhdHRyaWJ1dGlvbiBkb2VzIG5vdCByZXZlYWwg
dGhlIHRpbWUgb2YgdGhlIGNvbnZlcnNpb24uCi0gICAgbV9lYXJsaWVzdFRpbWVUb1NlbmQgPSBt
X3RpbWVPZkFkQ2xpY2sgKyAyNF9oICsgU2Vjb25kcyhyYW5kb21OdW1iZXIoKSAqICgyNF9oKS52
YWx1ZSgpKTsKKyAgICBhdXRvIHNlY29uZHMgPSAyNF9oICsgU2Vjb25kcyhyYW5kb21OdW1iZXIo
KSAqICgyNF9oKS52YWx1ZSgpKTsKKyAgICBtX2VhcmxpZXN0VGltZVRvU2VuZCA9IFdhbGxUaW1l
Ojpub3coKSArIHNlY29uZHM7CisgICAgcmV0dXJuIHNlY29uZHM7CiB9CiAKIFVSTCBBZENsaWNr
QXR0cmlidXRpb246OnVybCgpIGNvbnN0CkBAIC05OSw3ICsxMDEsNyBAQCBVUkwgQWRDbGlja0F0
dHJpYnV0aW9uOjp1cmwoKSBjb25zdAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHBzOi8vIik7CiAgICAgYnVpbGRlci5hcHBlbmQobV9z
b3VyY2UucmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLy53ZWxsLWtub3duL2FkLWNsaWNrLWF0dHJpYnV0aW9uLyIpOworICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbChhZENsaWNrQXR0cmlidXRpb25QYXRoUHJlZml4KTsKICAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihtX2NvbnZlcnNpb24udmFsdWUoKS5kYXRhKTsKICAgICBidWlsZGVyLmFw
cGVuZCgnLycpOwogICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1fY2FtcGFpZ24uaWQpOwpAQCAt
MTI4LDYgKzEzMCwzMiBAQCBVUkwgQWRDbGlja0F0dHJpYnV0aW9uOjpyZWZlcnJlcigpIGNvbnN0
CiAgICAgcmV0dXJuIFVSTCgpOwogfQogCitVUkwgQWRDbGlja0F0dHJpYnV0aW9uOjp1cmxGb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgYmFzZVVSTCkgY29uc3QKK3sKKyAgICBhdXRvIGhvc3QgPSBtX3Nv
dXJjZS5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKTsKKyAgICBpZiAoaG9zdCAhPSAibG9jYWxo
b3N0IiAmJiBob3N0ICE9ICIxMjcuMC4wLjEiKQorICAgICAgICByZXR1cm4gVVJMKCk7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI/Y29u
dmVyc2lvbj0iKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2NvbnZlcnNpb24udmFsdWUo
KS5kYXRhKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiZjYW1wYWlnbj0iKTsKKyAgICBi
dWlsZGVyLmFwcGVuZE51bWJlcihtX2NhbXBhaWduLmlkKTsKKyAgICByZXR1cm4gVVJMKGJhc2VV
UkwsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9uOjpt
YXJrQ29udmVyc2lvbldhc1NlbnQoKQoreworICAgIEFTU0VSVChtX2NvbnZlcnNpb24pOworICAg
IGlmIChtX2NvbnZlcnNpb24pCisgICAgICAgIG1fY29udmVyc2lvbi0+d2FzU2VudCA9IENvbnZl
cnNpb25XYXNTZW50OjpZZXM7Cit9CisKK2Jvb2wgQWRDbGlja0F0dHJpYnV0aW9uOjp3YXNDb252
ZXJzaW9uU2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udmVyc2lvbiAmJiBtX2NvbnZl
cnNpb24tPndhc1NlbnQgPT0gQ29udmVyc2lvbldhc1NlbnQ6OlllczsKK30KKwogU3RyaW5nIEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKQEAgLTE0Miw2ICsxNzAsMTUgQEAgU3RyaW5nIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
dG9TdHJpbmcoKSBjb25zdAogICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2NvbnZlcnNp
b24udmFsdWUoKS5kYXRhKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbkNvbnZl
cnNpb24gcHJpb3JpdHk6ICIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2NvbnZl
cnNpb24udmFsdWUoKS5wcmlvcml0eSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
XG5Db252ZXJzaW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7CisgICAgICAgIGlmICghbV9l
YXJsaWVzdFRpbWVUb1NlbmQpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk5v
dCBzZXQiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNl
bmQgPSAqbV9lYXJsaWVzdFRpbWVUb1NlbmQgLSBXYWxsVGltZTo6bm93KCk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgoc2Vjb25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRp
bFNlbmQgPD0gNDhfaCkgPyAiV2l0aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhv
dXJzIik7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbkNvbnZl
cnNpb24gcmVxdWVzdCBzZW50OiAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoKHdhc0NvbnZl
cnNpb25TZW50KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG5ObyBjb252ZXJzaW9uIGRhdGEuIik7CiAgICAgYnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlj
a0F0dHJpYnV0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9u
LmgKaW5kZXggODhkYjhjMjE2MDY0NzJhMjc3YWMxMjE5Y2ZmNWVmYzk2MGNkMDA4MS4uOTA3ZjRi
MDc2NDI4OGI5YTRlZTljMTEzZjRiNGJiOTdmODFmNWI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9BZENsaWNrQXR0cmlidXRpb24uaApAQCAtMzUsNiArMzUsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2VudW0gY2xhc3MgQ29udmVyc2lvbldhc1NlbnQgOiBib29sIHsgTm8sIFll
cyB9OworCiBjbGFzcyBBZENsaWNrQXR0cmlidXRpb24gewogcHVibGljOgogICAgIHVzaW5nIENh
bXBhaWduSWQgPSB1aW50MzJfdDsKQEAgLTIwMyw5ICsyMDUsMTAgQEAgcHVibGljOgogICAgIH07
CiAgICAgCiAgICAgc3RydWN0IENvbnZlcnNpb24gewotICAgICAgICBleHBsaWNpdCBDb252ZXJz
aW9uKENvbnZlcnNpb25EYXRhIGRhdGEsIFByaW9yaXR5IHByaW9yaXR5KQorICAgICAgICBDb252
ZXJzaW9uKENvbnZlcnNpb25EYXRhIGRhdGEsIFByaW9yaXR5IHByaW9yaXR5LCBDb252ZXJzaW9u
V2FzU2VudCB3YXNTZW50ID0gQ29udmVyc2lvbldhc1NlbnQ6Ok5vKQogICAgICAgICAgICAgOiBk
YXRhIHsgZGF0YSB9CiAgICAgICAgICAgICAsIHByaW9yaXR5IHsgcHJpb3JpdHkudmFsdWUgfQor
ICAgICAgICAgICAgLCB3YXNTZW50IHsgd2FzU2VudCB9CiAgICAgICAgIHsKICAgICAgICAgfQog
CkBAIC0yMTYsNiArMjE5LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgQ29udmVyc2lv
bkRhdGEgZGF0YTsKICAgICAgICAgUHJpb3JpdHlWYWx1ZSBwcmlvcml0eTsKKyAgICAgICAgQ29u
dmVyc2lvbldhc1NlbnQgd2FzU2VudCA9IENvbnZlcnNpb25XYXNTZW50OjpObzsKIAogICAgICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb252ZXJzaW9u
PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjMxLDEyICsyMzUsMTUgQEAgcHVibGljOgogICAgIH0K
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxDb252ZXJzaW9uPiBwYXJzZUNv
bnZlcnNpb25SZXF1ZXN0KGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0Q29udmVyc2lvbihDb252ZXJzaW9uJiYpOworICAgIFdFQkNPUkVfRVhQT1JU
IE9wdGlvbmFsPFNlY29uZHM+IHNldENvbnZlcnNpb24oQ29udmVyc2lvbiYmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBVUkwgdXJsKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIHVybEZv
clRlc3RpbmcoY29uc3QgVVJMJiBiYXNlVVJMRm9yVGVzdGluZykgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgVVJMIHJlZmVycmVyKCkgY29uc3Q7CiAgICAgY29uc3QgU291cmNlJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfTsKICAgICBjb25zdCBEZXN0aW5hdGlvbiYgZGVz
dGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9OwogICAgIE9wdGlvbmFs
PFdhbGxUaW1lPiBlYXJsaWVzdFRpbWVUb1NlbmQoKSBjb25zdCB7IHJldHVybiBtX2VhcmxpZXN0
VGltZVRvU2VuZDsgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtDb252ZXJzaW9uV2Fz
U2VudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgd2FzQ29udmVyc2lvblNlbnQoKSBjb25z
dDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCkBAIC0z
MDQsNyArMzExLDcgQEAgT3B0aW9uYWw8QWRDbGlja0F0dHJpYnV0aW9uPiBBZENsaWNrQXR0cmli
dXRpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
IHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IGRhdGEgPDwgcHJpb3JpdHk7CisgICAgZW5j
b2RlciA8PCBkYXRhIDw8IHByaW9yaXR5IDw8IHdhc1NlbnQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+CkBAIC0zMjAsNyArMzI3LDEyIEBAIE9wdGlvbmFsPEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6Q29udmVyc2lvbj4gQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOjpkZWNvZGUoCiAg
ICAgaWYgKCFwcmlvcml0eSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAg
ICByZXR1cm4gQ29udmVyc2lvbiB7IFdURk1vdmUoKmRhdGEpLCBQcmlvcml0eSB7IFdURk1vdmUo
KnByaW9yaXR5KSB9IH07CisgICAgT3B0aW9uYWw8Q29udmVyc2lvbldhc1NlbnQ+IHdhc1NlbnQ7
CisgICAgZGVjb2RlciA+PiB3YXNTZW50OworICAgIGlmICghd2FzU2VudCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICByZXR1cm4gQ29udmVyc2lvbiB7IFdURk1vdmUo
KmRhdGEpLCBQcmlvcml0eSB7ICpwcmlvcml0eSB9LCAqd2FzU2VudCB9OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaAppbmRleCAxN2VmMDIxYzY3MmJm
YjUzMzEwODI2ZjMxOWRkNjBiZTkxYTcwODAyLi5lNzA4MTU2N2Y0M2RiOTQ3OThlZmE5NGVjNWYz
YTQ2MmMyNTJiZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmgKQEAgLTU3LDcgKzU3LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RvcCgpOwogICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKIAotICAgIFNlY29uZHMgbmV4dEZpcmVJbnRlcnZhbCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgbmV4dEZpcmVJbnRlcnZhbCgpIGNvbnN0OwogICAgIFNl
Y29uZHMgbmV4dFVuYWxpZ25lZEZpcmVJbnRlcnZhbCgpIGNvbnN0OwogICAgIFNlY29uZHMgcmVw
ZWF0SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdEludGVydmFsOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlv
bk1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMjFlODQxMTJiYzA0NzFiOTM0NDZjNTE3NjhjYzhj
OThjYzA4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFkQ2xpY2tBdHRyaWJ1dGlvbk1h
bmFnZXIuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmV0Y2hPcHRpb25zLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Gb3JtRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25D
aGVja3MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCit1c2luZyBTb3VyY2UgPSBBZENsaWNrQXR0cmlidXRpb246OlNvdXJj
ZTsKK3VzaW5nIERlc3RpbmF0aW9uID0gQWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjsK
K3VzaW5nIERlc3RpbmF0aW9uTWFwID0gSGFzaE1hcDxEZXN0aW5hdGlvbiwgQWRDbGlja0F0dHJp
YnV0aW9uPjsKK3VzaW5nIENvbnZlcnNpb24gPSBBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNp
b247CisKK0Rlc3RpbmF0aW9uTWFwJiBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjplbnN1cmVE
ZXN0aW5hdGlvbk1hcEZvclNvdXJjZShjb25zdCBTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICByZXR1
cm4gbV9hZENsaWNrQXR0cmlidXRpb25NYXAuZW5zdXJlKHNvdXJjZSwgW10geworICAgICAgICBy
ZXR1cm4gRGVzdGluYXRpb25NYXAgeyB9OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKwor
dm9pZCBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpzdG9yZShBZENsaWNrQXR0cmlidXRpb24m
JiBhZENsaWNrQXR0cmlidXRpb24pCit7CisgICAgYXV0byYgZGVzdGluYXRpb25NYXBGb3JTb3Vy
Y2UgPSBlbnN1cmVEZXN0aW5hdGlvbk1hcEZvclNvdXJjZShhZENsaWNrQXR0cmlidXRpb24uc291
cmNlKCkpOworICAgIGRlc3RpbmF0aW9uTWFwRm9yU291cmNlLmFkZChhZENsaWNrQXR0cmlidXRp
b24uZGVzdGluYXRpb24oKSwgV1RGTW92ZShhZENsaWNrQXR0cmlidXRpb24pKTsKK30KKwordm9p
ZCBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpzdGFydFRpbWVyKFNlY29uZHMgc2Vjb25kcykK
K3sKKyAgICBtX2ZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzVGltZXIuc3RhcnRPbmVTaG90
KG1faXNSdW5uaW5nVGVzdCA/IDBfcyA6IHNlY29uZHMpOworfQorCit2b2lkIEFkQ2xpY2tBdHRy
aWJ1dGlvbk1hbmFnZXI6OmNvbnZlcnQoY29uc3QgU291cmNlJiBzb3VyY2UsIGNvbnN0IERlc3Rp
bmF0aW9uJiBkZXN0aW5hdGlvbiwgQ29udmVyc2lvbiYmIGNvbnZlcnNpb24pCit7CisgICAgaWYg
KCFjb252ZXJzaW9uLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzb3Vy
Y2VJdGVyID0gbV9hZENsaWNrQXR0cmlidXRpb25NYXAuZmluZChzb3VyY2UpOworICAgIGlmIChz
b3VyY2VJdGVyID09IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLmVuZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uSXRlciA9IHNvdXJjZUl0ZXItPnZhbHVlLmZpbmQo
ZGVzdGluYXRpb24pOworICAgIGlmIChkZXN0aW5hdGlvbkl0ZXIgPT0gc291cmNlSXRlci0+dmFs
dWUuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2Vjb25kc1VudGlsU2VuZCA9
IGRlc3RpbmF0aW9uSXRlci0+dmFsdWUuc2V0Q29udmVyc2lvbihXVEZNb3ZlKGNvbnZlcnNpb24p
KTsKKyAgICAKKyAgICBpZiAoIXNlY29uZHNVbnRpbFNlbmQpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAobV9maXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1ZXN0c1RpbWVyLmlzQWN0aXZl
KCkgJiYgbV9maXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1ZXN0c1RpbWVyLm5leHRGaXJlSW50ZXJ2
YWwoKSA8ICpzZWNvbmRzVW50aWxTZW5kKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3Rh
cnRUaW1lcigqc2Vjb25kc1VudGlsU2VuZCk7Cit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9u
TWFuYWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0KGNvbnN0IEFkQ2xpY2tBdHRyaWJ1dGlvbiYg
YXR0cmlidXRpb24pCit7CisgICAgYXV0byBjb252ZXJzaW9uVVJMID0gbV9jb252ZXJzaW9uQmFz
ZVVSTEZvclRlc3RpbmcgPyBhdHRyaWJ1dGlvbi51cmxGb3JUZXN0aW5nKCptX2NvbnZlcnNpb25C
YXNlVVJMRm9yVGVzdGluZykgOiBhdHRyaWJ1dGlvbi51cmwoKTsKKyAgICBpZiAoY29udmVyc2lv
blVSTC5pc0VtcHR5KCkgfHwgIWNvbnZlcnNpb25VUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGNvbnZlcnNpb25SZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVy
cmVyKCk7CisgICAgaWYgKGNvbnZlcnNpb25SZWZlcnJlclVSTC5pc0VtcHR5KCkgfHwgIWNvbnZl
cnNpb25SZWZlcnJlclVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0IHsgY29udmVyc2lvblVSTCB9OworICAgIAorICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZCgiUE9TVCJfcyk7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm1heC1hZ2U9MCJfcyk7CisgICAgcmVxdWVz
dC5zZXRIVFRQUmVmZXJyZXIoY29udmVyc2lvblJlZmVycmVyVVJMLnN0cmluZygpKTsKKworICAg
IEZldGNoT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuY3JlZGVudGlhbHMgPSBGZXRjaE9w
dGlvbnM6OkNyZWRlbnRpYWxzOjpPbWl0OworICAgIG9wdGlvbnMucmVkaXJlY3QgPSBGZXRjaE9w
dGlvbnM6OlJlZGlyZWN0OjpFcnJvcjsKKworICAgIHN0YXRpYyB1aW50NjRfdCBpZGVudGlmaWVy
ID0gMDsKKyAgICAKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1l
dGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyID0gKytpZGVudGlmaWVyOworICAg
IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLnNv
dXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoY29udmVyc2lvblJlZmVycmVyVVJM
KTsKKyAgICBsb2FkUGFyYW1ldGVycy5wYXJlbnRQSUQgPSBwcmVzZW50aW5nQXBwbGljYXRpb25Q
SUQoKTsKKyAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHRoZSB1c2Ugb2YgYW4gZXBoZW1lcmFsLCBz
dGF0ZWxlc3Mgc2Vzc2lvbi4KKyAgICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOworICAg
IGxvYWRQYXJhbWV0ZXJzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIGxvYWRQYXJhbWV0ZXJzLnNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSB0cnVlOworICAgIGxvYWRQ
YXJhbWV0ZXJzLnNob3VsZFJlc3RyaWN0SFRUUFJlc3BvbnNlQWNjZXNzID0gZmFsc2U7CisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIGxvYWRQYXJhbWV0ZXJzLm1haW5Eb2N1
bWVudFVSTCA9IFdURk1vdmUoY29udmVyc2lvblJlZmVycmVyVVJMKTsKKyNlbmRpZgorCisgICAg
bV9waW5nTG9hZEZ1bmN0aW9uKFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBbXShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBsb2dnaW5nIG9mIGVycm9ycyB0
byBhIGRlZGljYXRlZCBjaGFubmVsLgorICAgICAgICBVTlVTRURfUEFSQU0ocmVzcG9uc2UpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIH0pOworfQorCit2b2lkIEFkQ2xpY2tB
dHRyaWJ1dGlvbk1hbmFnZXI6OmZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzKCkKK3sKKyAg
ICBhdXRvIG5leHRUaW1lVG9GaXJlID0gU2Vjb25kczo6aW5maW5pdHkoKTsKKyAgICBmb3IgKGF1
dG8mIGlubmVyTWFwIDogbV9hZENsaWNrQXR0cmlidXRpb25NYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBhdHRyaWJ1dGlvbiA6IGlubmVyTWFwLnZhbHVlcygpKSB7CisKKyAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGlvbi53YXNDb252ZXJzaW9uU2VudCgpKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZCA9IGF0dHJp
YnV0aW9uLmVhcmxpZXN0VGltZVRvU2VuZCgpOworICAgICAgICAgICAgaWYgKCFlYXJsaWVzdFRp
bWVUb1NlbmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8g
bm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgICAgICAgICAgaWYgKCplYXJsaWVzdFRpbWVUb1Nl
bmQgPD0gbm93IHx8IG1faXNSdW5uaW5nVGVzdCkgeworICAgICAgICAgICAgICAgIGZpcmVDb252
ZXJzaW9uUmVxdWVzdChhdHRyaWJ1dGlvbik7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGF0dHJpYnV0aW9uLm1hcmtDb252ZXJzaW9uV2FzU2VudCgpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHNlY29uZHMgPSAq
ZWFybGllc3RUaW1lVG9TZW5kIC0gbm93OworICAgICAgICAgICAgbmV4dFRpbWVUb0ZpcmUgPSBz
dGQ6Om1pbihuZXh0VGltZVRvRmlyZSwgc2Vjb25kcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobmV4dFRpbWVUb0ZpcmUgPCBTZWNvbmRzOjppbmZpbml0eSgpKQorICAgICAgICBzdGFy
dFRpbWVyKG5leHRUaW1lVG9GaXJlKTsKKworICAgIC8vIEZJWE1FOiBBZGQgY2xlYW5pbmcgb2Yg
c2VudCBjb252ZXJzaW9ucy4KK30KKwordm9pZCBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgbV9hZENsaWNrQXR0cmlidXRpb25NYXAuY2xlYXIoKTsKKyAgICBtX2NvbnZlcnNpb25CYXNl
VVJMRm9yVGVzdGluZyA9IHsgfTsKKyAgICBtX2lzUnVubmluZ1Rlc3QgPSBmYWxzZTsKKyAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6
OnRvU3RyaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgY29uc3QKK3sKKyAgICBpZiAobV9hZENsaWNrQXR0cmlidXRpb25NYXAuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoIk5vIHN0b3JlZCBBZCBDbGljayBB
dHRyaWJ1dGlvbiBkYXRhLiIpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZv
ciAoYXV0byYgaW5uZXJNYXAgOiBtX2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC52YWx1ZXMoKSkgewor
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGlvbk51bWJlciA9IDE7CisgICAgICAgIGZvciAoYXV0
byYgYXR0cmlidXRpb24gOiBpbm5lck1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gIik7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhdHRyaWJ1dGlvbk51bWJlcisrKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0
cmlidXRpb24udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0aW9u
SGFuZGxlcihidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0
aW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmli
dXRpb25NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q5OGZiNWUyYmQ2NDUwY2JmYmRhOTI1ODJmNjlm
NmFmYzdiNmZiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUVycm9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2Vy
IHsKK3B1YmxpYzoKKworICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47CisgICAgdXNpbmcgQWRDbGlja0F0dHJpYnV0aW9uID0gV2ViQ29yZTo6
QWRDbGlja0F0dHJpYnV0aW9uOworICAgIHVzaW5nIFNvdXJjZSA9IFdlYkNvcmU6OkFkQ2xpY2tB
dHRyaWJ1dGlvbjo6U291cmNlOworICAgIHVzaW5nIERlc3RpbmF0aW9uID0gV2ViQ29yZTo6QWRD
bGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjsKKyAgICB1c2luZyBEZXN0aW5hdGlvbk1hcCA9
IEhhc2hNYXA8RGVzdGluYXRpb24sIEFkQ2xpY2tBdHRyaWJ1dGlvbj47CisgICAgdXNpbmcgQ29u
dmVyc2lvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjsKKworICAg
IEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIoKQorICAgICAgICA6IG1fZmlyZVBlbmRpbmdDb252
ZXJzaW9uUmVxdWVzdHNUaW1lcigqdGhpcywgJkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OmZp
cmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzKQorICAgICwgbV9waW5nTG9hZEZ1bmN0aW9uKFtd
KE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYgcGFyYW1zLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHBhcmFtcyk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OlJlc291cmNl
RXJyb3IoKSwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICB9KQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlKEFkQ2xpY2tBdHRyaWJ1dGlvbiYmKTsKKyAgICB2b2lkIGNv
bnZlcnQoY29uc3QgU291cmNlJiwgY29uc3QgRGVzdGluYXRpb24mLCBDb252ZXJzaW9uJiYpOwor
ICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHRv
U3RyaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJikgY29uc3Q7CisgICAgdm9p
ZCBzZXRQaW5nTG9hZEZ1bmN0aW9uKEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpPiYmKT4mJiBwaW5nTG9h
ZEZ1bmN0aW9uKSB7IG1fcGluZ0xvYWRGdW5jdGlvbiA9IFdURk1vdmUocGluZ0xvYWRGdW5jdGlv
bik7IH0KKyAgICB2b2lkIHNldE92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsg
bV9pc1J1bm5pbmdUZXN0ID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldENvbnZlcnNpb25VUkxGb3JU
ZXN0aW5nKFVSTCYmIHRlc3RVUkwpIHsgbV9jb252ZXJzaW9uQmFzZVVSTEZvclRlc3RpbmcgPSBX
VEZNb3ZlKHRlc3RVUkwpOyB9CisKK3ByaXZhdGU6CisgICAgRGVzdGluYXRpb25NYXAmIGVuc3Vy
ZURlc3RpbmF0aW9uTWFwRm9yU291cmNlKGNvbnN0IFNvdXJjZSYpOworICAgIHZvaWQgc3RhcnRU
aW1lcihTZWNvbmRzKTsKKyAgICB2b2lkIGZpcmVDb252ZXJzaW9uUmVxdWVzdChjb25zdCBBZENs
aWNrQXR0cmlidXRpb24mKTsKKyAgICB2b2lkIGZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3Rz
KCk7CisKKyAgICBIYXNoTWFwPFNvdXJjZSwgRGVzdGluYXRpb25NYXA+IG1fYWRDbGlja0F0dHJp
YnV0aW9uTWFwOworICAgIFdlYkNvcmU6OlRpbWVyIG1fZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVx
dWVzdHNUaW1lcjsKKyAgICBGdW5jdGlvbjx2b2lkKE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKT4mJik+IG1fcGluZ0xvYWRGdW5j
dGlvbjsKKyAgICBib29sIG1faXNSdW5uaW5nVGVzdCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8
VVJMPiBtX2NvbnZlcnNpb25CYXNlVVJMRm9yVGVzdGluZzsKK307CisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzOTFjMDk4NGMwMDkxZmQzMjJjMWQ4NGRjMWM1NjgxN2M5YjQ5MTZmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi11c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwotdXNpbmcgQWRDbGlja0F0dHJpYnV0aW9uID0gV2ViQ29yZTo6QWRDbGlja0F0
dHJpYnV0aW9uOwotdXNpbmcgU291cmNlID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpT
b3VyY2U7Ci11c2luZyBEZXN0aW5hdGlvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6
RGVzdGluYXRpb247Ci11c2luZyBEZXN0aW5hdGlvbk1hcCA9IEhhc2hNYXA8RGVzdGluYXRpb24s
IEFkQ2xpY2tBdHRyaWJ1dGlvbj47Ci11c2luZyBDb252ZXJzaW9uID0gV2ViQ29yZTo6QWRDbGlj
a0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOwotCi1EZXN0aW5hdGlvbk1hcCYgTmV0d29ya0FkQ2xp
Y2tBdHRyaWJ1dGlvbjo6ZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2UoY29uc3QgU291cmNl
JiBzb3VyY2UpCi17Ci0gICAgcmV0dXJuIG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLmVuc3VyZShz
b3VyY2UsIFtdIHsKLSAgICAgICAgcmV0dXJuIERlc3RpbmF0aW9uTWFwIHsgfTsKLSAgICB9KS5p
dGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6c3Rv
cmUoQWRDbGlja0F0dHJpYnV0aW9uJiYgYWRDbGlja0F0dHJpYnV0aW9uKQotewotICAgIGF1dG8m
IGRlc3RpbmF0aW9uTWFwRm9yU291cmNlID0gZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2Uo
YWRDbGlja0F0dHJpYnV0aW9uLnNvdXJjZSgpKTsKLSAgICBkZXN0aW5hdGlvbk1hcEZvclNvdXJj
ZS5hZGQoYWRDbGlja0F0dHJpYnV0aW9uLmRlc3RpbmF0aW9uKCksIFdURk1vdmUoYWRDbGlja0F0
dHJpYnV0aW9uKSk7Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6Y29udmVy
dChjb25zdCBTb3VyY2UmIHNvdXJjZSwgY29uc3QgRGVzdGluYXRpb24mIGRlc3RpbmF0aW9uLCBD
b252ZXJzaW9uJiYgY29udmVyc2lvbikKLXsKLSAgICBhdXRvIHNvdXJjZUl0ZXIgPSBtX2FkQ2xp
Y2tBdHRyaWJ1dGlvbk1hcC5maW5kKHNvdXJjZSk7Ci0gICAgaWYgKHNvdXJjZUl0ZXIgPT0gbV9h
ZENsaWNrQXR0cmlidXRpb25NYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
ZGVzdGluYXRpb25JdGVyID0gc291cmNlSXRlci0+dmFsdWUuZmluZChkZXN0aW5hdGlvbik7Ci0g
ICAgaWYgKGRlc3RpbmF0aW9uSXRlciA9PSBzb3VyY2VJdGVyLT52YWx1ZS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZGVzdGluYXRpb25JdGVyLT52YWx1ZS5zZXRDb252ZXJzaW9uKFdU
Rk1vdmUoY29udmVyc2lvbikpOwotfQotCi12b2lkIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246
OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBtX2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC5jbGVhcigpOwotICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAot
ewotICAgIGlmIChtX2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcigiTm8gc3RvcmVkIEFkIENsaWNrIEF0dHJpYnV0aW9uIGRh
dGEuIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvJiBpbm5l
ck1hcCA6IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0aW9uTnVtYmVyID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGlv
biA6IGlubmVyTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIldlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiAiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTnVtYmVyKGF0dHJpYnV0aW9uTnVtYmVyKyspOwotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGlvbi50b1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhMGVkM2Q1OWQ0YjE0ZGZlOTQzZTBk
MjAzNTZmZWM3NzM0MTRhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmli
dXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPFdlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgotI2luY2x1ZGUgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrQWRD
bGlja0F0dHJpYnV0aW9uIHsKLXB1YmxpYzoKLQotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgQWRDbGlja0F0dHJpYnV0
aW9uID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOwotICAgIHVzaW5nIFNvdXJjZSA9IFdl
YkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlOwotICAgIHVzaW5nIERlc3RpbmF0aW9u
ID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjsKLSAgICB1c2luZyBE
ZXN0aW5hdGlvbk1hcCA9IEhhc2hNYXA8RGVzdGluYXRpb24sIEFkQ2xpY2tBdHRyaWJ1dGlvbj47
Ci0gICAgdXNpbmcgQ29udmVyc2lvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29u
dmVyc2lvbjsKLQotICAgIHZvaWQgc3RvcmUoQWRDbGlja0F0dHJpYnV0aW9uJiYpOwotICAgIHZv
aWQgY29udmVydChjb25zdCBTb3VyY2UmLCBjb25zdCBEZXN0aW5hdGlvbiYsIENvbnZlcnNpb24m
Jik7Ci0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZv
aWQgdG9TdHJpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBEZXN0aW5hdGlvbk1hcCYgZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3Vy
Y2UoY29uc3QgU291cmNlJik7Ci0KLSAgICBIYXNoTWFwPFNvdXJjZSwgRGVzdGluYXRpb25NYXA+
IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApp
bmRleCAwNzZiYzgyNWM1YTA2OTU3ZjYzY2VmN2MwZTlmMWM5NTE4ZGQxMGJjLi4zZDc1MmM2MTY3
OTIzNzljYTJiOTAzYjVlOGVkMTdjNGJhMGYyZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjQ5NSwxMyArMjQ5NSwxMyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVN5bmNBbGxDb29raWVzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzdG9yZUFkQ2xp
Y2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tB
dHRyaWJ1dGlvbiYmIGFkQ2xpY2tBdHRyaWJ1dGlvbikKIHsKLSAgICBpZiAoYXV0byBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHNlc3Npb24tPnN0b3JlQWRDbGlja0F0
dHJpYnV0aW9uKFdURk1vdmUoYWRDbGlja0F0dHJpYnV0aW9uKSk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICBy
ZXR1cm4gc2Vzc2lvbi0+ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtMjUwOSwxMCArMjUw
OSwyNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpj
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byBz
ZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoYXV0byogc2Vzc2lv
biA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybiBzZXNzaW9uLT5j
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpKQorICAgICAgICBzZXNzaW9uLT5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyh2YWx1ZSk7CisgICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwmJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoYXV0
byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24t
PnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFdURk1vdmUodXJs
KSk7CisgICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
aW5kZXggN2FlNDk0NjhhOGQ0NGIxMjhiM2Y0Mjc5OTA5M2I0YmU1MzgzZTdjZC4uNzhjZWJkNGUw
ZmZlZjAzMmE1YmY5ZjU4ZjFlNzQ2MGNiYjI5MWY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMzI3LDYgKzMyNyw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklELCBXZWJDb3Jl
OjpBZENsaWNrQXR0cmlidXRpb24mJik7CiAgICAgdm9pZCBkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpOwogICAg
IHZvaWQgY2xlYXJBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBVUkwmJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKIAogICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHN0b3JhZ2VR
dW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgppbmRleCBkYmYzY2E3YWUyZTViMDhmMDhkNjVhODhkYzU2MDBmY2Fl
NTNkNmJkLi44NzY0Njg4ZWVmMDU2YTQ2ZTYyYTEyNzIyM2YxMTdhNTFmNDEwNmRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4KQEAgLTE2OSw0ICsxNjksNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBM
ZWdhY3lSZWNlaXZlciB7CiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0
aW9uKQogICAgIER1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KSAtPiAoU3RyaW5nIGFkQ2xpY2tBdHRyaWJ1dGlvblN0YXRlKSBBc3luYwogICAgIENsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKKyAg
ICBTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGJvb2wgdmFsdWUpIC0+ICgpIEFzeW5jCisgICAgU2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBVUkwgdXJsKSAtPiAoKSBBc3luYwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmNwcAppbmRleCA5OGNkMDViYjc1NzFmNjRiMWZmYzE2Y2MzZGJh
OGM1ODNkNjlmNWNjLi5lZDEzOGMyZTJmY2ZmMGY5ZjUxOTQzZDQ0NTg0YmRmNmRiN2Y3ZWUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcApA
QCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
U2Vzc2lvbi5oIgogCi0jaW5jbHVkZSAiTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5oIgorI2lu
Y2x1ZGUgIkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUGluZ0xvYWQu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgpAQCAtNzEsOCArNzMsMTQgQEAg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNz
aW9uKCkgY29uc3QKIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihOZXR3b3JrUHJvY2Vz
cyYgbmV0d29ya1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc2Vz
c2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fbmV0d29ya1Byb2Nlc3MobmV0d29ya1Byb2Nlc3Mp
Ci0gICAgLCBtX2FkQ2xpY2tBdHRyaWJ1dGlvbihtYWtlVW5pcXVlUmVmPE5ldHdvcmtBZENsaWNr
QXR0cmlidXRpb24+KCkpCisgICAgLCBtX2FkQ2xpY2tBdHRyaWJ1dGlvbihtYWtlVW5pcXVlUmVm
PEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI+KCkpCiB7CisgICAgbV9hZENsaWNrQXR0cmlidXRp
b24tPnNldFBpbmdMb2FkRnVuY3Rpb24oW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhp
cyldKE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYgbG9hZFBhcmFtZXRlcnMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAg
ICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBQaW5nTG9h
ZCBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRlbGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJw
b3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KKyAgICAgICAgbmV3IFBpbmdMb2FkKG1fbmV0d29ya1By
b2Nlc3MsIFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQpAQCAt
MTU1LDQgKzE2MywxNCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldAogICAgIG1fYWRDbGlja0F0
dHJpYnV0aW9uLT5jbGVhcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQg
TmV0d29ya1Nlc3Npb246OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKGJvb2wgdmFsdWUpCit7CisgICAgbV9hZENsaWNrQXR0cmlidXRpb24tPnNldE92ZXJyaWRl
VGltZXJGb3JUZXN0aW5nKHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoVVJMJiYgdXJsKQoreworICAg
IG1fYWRDbGlja0F0dHJpYnV0aW9uLT5zZXRDb252ZXJzaW9uVVJMRm9yVGVzdGluZyhXVEZNb3Zl
KHVybCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCBhOWVhMjg3NjYxMGZjNWE5YjdjMjIy
MDM2YmU0MGY5OTZkNTBiZDJlLi41NmVhMmEwOTc5MDI2YWJkMTk1MmU1ODFmZWRmNDI3ZDIxNDJm
MWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5o
CkBAIC00NSw3ICs0NSw3IEBAIGVudW0gY2xhc3MgU2hvdWxkU2FtcGxlIDogYm9vbDsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb247CitjbGFz
cyBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOwogY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogY2xh
c3MgTmV0d29ya1Byb2Nlc3M7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7
CkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnZlcnRBZENsaWNrQXR0cmli
dXRpb24oY29uc3QgV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UmLCBjb25zdCBX
ZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uJiwgV2ViQ29yZTo6QWRDbGlj
a0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uJiYpOwogICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1
dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpOwogICAgIHZvaWQgY2xlYXJB
ZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUp
OworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
VVJMJiYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgTmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3Mm
LCBQQUw6OlNlc3Npb25JRCk7CkBAIC05Nyw3ICs5OSw3IEBAIHByb3RlY3RlZDoKICAgICBFbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIG1fZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZSB7IEVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU6
Ok5vIH07CiAgICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CiAjZW5kaWYKLSAgICBVbmlxdWVSZWY8TmV0
d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbj4gbV9hZENsaWNrQXR0cmlidXRpb247CisgICAgVW5pcXVl
UmVmPEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI+IG1fYWRDbGlja0F0dHJpYnV0aW9uOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1BpbmdMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGlu
Z0xvYWQuY3BwCmluZGV4IDI5Njg1ZTdlNTlmNzMzZDI5OTM2YTUwMTM2ZmY5MjU3NjQ4YWQ4ZTYu
LjQ5NTUzMDJkYTA3ODljMWU1ODNjMDhmOTQ3M2M5MmNhMzk5ZTIzYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCkBAIC00MCw2ICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1BpbmdMb2FkOjpQaW5n
TG9hZChOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNv
dXJjZUVycm9yJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQorICAgIDogbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCisgICAgLCBtX2NvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgICwgbV90aW1lb3V0
VGltZXIoKnRoaXMsICZQaW5nTG9hZDo6dGltZW91dFRpbWVyRmlyZWQpCisgICAgLCBtX25ldHdv
cmtMb2FkQ2hlY2tlcihtYWtlVW5pcXVlUmVmPE5ldHdvcmtMb2FkQ2hlY2tlcj4obmV0d29ya1By
b2Nlc3MsIEZldGNoT3B0aW9ucyB7IG1fcGFyYW1ldGVycy5vcHRpb25zfSwgbV9wYXJhbWV0ZXJz
LnNlc3Npb25JRCwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1l
SUQsIFdURk1vdmUobV9wYXJhbWV0ZXJzLm9yaWdpbmFsUmVxdWVzdEhlYWRlcnMpLCBVUkwgeyBt
X3BhcmFtZXRlcnMucmVxdWVzdC51cmwoKSB9LCBtX3BhcmFtZXRlcnMuc291cmNlT3JpZ2luLmNv
cHlSZWYoKSwgbV9wYXJhbWV0ZXJzLnByZWZsaWdodFBvbGljeSwgbV9wYXJhbWV0ZXJzLnJlcXVl
c3QuaHR0cFJlZmVycmVyKCkpKQoreworICAgIGluaXRpYWxpemUobmV0d29ya1Byb2Nlc3MpOwor
fQorCiBQaW5nTG9hZDo6UGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNv
bm5lY3Rpb24sIE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFJlc291cmNlRXJyb3ImLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiAgICAgOiBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1f
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCkBAIC01Miw2ICs2
MSwxMSBAQCBQaW5nTG9hZDo6UGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGNvbm5lY3Rpb24sIE5ldHdvcmtQcm9jZXNzJiBuZQogICAgICAgICAgICAgZmlsZS0+cHJlcGFy
ZUZvckZpbGVBY2Nlc3MoKTsKICAgICB9CiAKKyAgICBpbml0aWFsaXplKG5ldHdvcmtQcm9jZXNz
KTsKK30KKwordm9pZCBQaW5nTG9hZDo6aW5pdGlhbGl6ZShOZXR3b3JrUHJvY2VzcyYgbmV0d29y
a1Byb2Nlc3MpCit7CiAgICAgbV9uZXR3b3JrTG9hZENoZWNrZXItPmVuYWJsZUNvbnRlbnRFeHRl
bnNpb25zQ2hlY2soKTsKICAgICBpZiAobV9wYXJhbWV0ZXJzLmNzcFJlc3BvbnNlSGVhZGVycykK
ICAgICAgICAgbV9uZXR3b3JrTG9hZENoZWNrZXItPnNldENTUFJlc3BvbnNlSGVhZGVycyhXVEZN
b3ZlKG1fcGFyYW1ldGVycy5jc3BSZXNwb25zZUhlYWRlcnMudmFsdWUoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oCmluZGV4IDkwYWFhZTQ1MTcwOTE5YmQ5ODQ5ODI4
NTRlYWQ5MWM1YTcxOTU2NTkuLmM3ZTEyYmIxMzBkMDQ5YzVkMGE1OTdjMDFmZTViZmZjOGIyMjFi
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmgKQEAgLTQyLDkgKzQy
LDExIEBAIGNsYXNzIE5ldHdvcmtQcm9jZXNzOwogY2xhc3MgUGluZ0xvYWQgZmluYWwgOiBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8UGluZ0xvYWQ+LCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVu
dCB7CiBwdWJsaWM6CiAgICAgUGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
LCBOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKT4mJik7Ci0gICAgCisgICAgUGluZ0xvYWQoTmV0d29y
a1Byb2Nlc3MmLCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik+JiYpOworCiBwcml2YXRlOgogICAgIH5QaW5nTG9hZCgpOworICAg
IHZvaWQgaW5pdGlhbGl6ZShOZXR3b3JrUHJvY2VzcyYpOwogCiAgICAgY29uc3QgVVJMJiBjdXJy
ZW50VVJMKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDgwM2I1NzY4OGMwM2Q0ZTgwNjk4Mzg5
ZTg1Y2I1OWVjOWZiNzE3MzUuLmEzNTBiYjJhMDY0ODE4M2U5NThmYmQ1ZGRlYTExNGRmZTMzYTMx
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogLy8gQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogLy8g
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWRDbGlja0F0dHJpYnV0aW9uLmNwcAorTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9u
TWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuY3BwCiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDVmNjY1YTUyMmM1YmRjNzM3ZmVhMTVlZWY1ZmVj
ZWYxY2JmMTYzMGEuLjQxNGRjNDk2Zjc1OTMzM2FmNDZhYTlmMzkyMzU3NTRlMDE1ZDM5OTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMjczOCwzICsyNzM4
LDE3IEBAIHZvaWQgV0tQYWdlQ2xlYXJBZENsaWNrQXR0cmlidXRpb24oV0tQYWdlUmVmIHBhZ2Us
IFdLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uCiAgICAgICAgIGNhbGxiYWNrKGNhbGxiYWNr
Q29udGV4dCk7CiAgICAgfSk7CiB9CisKK3ZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgdmFsdWUsIFdLUGFn
ZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQqIGNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKHZhbHVlLCBbY2FsbGJhY2tD
b250ZXh0LCBjYWxsYmFja10gKCkgeworICAgICAgICBjYWxsYmFjayhjYWxsYmFja0NvbnRleHQp
OworICAgIH0pOworfQorCit2b2lkIFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBVUkxSZWYsIFdLUGFnZVNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJh
Y2ssIHZvaWQqIGNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFVSTChVUkwoKSwgdG9XVEZTdHJp
bmcoVVJMUmVmKSksIFtjYWxsYmFja0NvbnRleHQsIGNhbGxiYWNrXSAoKSB7CisgICAgICAgIGNh
bGxiYWNrKGNhbGxiYWNrQ29udGV4dCk7CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmgKaW5kZXggYjA3NmU3NWRhN2Y1YTU1ODk0OGE1
NmU4ZGIxM2E5MjJkODg1MmQyYS4uYzk5ZjczMmE2MjdkN2NkNjkxNGJlZGM0OTI1ZDhmMGIwMzRk
M2Q3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZVByaXZhdGUu
aApAQCAtMTg3LDYgKzE4NywxMCBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEdW1wQWRDbGlja0F0
dHJpYnV0aW9uRnVuY3Rpb24pKFdLU3RyaW5nUmVmIGFkQ2xpY2tBdHRyaWJ1dAogV0tfRVhQT1JU
IHZvaWQgV0tQYWdlRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihXS1BhZ2VSZWYsIFdLUGFnZUR1bXBB
ZENsaWNrQXR0cmlidXRpb25GdW5jdGlvbiwgdm9pZCogY2FsbGJhY2tDb250ZXh0KTsKIHR5cGVk
ZWYgdm9pZCAoKldLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24pKHZvaWQqIGZ1
bmN0aW9uQ29udGV4dCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihXS1BhZ2VSZWYsIFdLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24sIHZv
aWQqIGNhbGxiYWNrQ29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNrQXR0
cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZ0Z1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNv
bnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJp
ZGVUaW1lckZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgdmFsdWUsIFdLUGFnZVNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ss
IHZvaWQqIGNhbGxiYWNrQ29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNr
QXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZ0Z1bmN0aW9uKSh2b2lkKiBmdW5jdGlv
bkNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHVybFN0cmluZywg
V0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmdGdW5jdGlv
biBjYWxsYmFjaywgdm9pZCogY2FsbGJhY2tDb250ZXh0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAppbmRleCA0NzJmZGVlNDAzOGZkNWM5NDBhMTVjM2EwZjE1YzE0ZWM2
OGUwZjE2Li5jMzQ0ZDE2MzgyNzM1YjBiNjgzYzY5NmY5YjY2MjY3MTA3MWQ4NDY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAKQEAgLTExNjIsMjYgKzExNjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAog
fQogI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1
dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5k
TWVzc2FnZSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24oc2Vzc2lvbklEKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcm9j
ZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuaAppbmRleCBkYWNlZWFlYmFiNDczNmRmMWQyMmE3ODFiYzE2OWI1Yjg4N2U5MDI3Li5mY2Iy
Yjc4YjQ1ZGM1NzJjMzc4ODNlOGU2YTgwZmJiZjhkYjFhNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMTcw
LDkgKzE3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAK
LSAgICB2b2lkIGR1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOwotICAgIHZvaWQgY2xlYXJBZENsaWNr
QXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0KICAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwogICAgIHZv
aWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAzMTIxZjliNTRkOTE3OGZhZTlmNjA4MzgyZDdk
NmEyMzQyMDdhMGRkLi41MmQ2NzlhOTcxYWU1YTFlZDIzOTA0NDdhZGEzNTJkYzczYmIyMjI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTg4NTgsMTIgKzg4
NTgsNDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRGF0YURldGUKIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1
bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAg
aWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgeworICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRh
U3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0K
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBpZiAoIW5ldHdv
cmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJz
aW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0
ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICB9CiB9CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggM2U4NmFmOTUxZTBlZGJlZTc5YmY3ODhmODM5
ODY0MWFhYzE3OGEyZi4uY2YwMGM2NDJhMmFjZWE5NWNjMGZkNzYyNGQxY2I3YjgwMmQ2ZWQ2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE1MDQsNiArMTUwNCw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGNsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRBZENs
aWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogICAgIHZvaWQgc3BlZWNoU3lu
dGhlc2lzVm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlNwZWVjaFN5
bnRoZXNpc1ZvaWNlPiYmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKaW5kZXggMmE2MDQ2OTI3YTZmNmY5MWVlOGM2NGRlYWRmOTc3N2Y2YTJiMmNjNy4u
N2NiMWJiNDBhYTg2NDg3OTIwZjljNGQxNTM1MzRjMDI2ZTQ3ZDQ4OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjUwNywyNiArMjUwNyw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpk
dW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW1w
dHlTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT5kdW1wQWRDbGlja0F0dHJpYnV0aW9uKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihzZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLSAgICAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmNvbW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCB1aW50NjRfdCBwYWdlSUQpCiB7CiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCmluZGV4IDNiYjFmNzU4NmQ2MzRlMzJiMDIxMDI2YjlhNDQ2YWZhMzAwZTdj
OGYuLjQ5ZWY5NzIzNjg1MWM1MzMyYTgyN2QzNjgzNTFhYWU3ODdlNTY1MzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtNDkzLDggKzQ5Myw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVz
dGluZygpOwogICAgIHZvaWQgY2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsK
IAotICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7Ci0gICAgdm9pZCBjbGVhckFkQ2xp
Y2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGNvbW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWlu
LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIHVpbnQ2NF90IHBh
Z2VJRCk7CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFjYzgyNGU4ZTNi
NTQxM2Y0MTFjYWIwMjE4MjBiNTBjMzJlNmZlZGMuLmVhNWMzOWRmZTM0NTY0MDE2NjYwOGE2YjAz
ODhlZGY4ZjZiZTc1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTEwNiw3ICsxMTA2LDcgQEAKIAkJNjNDMzJDMjgxRTk4MTE5MDAw
Njk5QkQwIC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNDMzJDMjcxRTk4MTE5MDAwNjk5QkQw
IC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRpb25JbnRlcm5hbC5oICovOyB9OwogCQk2NUI4NkYxRTEy
RjExREUzMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBX
S0J1bmRsZUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZBNTA4MEJGMUYwRURBQUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVz
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkJEMDU4NjUy
MjBDRThDMjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRDA1ODYzMjIwQ0U4QzIwMDBC
RUQ1QyAvKiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggKi87IH07CisJCTZCRDA1ODY1MjIw
Q0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkQwNTg2MzIyMENFOEMyMDAwQkVE
NUMgLyogQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5oICovOyB9OwogCQk2QkU5NjlDMTFFNTRE
NDUyMDA4Qjc0ODMgLyogY29yZVByZWRpY3Rpb25fbW9kZWwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUMwMUU1NEQ0NTIwMDhCNzQ4MyAvKiBj
b3JlUHJlZGljdGlvbl9tb2RlbCAqLzsgfTsKIAkJNkJFOTY5Q0IxRTU0RDRDRjAwOEI3NDgzIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUM5MUU1NEQ0Q0YwMDhCNzQ4MyAv
KiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggKi87IH07CiAJCTZCRTk2
OUNEMUU1NEUwNTQwMDhCNzQ4MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5Q0Mx
RTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggKi87
IH07CkBAIC0zNTY1LDggKzM1NjUsOCBAQAogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyog
V0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVh
dHVyZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAv
KiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtBZENs
aWNrQXR0cmlidXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJEMDU4NjQy
MjBDRThDMjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmli
dXRpb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJEMDU4NjQyMjBDRThDMjAwMEJFRDVD
IC8qIEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRD
bGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZCRTk2OUMwMUU1NEQ0NTIwMDhCNzQ4MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBjb3JlUHJlZGljdGlvbl9tb2RlbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkJFOTY5QzYxRTU0RDRCNjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkJFOTY5QzgxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTQ0LDEwICs2NTQ0LDEwIEBACiAJCQkJNTEwQ0M3REMx
NjEzOEUyOTAwRDAzRUQzIC8qIG1hYyAqLywKIAkJCQk5M0JBMDREOTIxNTFBRENEMDA3RjQ1NUYg
LyogU2VydmljZVdvcmtlciAqLywKIAkJCQk0MTMwNzU5NzFERTg0RUQ3MDAzOUVDNjkgLyogd2Vi
cnRjICovLAorCQkJCTZCRDA1ODY0MjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRp
b25NYW5hZ2VyLmNwcCAqLywKKwkJCQk2QkQwNTg2MzIyMENFOEMyMDAwQkVENUMgLyogQWRDbGlj
a0F0dHJpYnV0aW9uTWFuYWdlci5oICovLAogCQkJCTUzRjNDQUE1MjA2QzQ0M0UwMDg2NDkwRSAv
KiBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcCAqLywKIAkJCQk1MzVCQ0I5MDIwNjlDNDlDMDBD
Q0NFMDIgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5oICovLAotCQkJCTZCRDA1ODY0MjIwQ0U4
QzIwMDBCRUQ1QyAvKiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLywKLQkJCQk2QkQw
NTg2MzIyMENFOEMyMDAwQkVENUMgLyogTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5oICovLAog
CQkJCTUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAgKi8sCiAJCQkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJNTEzQTE2NEIxNjMwQTlCRjAwNUQ3RDIyIC8q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAtOTA1NCw2
ICs5MDU0LDcgQEAKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0
eUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRCNzY2NzEyMUI1RTQ4QTAwNDVEREIxIC8qIEFj
Y2Vzc2liaWxpdHlTdXBwb3J0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q3OTJEODE3NjdD
Q0EzMDA4ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTZC
RDA1ODY1MjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2MzQ4NDI1MTFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGljYXRp
b25NYW5pZmVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY5NzAxMURCRTYwMzAwNjQ1NUIw
IC8qIEFQSUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTVDNzcwRTFGQTdENDI5MDA1OTMy
QzMgLyogQVBJQXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05Mjk0LDcgKzkyOTUsNiBA
QAogCQkJCTFBNEE5QzU2MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNTg4OTIxMUVFNzA0MDAwNjFCODgyIC8qIE5ldHNjYXBl
UGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzVCQ0I5MjIwNjlDNDlDMDBDQ0NF
MDIgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkJEMDU4
NjUyMjBDRThDMjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExMDVEMEQxMjEyNzM0QjIwMDM0RjZDNyAvKiBOZXR3b3JrQmxvYlJlZ2lz
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDQzFBMEQwNDBCMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3Qjkg
LyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDc1NjFmM2Y4NWU2ZDM5MDdl
YThjZjlkOTc5MWE5MDQyNmQwN2QwZmUuLjdjY2YyNDFmMmQyZjc4ZjA5MjUzNjMxOGQzMjY1YWMw
NzczYmRiOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyOCBAQAorMjAxOS0wNC0xMiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBTZW5kIGRlbGF5ZWQgQWQgQ2xpY2sgQXR0cmlidXRpb24g
Y29udmVyc2lvbiByZXF1ZXN0cyB0byB0aGUgY2xpY2sgc291cmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4MzgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzQ3NjUwMTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0ZXN0IGluZnJhc3RydWN0dXJlIHRvIG92ZXJyaWRl
IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGluCisgICAgICAgIFdlYktpdDo6TmV0d29ya0FkQ2xpY2tB
dHRyaWJ1dGlvbi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVt
cEFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0
dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVz
dGluZyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTktMDQtMTIgIEVyaWMgQ2FybHNv
biAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIEF1ZGlvU2Vzc2lv
biByb3V0ZSBzaGFyaW5nIHBvbGljeQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXggMDg3
ZGE4NDY1MjU3ZmJlNjlkMzU4YmY1NzcwZWY3MjMyYzY5NTViMC4uZTdiNTgxM2ZkMTBiNWU4NGYy
YzE1N2MyYjc2MmRiZDkwYzRjNzdhMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0z
ODEsNCArMzgxLDYgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogCiAgICAgLy8gQWQgQ2xpY2sg
QXR0cmlidXRpb24KICAgICB2b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CisgICAgdm9p
ZCBzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sZWFuIHZh
bHVlKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0
aW5nKERPTVN0cmluZyB1cmwpOwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDFjOWFmMzMxOTcwYmU0YzQ2NzVm
YjY5MzlmOTQ3ZDg5YTExYzFlNDYuLjUwYjk5OWUzYWVkMjk5MGZhOGE4MmQ1Yzg4YTVlNDZmMzFl
Yzk1NjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcApAQCAtMjc5NSwxNCArMjc5NSwyOSBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkoYm9vbCBzaG91
bGREaXNtaQogCiB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQogewot
ICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJkdW1wQWRDbGlja0F0dHJpYnV0aW9uIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wQWRDbGlja0F0dHJpYnV0
aW9uIikpOwogICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7Cisg
ICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIikpOwogICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwogfQogCit2
b2lkIFRlc3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0
cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwor
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRBZENs
aWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmluZ1JlZiB1cmxTdHJp
bmcpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0cmlidXRpb25Db252
ZXJzaW9uVVJMRm9yVGVzdGluZyIpKTsKKyAgICBhdXRvIHd0ZlVSTFN0cmluZyA9IHRvV1RGU3Ry
aW5nKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVybFN0cmluZykpOworICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyh3dGZVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDg0YWIyMTkzMzM2NmQzZDdl
NjdjOTE2OGVkOGQwNjZjMTYxNDE2MTUuLjA5YTk1ZWEwY2IwMWZlZTBjYWQ3MDgzMDZmOWU2ZDA2
NzQ3N2I5MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCkBAIC00OTQsNiArNDk0LDggQEAgcHVibGljOgogICAgIC8vIEFkIENs
aWNrIEF0dHJpYnV0aW9uLgogICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpOwogICAg
IHZvaWQgY2xlYXJBZENsaWNrQXR0cmlidXRpb24oKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRy
aWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoSlNTdHJpbmdSZWYpOwog
CiBwcml2YXRlOgogICAgIFRlc3RSdW5uZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKaW5kZXggNzNkYjMwMzEwMTFkNDAzNWY1YzIzZDUzZTI2NDIzZTM0NzEx
NGVhOS4uYWU1NDdiNmU5ZjQyNGI5YTBkMWRlNWIyMzQxODM4ZjYwYTU3NWRlNSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTM1NzQsNCArMzU3NCwxOCBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpCiAgICAgcnVu
VW50aWwoY2FsbGJhY2tDb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiB9CiAKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJv
b2wgdmFsdWUpCit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uVm9pZENhbGxiYWNrQ29udGV4dCBj
YWxsYmFja0NvbnRleHQoKnRoaXMpOworICAgIFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92
ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgdmFsdWUsIGFkQ2xp
Y2tBdHRyaWJ1dGlvblZvaWRDYWxsYmFjaywgJmNhbGxiYWNrQ29udGV4dCk7CisgICAgcnVuVW50
aWwoY2FsbGJhY2tDb250ZXh0LmRvbmUsIG5vVGltZW91dCk7Cit9CisKK3ZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFdLVVJM
UmVmIHVybCkKK3sKKyAgICBBZENsaWNrQXR0cmlidXRpb25Wb2lkQ2FsbGJhY2tDb250ZXh0IGNh
bGxiYWNrQ29udGV4dCgqdGhpcyk7CisgICAgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcobV9tYWluV2ViVmlldy0+cGFnZSgpLCB1cmwsIGFkQ2xpY2tB
dHRyaWJ1dGlvblZvaWRDYWxsYmFjaywgJmNhbGxiYWNrQ29udGV4dCk7CisgICAgcnVuVW50aWwo
Y2FsbGJhY2tDb250ZXh0LmRvbmUsIG5vVGltZW91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdU
UgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGRlOTEzMGM2ODQz
NDVmZDVmZjk4YTZhZWYwNjZlODUxY2RjZGFhZTUuLjY4OTUyNmRmZDcwNzQzZmQ1MmIzOWUwZDhm
ODY3MGNiMzFiMjBkODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
QEAgLTMwNiw2ICszMDYsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbigpOwogICAgIHZvaWQgY2xlYXJBZENsaWNrQXR0cmlidXRpb24oKTsKKyAgICB2b2lk
IHNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUp
OworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
V0tVUkxSZWYpOwogCiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRp
b25SZWY+IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMmKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggNGM3MDM3YjdmNTc3
NWM2NjdkZjM4YjAzMTNjMWRhYzAwNGFiZTUyMC4uMDY5OWNjN2QxNWE4ODI0YThmMzJiNTcyZmEx
ZjA5NjM1NDdiNTgwMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52
b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5j
cHAKQEAgLTE2MDYsMTYgKzE2MDYsMzAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJkdW1wQWRDbGlja0F0dHJpYnV0aW9uIikpIHsKKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1bXBBZENsaWNr
QXR0cmlidXRpb24iKSkgewogICAgICAgICBkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgImNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIikpIHsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFy
QWRDbGlja0F0dHJpYnV0aW9uIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpIHsK
KyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciKSkgeworICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVVJMR2V0VHlwZUlEKCkpOworICAgICAg
ICBXS1VSTFJlZiB1cmwgPSBzdGF0aWNfY2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcodXJsKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwog
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDIwZmFhZTUxNDAxYzE5YmZiYjJhNWFkMmUyMDU4OTY2ZTVhMGY2MmUuLjA0Yjc3
NzFmMWI2OWQ0MTNmM2RmMTU4M2MxMjY3ZWVlNzU3MTAwOWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxOS0wNC0xMiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBTZW5kIGRlbGF5ZWQgQWQgQ2xpY2sgQXR0cmlidXRpb24gY29udmVyc2lvbiByZXF1ZXN0
cyB0byB0aGUgY2xpY2sgc291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTY4MzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NjUwMTU3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90
ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWlt
YWdlLXJlZGlyZWN0LXdpdGgtcHJpb3JpdHktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAv
dGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1p
bWFnZS1yZWRpcmVjdC13aXRob3V0LXByaW9yaXR5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvY29udmVyc2lvbkZpbGVQYXRo
LnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVz
b3VyY2VzL2NvbnZlcnNpb25SZXBvcnQucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0
aW9uLWNvbnZlcnNpb24tcmVxdWVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1y
ZXF1ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDE5LTA0LTEyICBSb3NzIEtpcnNsaW5nICA8cm9zcy5r
aXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dW1dLTF0gVW5yZXZpZXdlZCB0
ZXN0IGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlj
a0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1pbWFnZS1yZWRpcmVj
dC13aXRoLXByaW9yaXR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRD
bGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1pbWFnZS1yZWRp
cmVjdC13aXRoLXByaW9yaXR5LWV4cGVjdGVkLnR4dAppbmRleCBiYzI3MWQ0MmI5ZWI1ZmI0M2Ux
NGZiZjQ4NDM3ZDNmZDVlNjBmNTllLi5kZjQxODUzNjlmNWUwMjdhYzUzNDZhZTczN2UzZjY5OTk4
MTdiNmQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1
dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aC1w
cmlvcml0eS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNr
QXR0cmlidXRpb24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0
LXdpdGgtcHJpb3JpdHktZXhwZWN0ZWQudHh0CkBAIC03LDMgKzcsNSBAQCBEZXN0aW5hdGlvbjog
bG9jYWxob3N0CiBDYW1wYWlnbiBJRDogMwogQ29udmVyc2lvbiBkYXRhOiAxMgogQ29udmVyc2lv
biBwcmlvcml0eTogMworQ29udmVyc2lvbiBlYXJsaWVzdCB0aW1lIHRvIHNlbmQ6IFdpdGhpbiAy
NC00OCBob3VycworQ29udmVyc2lvbiByZXF1ZXN0IHNlbnQ6IGZhbHNlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252
ZXJzaW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aG91dC1wcmlvcml0eS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlv
bi1jb252ZXJzaW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aG91dC1wcmlvcml0eS1leHBl
Y3RlZC50eHQKaW5kZXggNGM4NThmMDI0ZDY4NTI1YzE2OWFlZjk1NTFlYTY4YWEwYjQ5ZDcxOC4u
ZDNjMmFjNmVhNzM3MDc0OWExN2VjYWE0ZGRiZTEzMzFkYjljODY1OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vYXR0cmlidXRpb24tY29udmVy
c2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0LXdpdGhvdXQtcHJpb3JpdHktZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0
aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1pbWFnZS1yZWRpcmVjdC13aXRob3V0LXByaW9yaXR5LWV4
cGVjdGVkLnR4dApAQCAtNywzICs3LDUgQEAgRGVzdGluYXRpb246IGxvY2FsaG9zdAogQ2FtcGFp
Z24gSUQ6IDMKIENvbnZlcnNpb24gZGF0YTogMTIKIENvbnZlcnNpb24gcHJpb3JpdHk6IDAKK0Nv
bnZlcnNpb24gZWFybGllc3QgdGltZSB0byBzZW5kOiBXaXRoaW4gMjQtNDggaG91cnMKK0NvbnZl
cnNpb24gcmVxdWVzdCBzZW50OiBmYWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25GaWxlUGF0aC5waHAg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvY29u
dmVyc2lvbkZpbGVQYXRoLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTUzY2Y5NjA2M2JlN2M2YWZhZjBhOWRm
M2ExOGMxYWZiY2RhYjMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25GaWxlUGF0aC5waHAKQEAg
LTAsMCArMSw2IEBACis8P3BocAorcmVxdWlyZV9vbmNlICcuLi8uLi9yZXNvdXJjZXMvcG9ydGFi
aWxpdHlMYXllci5waHAnOworCiskY29udmVyc2lvbkZpbGVQYXRoID0gc3lzX2dldF90ZW1wX2Rp
cigpIC4gIi9hZENsaWNrQ29udmVyc2lvbi50eHQiOworCis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25S
ZXBvcnQucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVz
b3VyY2VzL2NvbnZlcnNpb25SZXBvcnQucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmM2Y3ODc4NmZjZjBjOGZh
ZDZiZjYxMTg3YzYxNjEyOWJmYjc0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvY29udmVyc2lvblJlcG9ydC5w
aHAKQEAgLTAsMCArMSwyMCBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAnY29udmVyc2lvbkZpbGVQ
YXRoLnBocCc7CisKKyRjb252ZXJzaW9uRmlsZSA9IGZvcGVuKCRjb252ZXJzaW9uRmlsZVBhdGgg
LiAiLnRtcCIsICd3Jyk7CiskaHR0cEhlYWRlcnMgPSAkX1NFUlZFUjsKKyRjb29raWVzRm91bmQg
PSBmYWxzZTsKK2ZvcmVhY2ggKCRodHRwSGVhZGVycyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKKyAg
ICBpZiAoJG5hbWUgPT09ICJIVFRQX0hPU1QiIHx8ICRuYW1lID09PSAiUkVRVUVTVF9VUkkiKQor
ICAgICAgICBmd3JpdGUoJGNvbnZlcnNpb25GaWxlLCAiJG5hbWU6ICR2YWx1ZVxuIik7CisgICAg
ZWxzZSBpZiAoJG5hbWUgPT09ICJIVFRQX0NPT0tJRSIpIHsKKyAgICAgICAgZndyaXRlKCRjb252
ZXJzaW9uRmlsZSwgIkNvb2tpZXMgaW4gY29udmVyc2lvbiByZXF1ZXN0OiAkdmFsdWVcbiIpOwor
ICAgICAgICAkY29va2llc0ZvdW5kID0gdHJ1ZTsKKyAgICB9Cit9CitpZiAoISRjb29raWVzRm91
bmQpIHsKKyAgICBmd3JpdGUoJGNvbnZlcnNpb25GaWxlLCAiTm8gY29va2llcyBpbiBjb252ZXJz
aW9uIHJlcXVlc3QuXG4iKTsKK30KK2ZjbG9zZSgkY29udmVyc2lvbkZpbGUpOworcmVuYW1lKCRj
b252ZXJzaW9uRmlsZVBhdGggLiAiLnRtcCIsICRjb252ZXJzaW9uRmlsZVBhdGgpOworPz4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291
cmNlcy9nZXRDb252ZXJzaW9uRGF0YS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xp
Y2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI5OTZmYTA5MjY4NmI2ZjE4MTIxNTJiZTAzYmM2NDNkZmU4YTg2YzUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMv
Z2V0Q29udmVyc2lvbkRhdGEucGhwCkBAIC0wLDAgKzEsNTAgQEAKKzw/cGhwCityZXF1aXJlX29u
Y2UgJ2NvbnZlcnNpb25GaWxlUGF0aC5waHAnOworCiskbm9UaW1lb3V0ID0gVHJ1ZTsKKyR0aW1l
b3V0TXNlY3MgPSAwOworaWYgKGlzc2V0KCRfR0VUWyd0aW1lb3V0X21zJ10pKSB7CisgICAgJG5v
VGltZW91dCA9IEZhbHNlOworICAgICR0aW1lb3V0TXNlY3MgPSAoaW50KSAkX0dFVFsndGltZW91
dF9tcyddOworfQorCiskY29udmVyc2lvbkZpbGVGb3VuZCA9IEZhbHNlOword2hpbGUgKCRub1Rp
bWVvdXQgfHwgJHRpbWVvdXRNc2VjcyA+IDApIHsKKyAgICBpZiAoZmlsZV9leGlzdHMoJGNvbnZl
cnNpb25GaWxlUGF0aCkpIHsKKyAgICAgICAgJGNvbnZlcnNpb25GaWxlRm91bmQgPSBUcnVlOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgJHNsZWVwTXNlY3MgPSAxMDsKKyAgICB1c2xlZXAo
JHNsZWVwTXNlY3MgKiAxMDAwKTsKKyAgICBpZiAoISRub1RpbWVvdXQpIHsKKyAgICAgICAgJHRp
bWVvdXRNc2VjcyAtPSAkc2xlZXBNc2VjczsKKyAgICB9CisgICAgLy8gZmlsZV9leGlzdHMoKSBj
YWNoZXMgcmVzdWx0cywgd2Ugd2FudCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICBjbGVh
cnN0YXRjYWNoZSgpOworfQorCisKK2VjaG8gIjxodG1sPjxib2R5PlxuIjsKKworaWYgKCRjb252
ZXJzaW9uRmlsZUZvdW5kKSB7CisgICAgZWNobyAiQ29udmVyc2lvbiByZWNlaXZlZC4iOworICAg
ICRjb252ZXJzaW9uRmlsZSA9IGZvcGVuKCRjb252ZXJzaW9uRmlsZVBhdGgsICdyJyk7CisgICAg
d2hpbGUgKCRsaW5lID0gZmdldHMoJGNvbnZlcnNpb25GaWxlKSkgeworICAgICAgICBlY2hvICI8
YnI+IjsKKyAgICAgICAgZWNobyB0cmltKCRsaW5lKTsKKyAgICB9CisgICAgZmNsb3NlKCRjb252
ZXJzaW9uRmlsZSk7CisgICAgdW5saW5rKCRjb252ZXJzaW9uRmlsZVBhdGgpOworfSBlbHNlIHsK
KyAgICBlY2hvICJDb252ZXJzaW9uIG5vdCByZWNlaXZlZCAtIHRpbWVkIG91dC4iOworfQorCitp
ZiAoaXNzZXQoJF9HRVRbJ2VuZFRlc3QnXSkpIHsKKyAgICBlY2hvICI8c2NyaXB0PiI7CisgICAg
ZWNobyAiaWYgKHdpbmRvdy50ZXN0UnVubmVyKSI7CisgICAgZWNobyAiICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOyI7CisgICAgZWNobyAiPC9zY3JpcHQ+IjsKK30KKworZWNobyAiPC9ib2R5
PjwvaHRtbD4iOworPz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlj
a0F0dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3NlbmQtYXR0
cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWE5
MDEyMWEyOWE2MzAzOTRkZmY5OTI2ZTJiOWJhZTgzMzBmYWFiCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vc2VuZC1hdHRyaWJ1dGlv
bi1jb252ZXJzaW9uLXJlcXVlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3Rz
IHNlbmRpbmcgb2YgYWQgY2xpY2sgYXR0cmlidXRpb24gcmVxdWVzdHMgYWZ0ZXIgYSBjb252ZXJz
aW9uLgorCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lMS0tPicKKy0tLS0tLS0tCitD
b252ZXJzaW9uIHJlY2VpdmVkLgorSFRUUF9IT1NUOiAxMjcuMC4wLjE6ODAwMAorUkVRVUVTVF9V
Ukk6IC9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25SZXBvcnQucGhwP2Nv
bnZlcnNpb249MTImY2FtcGFpZ249MworTm8gY29va2llcyBpbiBjb252ZXJzaW9uIHJlcXVlc3Qu
CitXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gMQorU291cmNlOiAxMjcuMC4wLjEKK0Rlc3Rp
bmF0aW9uOiBsb2NhbGhvc3QKK0NhbXBhaWduIElEOiAzCitDb252ZXJzaW9uIGRhdGE6IDEyCitD
b252ZXJzaW9uIHByaW9yaXR5OiAwCitDb252ZXJzaW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDog
V2l0aGluIDI0LTQ4IGhvdXJzCitDb252ZXJzaW9uIHJlcXVlc3Qgc2VudDogdHJ1ZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vc2VuZC1hdHRy
aWJ1dGlvbi1jb252ZXJzaW9uLXJlcXVlc3QuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
YWRDbGlja0F0dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2EwYjgwZmNlZDUzNTkxOGZlZTcwYTZkOTdhYWY1ZDBiMDg2N2ZhNQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0
aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0Lmh0bWwKQEAgLTAsMCArMSw2
NCBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGli
bGVWaWV3cG9ydD10cnVlIGludGVybmFsOkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgi
PgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgs
IGluaXRpYWwtc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyI+CisgICAgPHNjcmlwdCBzcmM9Ii9q
cy10ZXN0LXJlc291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJzZXRUaW1lb3V0KHJ1blRlc3QsIDApIj4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5U
ZXN0cyBzZW5kaW5nIG9mIGFkIGNsaWNrIGF0dHJpYnV0aW9uIHJlcXVlc3RzIGFmdGVyIGEgY29u
dmVyc2lvbi48L2Rpdj4KKzxhIGlkPSJ0YXJnZXRMaW5rIiBocmVmPSJodHRwOi8vbG9jYWxob3N0
OjgwMDAvYWRDbGlja0F0dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1
ZXN0Lmh0bWw/c3RlcFR3byIgYWRjYW1wYWlnbmlkPSIzIiBhZGRlc3RpbmF0aW9uPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAiPkxpbms8L2E+PGJyPgorPGRpdiBpZD0ib3V0cHV0Ij48L2Rpdj4KKzxz
Y3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLmR1bXBDaGlsZEZyYW1lc0FzVGV4
dCgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKHRydWUp
OworICAgICAgICB0ZXN0UnVubmVyLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldEFkQ2xpY2tBdHRyaWJ1dGlv
bkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKCJodHRwOi8vMTI3LjAuMC4xOjgwMDAvYWRDbGlja0F0
dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocCIpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGFjdGl2YXRlRWxlbWVudChlbGVtZW50SUQpIHsKKyAgICAgICAgdmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SUQpOworICAgICAgICB2YXIgY2Vu
dGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAg
ICAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWln
aHQgLyAyOworICAgICAgICBVSUhlbHBlci5hY3RpdmF0ZUF0KGNlbnRlclgsIGNlbnRlclkpLnRo
ZW4oCisgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJvdXRwdXQiKS5pbm5lclRleHQgPSAiRkFJTCBQcm9taXNlIHJlamVjdGVkLiI7CisgICAgICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXBwZW5kQ29udmVyc2lvbkRhdGFJZnJhbWVBbmRG
aW5pc2goKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpOwor
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0YXJnZXRMaW5rIikpOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwaXhlbCIpKTsKKworICAgICAgICBsZXQgaWZyYW1lRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAgICBpZnJhbWVFbGVt
ZW50LnNyYyA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291
cmNlcy9nZXRDb252ZXJzaW9uRGF0YS5waHA/ZW5kVGVzdD10cnVlJnRpbWVvdXRfbXM9MjAwMCI7
CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lRWxlbWVudCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PT0gIj9zdGVw
VHdvIikgeworICAgICAgICAgICAgICAgIGxldCBpbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQuc3JjID0gImh0
dHBzOi8vMTI3LjAuMC4xOjg0NDMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9yZWRpcmVj
dFRvQ29udmVyc2lvbi5waHA/Y29udmVyc2lvbkRhdGE9MTIiOworICAgICAgICAgICAgICAgIGlt
YWdlRWxlbWVudC5pZCA9ICJwaXhlbCI7CisgICAgICAgICAgICAgICAgaW1hZ2VFbGVtZW50Lm9u
ZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29udmVyc2lv
bkRhdGFJZnJhbWVBbmRGaW5pc2goKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1hZ2VFbGVtZW50KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWN0aXZhdGVFbGVtZW50KCJ0YXJnZXRMaW5rIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgib3V0cHV0IikuaW5uZXJUZXh0ID0gIkZBSUwgTm8gdGVzdFJ1bm5lci4i
OworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367440</attachid>
            <date>2019-04-15 12:31:52 -0700</date>
            <delta_ts>2019-04-15 14:10:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196838-20190415123151.patch</filename>
            <type>text/plain</type>
            <size>84713</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0Mjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDM1YTllOGU2YzdlZjIy
NzEyMmQ5NTM1YWIwOGM4YTIyNmI2MDhlYy4uNGYxYWQ2MDc1YTJiZDQ4ZTVhZTU5MTNmZjcwZWNm
MjU5YjUyMTY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTA0LTE1ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFNlbmQgZGVsYXllZCBB
ZCBDbGljayBBdHRyaWJ1dGlvbiBjb252ZXJzaW9uIHJlcXVlc3RzIHRvIHRoZSBjbGljayBzb3Vy
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Njgz
OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc2NTAxNTc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQ2hyaXMgRHVtZXogYW5kIFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgV2ViQ29yZTo6QWRD
bGlja0F0dHJpYnV0aW9uIG5vdzoKKyAgICAgICAgLSBTZXRzIG1fZWFybGllc3RUaW1lVG9TZW5k
IGNvcnJlY3RseSBiYXNlZCBvbiBXYWxsVGltZTo6bm93KCkuCisgICAgICAgIC0gQWxsb3dzIGZv
ciBhIHRlc3Qgb3ZlcnJpZGUgb2YgdGhlIGJhc2UgVVJMIGZvciBjb252ZXJzaW9ucy4KKyAgICAg
ICAgLSBIb2xkcyBzdGF0ZSBmb3Igd2hldGhlciBvciBub3QgYSBjb252ZXJzaW9uIHJlcXVlc3Qg
aGFzIGJlZW4gc2VudC4KKyAgICAgICAgLSBPdXRwdXRzIG1fZWFybGllc3RUaW1lVG9TZW5kIGFu
ZCBtX2NvbnZlcnNpb24tPmhhc0JlZW5TZW50IGluIHRvU3RyaW5nKCkuCisgICAgICAgIC0gUmV0
dXJucyBtX2VhcmxpZXN0VGltZVRvU2VuZCBhcyBhIHJlc3VsdCBvZiBhIGNhbGwgdG8KKyAgICAg
ICAgY29udmVydEFuZEdldEVhcmxpZXN0VGltZVRvU2VuZCgpIHdoaWNoIHVzZWQgdG8gYmUgY2Fs
bGVkIHNldENvbnZlcnNpb24oKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2FkQ2xpY2tB
dHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVxdWVzdC5odG1sCisKKyAg
ICAgICAgKiBsb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Y29udmVydEFuZEdldEVhcmxpZXN0VGltZVRvU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OnVybCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OnVybEZvclRlc3RpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjptYXJrQ29udmVyc2lvbkFzU2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246Ondhc0NvbnZlcnNpb25TZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpzZXRDb252ZXJz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgICAgIFJlbmFtZWQgY29udmVydEFuZEdldEVhcmxpZXN0
VGltZVRvU2VuZCgpLgorICAgICAgICAqIGxvYWRlci9BZENsaWNrQXR0cmlidXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjo6Q29udmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb246OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZl
cnNpb246OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vVGltZXIuaDoKKyAgICAgICAgICAg
IE5vdyBleHBvcnRzIG5leHRGaXJlSW50ZXJ2YWwuCisKIDIwMTktMDQtMTUgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIyMzc5MDMpIFNwZWVk
b21ldGVyIDIgaXMgMS0yJSByZWdyZXNzZWQgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzZjk2Mzg1NmMy
ZDVmYjdkYjI3OWQxZjU1NjcyMDc1YWVkOTQ4ZmYuLjZhMGI5MmYwOGEzMjlkNjMxNjMzY2Y1MmE0
NDNkN2RjNGEwMjI2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTktMDQtMTUgIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgU2VuZCBkZWxheWVk
IEFkIENsaWNrIEF0dHJpYnV0aW9uIGNvbnZlcnNpb24gcmVxdWVzdHMgdG8gdGhlIGNsaWNrIHNv
dXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2
ODM4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzY1MDE1Nz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBDaHJpcyBEdW1leiBhbmQgWW91ZW5uIEZhYmxldC4KKworICAgICAgICBUaGlzIHBhdGNo
IHNjaGVkdWxlcyBhIGNvbnZlcnNpb24gcmVxdWVzdCB3aXRoIGFwcHJvcHJpYXRlIGRhdGEgZ29p
bmcgdG8gdGhlCisgICAgICAgIGNsaWNrIHNvdXJjZSBhcyBhIHJlc3VsdCBvZiBhbiBhZCBjbGlj
ayBjb252ZXJzaW9uLgorCisgICAgICAgIFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdl
ciBtYWtlcyB1c2Ugb2YgZXhpc3RpbmcgV2ViS2l0OjpQaW5nTG9hZAorICAgICAgICBpbmZyYXN0
cnVjdHVyZSB0byBtYWtlIHRoZSByZXF1ZXN0LiBUaGlzIHdpbGwgcHJvYmFibHkgYmUgcmV3b3Jr
ZWQgaW50byBhCisgICAgICAgIGRlZGljYXRlZCBsb2FkIGNsYXNzIGZ1cnRoZXIgb24uCisKKyAg
ICAgICAgTmV3IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYWxsb3dzIGZvciBhbiBvdmVycmlkZSBvZiBi
b3RoIHRoZSBjb252ZXJzaW9uIFVSTAorICAgICAgICBhbmQgdGhlIDI0LTQ4IGhvdXIgdGltZXIu
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OmVu
c3VyZURlc3RpbmF0aW9uTWFwRm9yU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0
dHJpYnV0aW9uTWFuYWdlcjo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpBZENsaWNrQXR0cmli
dXRpb25NYW5hZ2VyOjpzdGFydFRpbWVyKToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0
aW9uIHRvIHN1cHBvcnQgdGVzdCBvdmVycmlkZS4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0
dHJpYnV0aW9uTWFuYWdlcjo6Y29udmVydCk6CisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG5v
dyBzZXRzIHRoZSB0aW1lci4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFu
YWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0KToKKyAgICAgICAgICAgIEZpcmUgYW4gaW5kaXZp
ZHVhbCByZXF1ZXN0LgorICAgICAgICAoV2ViS2l0OjpBZENsaWNrQXR0cmlidXRpb25NYW5hZ2Vy
OjpmaXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1ZXN0cyk6CisgICAgICAgICAgICBUaGlzIGlzIHRo
ZSB0aW1lciBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYWxsIHBlbmRpbmcgYXR0cmlidXRp
b25zLgorICAgICAgICAoV2ViS2l0OjpBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpjbGVhcik6
CisgICAgICAgICAgICBOb3cgY2xlYXJzIHRoZSB0d28gbmV3IHRlc3Qgc2V0dGluZ3MgbWVtYmVy
cy4KKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6dG9TdHJpbmcg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFn
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Fk
Q2xpY2tBdHRyaWJ1dGlvbi5oLgorICAgICAgICAoV2ViS2l0OjpBZENsaWNrQXR0cmlidXRpb25N
YW5hZ2VyOjpBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6QWRD
bGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6c2V0UGluZ0xvYWRGdW5jdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OnNldE92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6c2V0Q29u
dmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtB
ZENsaWNrQXR0cmlidXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcC4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpzdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldEFkQ2xpY2tBdHRyaWJ1dGlv
bkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRl
VGltZXJGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1Bp
bmdMb2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGluZ0xvYWQ6OlBpbmdMb2FkKToKKyAgICAg
ICAgKFdlYktpdDo6bV9ibG9iRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpQaW5nTG9hZDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgICAgICBUaGUgUGluZ0xvYWQgY29uc3RydWN0b3IgaXMgbm93IHNw
bGl0IGluIHR3byB0byBhbGxvdyBmb3IgY29uc3RydWN0aW9uCisgICAgICAgICAgICB3aXRob3V0
IGEgV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBvYmplY3QuIFRoZSBib2R5
IG9mCisgICAgICAgICAgICB0aGUgY29uc3RydWN0b3Igd2FzIG1vdmVkIGludG8gdGhlIG5ldyBp
bml0aWFsaXplKCkgZnVuY3Rpb24gd2hpY2ggaXMKKyAgICAgICAgICAgIHNoYXJlZCBiZXR3ZWVu
IGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAgICAgUmVtb3ZlZCBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBhbmQgYWRkZWQKKyAgICAgICAgICAgIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOgorICAgICAgICAoV0tQYWdlU2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDQtMTUgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWRkIGVu
YWJsZS1tZWRpYSB3ZWJzZXR0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
QWRDbGlja0F0dHJpYnV0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0
cmlidXRpb24uY3BwCmluZGV4IDVkOTdmYWFjN2EzNGU3ZmFlNWY0YjNiZDQ5OWU1NDZiNDY5MGI4
YmEuLjUyNjQ1Njc0MTJkMjAyNDhkNjU1YTQzY2Q4ZDhhZTcwZjUwNDQ3YzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uY3BwCkBAIC04MCwxNSArODAsMTcg
QEAgT3B0aW9uYWw8QWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uPiBBZENsaWNrQXR0cmli
dXRpb246OnBhcnNlQ29udmVyc2lvblJlcXUKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6c2V0Q29udmVyc2lvbihDb252ZXJzaW9uJiYgY29udmVyc2lvbikK
K09wdGlvbmFsPFNlY29uZHM+IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Y29udmVydEFuZEdldEVhcmxp
ZXN0VGltZVRvU2VuZChDb252ZXJzaW9uJiYgY29udmVyc2lvbikKIHsKICAgICBpZiAoIWNvbnZl
cnNpb24uaXNWYWxpZCgpIHx8IChtX2NvbnZlcnNpb24gJiYgbV9jb252ZXJzaW9uLT5wcmlvcml0
eSA+IGNvbnZlcnNpb24ucHJpb3JpdHkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2NvbnZlcnNpb24gPSBXVEZNb3ZlKGNvbnZlcnNpb24pOwogICAgIC8v
IDI0LTQ4IGhvdXIgZGVsYXkgYmVmb3JlIHNlbmRpbmcuIFRoaXMgaGVscHMgcHJpdmFjeSBzaW5j
ZSB0aGUgY29udmVyc2lvbiBhbmQgdGhlIGF0dHJpYnV0aW9uCiAgICAgLy8gcmVxdWVzdHMgYXJl
IGRldGFjaGVkIGFuZCB0aGUgdGltZSBvZiB0aGUgYXR0cmlidXRpb24gZG9lcyBub3QgcmV2ZWFs
IHRoZSB0aW1lIG9mIHRoZSBjb252ZXJzaW9uLgotICAgIG1fZWFybGllc3RUaW1lVG9TZW5kID0g
bV90aW1lT2ZBZENsaWNrICsgMjRfaCArIFNlY29uZHMocmFuZG9tTnVtYmVyKCkgKiAoMjRfaCku
dmFsdWUoKSk7CisgICAgYXV0byBzZWNvbmRzID0gMjRfaCArIFNlY29uZHMocmFuZG9tTnVtYmVy
KCkgKiAoMjRfaCkudmFsdWUoKSk7CisgICAgbV9lYXJsaWVzdFRpbWVUb1NlbmQgPSBXYWxsVGlt
ZTo6bm93KCkgKyBzZWNvbmRzOworICAgIHJldHVybiBzZWNvbmRzOwogfQogCiBVUkwgQWRDbGlj
a0F0dHJpYnV0aW9uOjp1cmwoKSBjb25zdApAQCAtOTksNyArMTAxLDcgQEAgVVJMIEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6dXJsKCkgY29uc3QKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRwczovLyIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKG1f
c291cmNlLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIi8ud2VsbC1rbm93bi9hZC1jbGljay1hdHRyaWJ1dGlvbi8iKTsKKyAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoYWRDbGlja0F0dHJpYnV0aW9uUGF0aFByZWZpeCk7CiAgICAgYnVpbGRl
ci5hcHBlbmROdW1iZXIobV9jb252ZXJzaW9uLnZhbHVlKCkuZGF0YSk7CiAgICAgYnVpbGRlci5h
cHBlbmQoJy8nKTsKICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX2NhbXBhaWduLmlkKTsKQEAg
LTEyOCw2ICsxMzAsMzIgQEAgVVJMIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6cmVmZXJyZXIoKSBjb25z
dAogICAgIHJldHVybiBVUkwoKTsKIH0KIAorVVJMIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6dXJsRm9y
VGVzdGluZyhjb25zdCBVUkwmIGJhc2VVUkwpIGNvbnN0Cit7CisgICAgYXV0byBob3N0ID0gbV9z
b3VyY2UucmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCk7CisgICAgaWYgKGhvc3QgIT0gImxvY2Fs
aG9zdCIgJiYgaG9zdCAhPSAiMTI3LjAuMC4xIikKKyAgICAgICAgcmV0dXJuIFVSTCgpOworCisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiP2Nv
bnZlcnNpb249Iik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9jb252ZXJzaW9uLnZhbHVl
KCkuZGF0YSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCImY2FtcGFpZ249Iik7CisgICAg
YnVpbGRlci5hcHBlbmROdW1iZXIobV9jYW1wYWlnbi5pZCk7CisgICAgcmV0dXJuIFVSTChiYXNl
VVJMLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
bWFya0NvbnZlcnNpb25Bc1NlbnQoKQoreworICAgIEFTU0VSVChtX2NvbnZlcnNpb24pOworICAg
IGlmIChtX2NvbnZlcnNpb24pCisgICAgICAgIG1fY29udmVyc2lvbi0+d2FzU2VudCA9IENvbnZl
cnNpb246Oldhc1NlbnQ6OlllczsKK30KKworYm9vbCBBZENsaWNrQXR0cmlidXRpb246Ondhc0Nv
bnZlcnNpb25TZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb252ZXJzaW9uICYmIG1fY29u
dmVyc2lvbi0+d2FzU2VudCA9PSBDb252ZXJzaW9uOjpXYXNTZW50OjpZZXM7Cit9CisKIFN0cmlu
ZyBBZENsaWNrQXR0cmlidXRpb246OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CkBAIC0xNDIsNiArMTcwLDE1IEBAIFN0cmluZyBBZENsaWNrQXR0cmlidXRp
b246OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9jb252
ZXJzaW9uLnZhbHVlKCkuZGF0YSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG5D
b252ZXJzaW9uIHByaW9yaXR5OiAiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9j
b252ZXJzaW9uLnZhbHVlKCkucHJpb3JpdHkpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIlxuQ29udmVyc2lvbiBlYXJsaWVzdCB0aW1lIHRvIHNlbmQ6ICIpOworICAgICAgICBpZiAo
IW1fZWFybGllc3RUaW1lVG9TZW5kKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJOb3Qgc2V0Iik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzZWNvbmRzVW50
aWxTZW5kID0gKm1fZWFybGllc3RUaW1lVG9TZW5kIC0gV2FsbFRpbWU6Om5vdygpOworICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoKHNlY29uZHNVbnRpbFNlbmQgPj0gMjRfaCAmJiBzZWNvbmRz
VW50aWxTZW5kIDw9IDQ4X2gpID8gIldpdGhpbiAyNC00OCBob3VycyIgOiAiT3V0c2lkZSAyNC00
OCBob3VycyIpOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG5D
b252ZXJzaW9uIHJlcXVlc3Qgc2VudDogIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCh3YXND
b252ZXJzaW9uU2VudCgpID8gInRydWUiIDogImZhbHNlIikpOwogICAgIH0gZWxzZQogICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxuTm8gY29udmVyc2lvbiBkYXRhLiIpOwogICAgIGJ1
aWxkZXIuYXBwZW5kKCdcbicpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Fk
Q2xpY2tBdHRyaWJ1dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0FkQ2xpY2tBdHRyaWJ1
dGlvbi5oCmluZGV4IDg4ZGI4YzIxNjA2NDcyYTI3N2FjMTIxOWNmZjVlZmM5NjBjZDAwODEuLjBl
ZjMwZGRhZjZkMDRiMTkwZjU1NzM1Nzg0ZWQ1NTc2ZTg4NWE2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9BZENsaWNrQXR0cmlidXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQWRDbGlja0F0dHJpYnV0aW9uLmgKQEAgLTIwMyw5ICsyMDMsMTIgQEAgcHVibGlj
OgogICAgIH07CiAgICAgCiAgICAgc3RydWN0IENvbnZlcnNpb24gewotICAgICAgICBleHBsaWNp
dCBDb252ZXJzaW9uKENvbnZlcnNpb25EYXRhIGRhdGEsIFByaW9yaXR5IHByaW9yaXR5KQorICAg
ICAgICBlbnVtIGNsYXNzIFdhc1NlbnQgOiBib29sIHsgTm8sIFllcyB9OworICAgICAgICAKKyAg
ICAgICAgQ29udmVyc2lvbihDb252ZXJzaW9uRGF0YSBkYXRhLCBQcmlvcml0eSBwcmlvcml0eSwg
V2FzU2VudCB3YXNTZW50ID0gV2FzU2VudDo6Tm8pCiAgICAgICAgICAgICA6IGRhdGEgeyBkYXRh
IH0KICAgICAgICAgICAgICwgcHJpb3JpdHkgeyBwcmlvcml0eS52YWx1ZSB9CisgICAgICAgICAg
ICAsIHdhc1NlbnQgeyB3YXNTZW50IH0KICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTIxNiw2
ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBDb252ZXJzaW9uRGF0YSBkYXRh
OwogICAgICAgICBQcmlvcml0eVZhbHVlIHByaW9yaXR5OworICAgICAgICBXYXNTZW50IHdhc1Nl
bnQgPSBXYXNTZW50OjpObzsKIAogICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxDb252ZXJzaW9uPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjMxLDEy
ICsyMzUsMTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBP
cHRpb25hbDxDb252ZXJzaW9uPiBwYXJzZUNvbnZlcnNpb25SZXF1ZXN0KGNvbnN0IFVSTCYgcmVk
aXJlY3RVUkwpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29udmVyc2lvbihDb252ZXJz
aW9uJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNlY29uZHM+IGNvbnZlcnRBbmRH
ZXRFYXJsaWVzdFRpbWVUb1NlbmQoQ29udmVyc2lvbiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBV
UkwgdXJsKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVVJMIHVybEZvclRlc3RpbmcoY29u
c3QgVVJMJiBiYXNlVVJMRm9yVGVzdGluZykgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVVJM
IHJlZmVycmVyKCkgY29uc3Q7CiAgICAgY29uc3QgU291cmNlJiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfTsKICAgICBjb25zdCBEZXN0aW5hdGlvbiYgZGVzdGluYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9OwogICAgIE9wdGlvbmFsPFdhbGxUaW1lPiBl
YXJsaWVzdFRpbWVUb1NlbmQoKSBjb25zdCB7IHJldHVybiBtX2VhcmxpZXN0VGltZVRvU2VuZDsg
fTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtDb252ZXJzaW9uQXNTZW50KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCB3YXNDb252ZXJzaW9uU2VudCgpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTMwNCw3ICszMTEsNyBA
QCBPcHRpb25hbDxBZENsaWNrQXR0cmlidXRpb24+IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBZENsaWNr
QXR0cmlidXRpb246OkNvbnZlcnNpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewotICAgIGVuY29kZXIgPDwgZGF0YSA8PCBwcmlvcml0eTsKKyAgICBlbmNvZGVyIDw8IGRhdGEg
PDwgcHJpb3JpdHkgPDwgd2FzU2VudDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAg
LTMyMCw3ICszMjcsMTIgQEAgT3B0aW9uYWw8QWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9u
PiBBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb246OmRlY29kZSgKICAgICBpZiAoIXByaW9y
aXR5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAotICAgIHJldHVybiBDb252
ZXJzaW9uIHsgV1RGTW92ZSgqZGF0YSksIFByaW9yaXR5IHsgV1RGTW92ZSgqcHJpb3JpdHkpIH0g
fTsKKyAgICBPcHRpb25hbDxXYXNTZW50PiB3YXNTZW50OworICAgIGRlY29kZXIgPj4gd2FzU2Vu
dDsKKyAgICBpZiAoIXdhc1NlbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
CisgICAgcmV0dXJuIENvbnZlcnNpb24geyBXVEZNb3ZlKCpkYXRhKSwgUHJpb3JpdHkgeyAqcHJp
b3JpdHkgfSwgKndhc1NlbnQgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RpbWVyLmgKaW5kZXggMTdlZjAyMWM2NzJiZmI1MzMxMDgyNmYzMTlkZDYwYmU5MWE3
MDgwMi4uZTcwODE1NjdmNDNkYjk0Nzk4ZWZhOTRlYzVmM2E0NjJjMjUyYmQwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaW1lci5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0b3AoKTsKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAKLSAgICBTZWNv
bmRzIG5leHRGaXJlSW50ZXJ2YWwoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZWNvbmRz
IG5leHRGaXJlSW50ZXJ2YWwoKSBjb25zdDsKICAgICBTZWNvbmRzIG5leHRVbmFsaWduZWRGaXJl
SW50ZXJ2YWwoKSBjb25zdDsKICAgICBTZWNvbmRzIHJlcGVhdEludGVydmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBlYXRJbnRlcnZhbDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNzRiMDA2ZDdkODgzYjg4NmZhZGYwYmQ2NmU0ZGVhODM5NTZiNGNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZldGNoT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9ybURhdGEuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordXNpbmcg
U291cmNlID0gQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2U7Cit1c2luZyBEZXN0aW5hdGlvbiA9
IEFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGluYXRpb247Cit1c2luZyBEZXN0aW5hdGlvbk1hcCA9
IEhhc2hNYXA8RGVzdGluYXRpb24sIEFkQ2xpY2tBdHRyaWJ1dGlvbj47Cit1c2luZyBDb252ZXJz
aW9uID0gQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uOworCitEZXN0aW5hdGlvbk1hcCYg
QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2Uo
Y29uc3QgU291cmNlJiBzb3VyY2UpCit7CisgICAgcmV0dXJuIG1fYWRDbGlja0F0dHJpYnV0aW9u
TWFwLmVuc3VyZShzb3VyY2UsIFtdIHsKKyAgICAgICAgcmV0dXJuIERlc3RpbmF0aW9uTWFwIHsg
fTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9u
TWFuYWdlcjo6c3RvcmUoQWRDbGlja0F0dHJpYnV0aW9uJiYgYWRDbGlja0F0dHJpYnV0aW9uKQor
eworICAgIGF1dG8mIGRlc3RpbmF0aW9uTWFwRm9yU291cmNlID0gZW5zdXJlRGVzdGluYXRpb25N
YXBGb3JTb3VyY2UoYWRDbGlja0F0dHJpYnV0aW9uLnNvdXJjZSgpKTsKKyAgICBkZXN0aW5hdGlv
bk1hcEZvclNvdXJjZS5hZGQoYWRDbGlja0F0dHJpYnV0aW9uLmRlc3RpbmF0aW9uKCksIFdURk1v
dmUoYWRDbGlja0F0dHJpYnV0aW9uKSk7Cit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFu
YWdlcjo6c3RhcnRUaW1lcihTZWNvbmRzIHNlY29uZHMpCit7CisgICAgbV9maXJlUGVuZGluZ0Nv
bnZlcnNpb25SZXF1ZXN0c1RpbWVyLnN0YXJ0T25lU2hvdChtX2lzUnVubmluZ1Rlc3QgPyAwX3Mg
OiBzZWNvbmRzKTsKK30KKwordm9pZCBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjpjb252ZXJ0
KGNvbnN0IFNvdXJjZSYgc291cmNlLCBjb25zdCBEZXN0aW5hdGlvbiYgZGVzdGluYXRpb24sIENv
bnZlcnNpb24mJiBjb252ZXJzaW9uKQoreworICAgIGlmICghY29udmVyc2lvbi5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc291cmNlSXRlciA9IG1fYWRDbGlja0F0dHJp
YnV0aW9uTWFwLmZpbmQoc291cmNlKTsKKyAgICBpZiAoc291cmNlSXRlciA9PSBtX2FkQ2xpY2tB
dHRyaWJ1dGlvbk1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBkZXN0aW5h
dGlvbkl0ZXIgPSBzb3VyY2VJdGVyLT52YWx1ZS5maW5kKGRlc3RpbmF0aW9uKTsKKyAgICBpZiAo
ZGVzdGluYXRpb25JdGVyID09IHNvdXJjZUl0ZXItPnZhbHVlLmVuZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBkZXN0aW5hdGlvbkl0ZXItPnZhbHVl
LmNvbnZlcnRBbmRHZXRFYXJsaWVzdFRpbWVUb1NlbmQoV1RGTW92ZShjb252ZXJzaW9uKSk7Cisg
ICAgCisgICAgaWYgKCFzZWNvbmRzVW50aWxTZW5kKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKG1fZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHNUaW1lci5pc0FjdGl2ZSgpICYm
IG1fZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHNUaW1lci5uZXh0RmlyZUludGVydmFsKCkg
PCAqc2Vjb25kc1VudGlsU2VuZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0YXJ0VGlt
ZXIoKnNlY29uZHNVbnRpbFNlbmQpOworfQorCit2b2lkIEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFn
ZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdChjb25zdCBBZENsaWNrQXR0cmlidXRpb24mIGF0dHJp
YnV0aW9uKQoreworICAgIGF1dG8gY29udmVyc2lvblVSTCA9IG1fY29udmVyc2lvbkJhc2VVUkxG
b3JUZXN0aW5nID8gYXR0cmlidXRpb24udXJsRm9yVGVzdGluZygqbV9jb252ZXJzaW9uQmFzZVVS
TEZvclRlc3RpbmcpIDogYXR0cmlidXRpb24udXJsKCk7CisgICAgaWYgKGNvbnZlcnNpb25VUkwu
aXNFbXB0eSgpIHx8ICFjb252ZXJzaW9uVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBjb252ZXJzaW9uUmVmZXJyZXJVUkwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigp
OworICAgIGlmIChjb252ZXJzaW9uUmVmZXJyZXJVUkwuaXNFbXB0eSgpIHx8ICFjb252ZXJzaW9u
UmVmZXJyZXJVUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCB7IGNvbnZlcnNpb25VUkwgfTsKKyAgICAKKyAgICByZXF1ZXN0LnNldEhU
VFBNZXRob2QoIlBPU1QiX3MpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2wsICJtYXgtYWdlPTAiX3MpOworICAgIHJlcXVlc3Quc2V0
SFRUUFJlZmVycmVyKGNvbnZlcnNpb25SZWZlcnJlclVSTC5zdHJpbmcoKSk7CisKKyAgICBGZXRj
aE9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLmNyZWRlbnRpYWxzID0gRmV0Y2hPcHRpb25z
OjpDcmVkZW50aWFsczo6T21pdDsKKyAgICBvcHRpb25zLnJlZGlyZWN0ID0gRmV0Y2hPcHRpb25z
OjpSZWRpcmVjdDo6RXJyb3I7CisKKyAgICBzdGF0aWMgdWludDY0X3QgaWRlbnRpZmllciA9IDA7
CisgICAgCisgICAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7
CisgICAgbG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllciA9ICsraWRlbnRpZmllcjsKKyAgICBsb2Fk
UGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBsb2FkUGFyYW1ldGVycy5zb3VyY2VP
cmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7Cisg
ICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCk7
CisgICAgLy8gRklYTUU6IFN3aXRjaCB0byB0aGUgdXNlIG9mIGFuIGVwaGVtZXJhbCwgc3RhdGVs
ZXNzIHNlc3Npb24uCisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKKyAgICBsb2FkUGFyYW1ldGVycy5zdG9yZWRDcmVkZW50
aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKKyAgICBsb2Fk
UGFyYW1ldGVycy5vcHRpb25zID0gb3B0aW9uczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gdHJ1ZTsKKyAgICBsb2FkUGFyYW1l
dGVycy5zaG91bGRSZXN0cmljdEhUVFBSZXNwb25zZUFjY2VzcyA9IGZhbHNlOworCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBsb2FkUGFyYW1ldGVycy5tYWluRG9jdW1lbnRV
UkwgPSBXVEZNb3ZlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7CisjZW5kaWYKKworICAgIG1fcGlu
Z0xvYWRGdW5jdGlvbihXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwgW10oY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYgZXJyb3IsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgbG9nZ2luZyBvZiBlcnJvcnMgdG8gYSBk
ZWRpY2F0ZWQgY2hhbm5lbC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHJlc3BvbnNlKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICB9KTsKK30KKwordm9pZCBBZENsaWNrQXR0cmli
dXRpb25NYW5hZ2VyOjpmaXJlUGVuZGluZ0NvbnZlcnNpb25SZXF1ZXN0cygpCit7CisgICAgYXV0
byBuZXh0VGltZVRvRmlyZSA9IFNlY29uZHM6OmluZmluaXR5KCk7CisgICAgZm9yIChhdXRvJiBp
bm5lck1hcCA6IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgYXR0cmlidXRpb24gOiBpbm5lck1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAg
aWYgKGF0dHJpYnV0aW9uLndhc0NvbnZlcnNpb25TZW50KCkpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kID0gYXR0cmlidXRpb24u
ZWFybGllc3RUaW1lVG9TZW5kKCk7CisgICAgICAgICAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2Vu
ZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYXV0byBub3cgPSBX
YWxsVGltZTo6bm93KCk7CisgICAgICAgICAgICBpZiAoKmVhcmxpZXN0VGltZVRvU2VuZCA8PSBu
b3cgfHwgbV9pc1J1bm5pbmdUZXN0KSB7CisgICAgICAgICAgICAgICAgZmlyZUNvbnZlcnNpb25S
ZXF1ZXN0KGF0dHJpYnV0aW9uKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXR0
cmlidXRpb24ubWFya0NvbnZlcnNpb25Bc1NlbnQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBzZWNvbmRzID0gKmVhcmxpZXN0
VGltZVRvU2VuZCAtIG5vdzsKKyAgICAgICAgICAgIG5leHRUaW1lVG9GaXJlID0gc3RkOjptaW4o
bmV4dFRpbWVUb0ZpcmUsIHNlY29uZHMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5l
eHRUaW1lVG9GaXJlIDwgU2Vjb25kczo6aW5maW5pdHkoKSkKKyAgICAgICAgc3RhcnRUaW1lcihu
ZXh0VGltZVRvRmlyZSk7CisKKyAgICAvLyBGSVhNRTogQWRkIGNsZWFuaW5nIG9mIHNlbnQgY29u
dmVyc2lvbnMuCit9CisKK3ZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6Y2xlYXIoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fYWRD
bGlja0F0dHJpYnV0aW9uTWFwLmNsZWFyKCk7CisgICAgbV9jb252ZXJzaW9uQmFzZVVSTEZvclRl
c3RpbmcgPSB7IH07CisgICAgbV9pc1J1bm5pbmdUZXN0ID0gZmFsc2U7CisgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKK30KKwordm9pZCBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyOjp0b1N0cmlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNv
bnN0Cit7CisgICAgaWYgKG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCJObyBzdG9yZWQgQWQgQ2xpY2sgQXR0cmlidXRp
b24gZGF0YS4iX3MpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0
byYgaW5uZXJNYXAgOiBtX2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC52YWx1ZXMoKSkgeworICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGlvbk51bWJlciA9IDE7CisgICAgICAgIGZvciAoYXV0byYgYXR0
cmlidXRpb24gOiBpbm5lck1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gIik7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZE51bWJlcihhdHRyaWJ1dGlvbk51bWJlcisrKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRp
b24udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0aW9uSGFuZGxl
cihidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25N
YW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q5OGZiNWUyYmQ2NDUwY2JmYmRhOTI1ODJmNjlmNmFmYzdi
NmZiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRD
bGlja0F0dHJpYnV0aW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyIHsKK3B1
YmxpYzoKKworICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47CisgICAgdXNpbmcgQWRDbGlja0F0dHJpYnV0aW9uID0gV2ViQ29yZTo6QWRDbGlj
a0F0dHJpYnV0aW9uOworICAgIHVzaW5nIFNvdXJjZSA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1
dGlvbjo6U291cmNlOworICAgIHVzaW5nIERlc3RpbmF0aW9uID0gV2ViQ29yZTo6QWRDbGlja0F0
dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjsKKyAgICB1c2luZyBEZXN0aW5hdGlvbk1hcCA9IEhhc2hN
YXA8RGVzdGluYXRpb24sIEFkQ2xpY2tBdHRyaWJ1dGlvbj47CisgICAgdXNpbmcgQ29udmVyc2lv
biA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbjsKKworICAgIEFkQ2xp
Y2tBdHRyaWJ1dGlvbk1hbmFnZXIoKQorICAgICAgICA6IG1fZmlyZVBlbmRpbmdDb252ZXJzaW9u
UmVxdWVzdHNUaW1lcigqdGhpcywgJkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI6OmZpcmVQZW5k
aW5nQ29udmVyc2lvblJlcXVlc3RzKQorICAgICwgbV9waW5nTG9hZEZ1bmN0aW9uKFtdKE5ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYgcGFyYW1zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHBh
cmFtcyk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OlJlc291cmNlRXJyb3Io
KSwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICB9KQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlKEFkQ2xpY2tBdHRyaWJ1dGlvbiYmKTsKKyAgICB2b2lkIGNvbnZlcnQo
Y29uc3QgU291cmNlJiwgY29uc3QgRGVzdGluYXRpb24mLCBDb252ZXJzaW9uJiYpOworICAgIHZv
aWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHRvU3RyaW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJikgY29uc3Q7CisgICAgdm9pZCBzZXRQ
aW5nTG9hZEZ1bmN0aW9uKEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpPiYmKT4mJiBwaW5nTG9hZEZ1bmN0
aW9uKSB7IG1fcGluZ0xvYWRGdW5jdGlvbiA9IFdURk1vdmUocGluZ0xvYWRGdW5jdGlvbik7IH0K
KyAgICB2b2lkIHNldE92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9pc1J1
bm5pbmdUZXN0ID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldENvbnZlcnNpb25VUkxGb3JUZXN0aW5n
KFVSTCYmIHRlc3RVUkwpIHsgbV9jb252ZXJzaW9uQmFzZVVSTEZvclRlc3RpbmcgPSBXVEZNb3Zl
KHRlc3RVUkwpOyB9CisKK3ByaXZhdGU6CisgICAgRGVzdGluYXRpb25NYXAmIGVuc3VyZURlc3Rp
bmF0aW9uTWFwRm9yU291cmNlKGNvbnN0IFNvdXJjZSYpOworICAgIHZvaWQgc3RhcnRUaW1lcihT
ZWNvbmRzKTsKKyAgICB2b2lkIGZpcmVDb252ZXJzaW9uUmVxdWVzdChjb25zdCBBZENsaWNrQXR0
cmlidXRpb24mKTsKKyAgICB2b2lkIGZpcmVQZW5kaW5nQ29udmVyc2lvblJlcXVlc3RzKCk7CisK
KyAgICBIYXNoTWFwPFNvdXJjZSwgRGVzdGluYXRpb25NYXA+IG1fYWRDbGlja0F0dHJpYnV0aW9u
TWFwOworICAgIFdlYkNvcmU6OlRpbWVyIG1fZmlyZVBlbmRpbmdDb252ZXJzaW9uUmVxdWVzdHNU
aW1lcjsKKyAgICBGdW5jdGlvbjx2b2lkKE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKT4mJik+IG1fcGluZ0xvYWRGdW5jdGlvbjsK
KyAgICBib29sIG1faXNSdW5uaW5nVGVzdCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8VVJMPiBt
X2NvbnZlcnNpb25CYXNlVVJMRm9yVGVzdGluZzsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Fk
Q2xpY2tBdHRyaWJ1dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtBZENsaWNrQXR0cmlidXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
OTFjMDk4NGMwMDkxZmQzMjJjMWQ4NGRjMWM1NjgxN2M5YjQ5MTZmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdv
cmtBZENsaWNrQXR0cmlidXRpb24uaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi11c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOwotdXNpbmcgQWRDbGlja0F0dHJpYnV0aW9uID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0
aW9uOwotdXNpbmcgU291cmNlID0gV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2U7
Ci11c2luZyBEZXN0aW5hdGlvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6RGVzdGlu
YXRpb247Ci11c2luZyBEZXN0aW5hdGlvbk1hcCA9IEhhc2hNYXA8RGVzdGluYXRpb24sIEFkQ2xp
Y2tBdHRyaWJ1dGlvbj47Ci11c2luZyBDb252ZXJzaW9uID0gV2ViQ29yZTo6QWRDbGlja0F0dHJp
YnV0aW9uOjpDb252ZXJzaW9uOwotCi1EZXN0aW5hdGlvbk1hcCYgTmV0d29ya0FkQ2xpY2tBdHRy
aWJ1dGlvbjo6ZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2UoY29uc3QgU291cmNlJiBzb3Vy
Y2UpCi17Ci0gICAgcmV0dXJuIG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLmVuc3VyZShzb3VyY2Us
IFtdIHsKLSAgICAgICAgcmV0dXJuIERlc3RpbmF0aW9uTWFwIHsgfTsKLSAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6c3RvcmUoQWRD
bGlja0F0dHJpYnV0aW9uJiYgYWRDbGlja0F0dHJpYnV0aW9uKQotewotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uTWFwRm9yU291cmNlID0gZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2UoYWRDbGlj
a0F0dHJpYnV0aW9uLnNvdXJjZSgpKTsKLSAgICBkZXN0aW5hdGlvbk1hcEZvclNvdXJjZS5hZGQo
YWRDbGlja0F0dHJpYnV0aW9uLmRlc3RpbmF0aW9uKCksIFdURk1vdmUoYWRDbGlja0F0dHJpYnV0
aW9uKSk7Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6Y29udmVydChjb25z
dCBTb3VyY2UmIHNvdXJjZSwgY29uc3QgRGVzdGluYXRpb24mIGRlc3RpbmF0aW9uLCBDb252ZXJz
aW9uJiYgY29udmVyc2lvbikKLXsKLSAgICBhdXRvIHNvdXJjZUl0ZXIgPSBtX2FkQ2xpY2tBdHRy
aWJ1dGlvbk1hcC5maW5kKHNvdXJjZSk7Ci0gICAgaWYgKHNvdXJjZUl0ZXIgPT0gbV9hZENsaWNr
QXR0cmlidXRpb25NYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGVzdGlu
YXRpb25JdGVyID0gc291cmNlSXRlci0+dmFsdWUuZmluZChkZXN0aW5hdGlvbik7Ci0gICAgaWYg
KGRlc3RpbmF0aW9uSXRlciA9PSBzb3VyY2VJdGVyLT52YWx1ZS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZGVzdGluYXRpb25JdGVyLT52YWx1ZS5zZXRDb252ZXJzaW9uKFdURk1vdmUo
Y29udmVyc2lvbikpOwotfQotCi12b2lkIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb246OmNsZWFy
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBt
X2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC5jbGVhcigpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci19Ci0KLXZvaWQgTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbjo6dG9TdHJpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAotewotICAg
IGlmIChtX2FkQ2xpY2tBdHRyaWJ1dGlvbk1hcC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcigiTm8gc3RvcmVkIEFkIENsaWNrIEF0dHJpYnV0aW9uIGRhdGEuIik7
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvJiBpbm5lck1hcCA6
IG1fYWRDbGlja0F0dHJpYnV0aW9uTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0aW9uTnVtYmVyID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGlvbiA6IGlu
bmVyTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIldl
YkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiAiKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TnVtYmVyKGF0dHJpYnV0aW9uTnVtYmVyKyspOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGlvbi50b1N0cmluZygp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGJ1aWxkZXIudG9T
dHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhMGVkM2Q1OWQ0YjE0ZGZlOTQzZTBkMjAzNTZm
ZWM3NzM0MTRhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtBZENsaWNrQXR0cmlidXRpb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPFdlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrQWRDbGlja0F0
dHJpYnV0aW9uIHsKLXB1YmxpYzoKLQotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgQWRDbGlja0F0dHJpYnV0aW9uID0g
V2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOwotICAgIHVzaW5nIFNvdXJjZSA9IFdlYkNvcmU6
OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlOwotICAgIHVzaW5nIERlc3RpbmF0aW9uID0gV2Vi
Q29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpEZXN0aW5hdGlvbjsKLSAgICB1c2luZyBEZXN0aW5h
dGlvbk1hcCA9IEhhc2hNYXA8RGVzdGluYXRpb24sIEFkQ2xpY2tBdHRyaWJ1dGlvbj47Ci0gICAg
dXNpbmcgQ29udmVyc2lvbiA9IFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lv
bjsKLQotICAgIHZvaWQgc3RvcmUoQWRDbGlja0F0dHJpYnV0aW9uJiYpOwotICAgIHZvaWQgY29u
dmVydChjb25zdCBTb3VyY2UmLCBjb25zdCBEZXN0aW5hdGlvbiYsIENvbnZlcnNpb24mJik7Ci0g
ICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgdG9T
dHJpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBEZXN0aW5hdGlvbk1hcCYgZW5zdXJlRGVzdGluYXRpb25NYXBGb3JTb3VyY2UoY29u
c3QgU291cmNlJik7Ci0KLSAgICBIYXNoTWFwPFNvdXJjZSwgRGVzdGluYXRpb25NYXA+IG1fYWRD
bGlja0F0dHJpYnV0aW9uTWFwOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBl
YmNjOWJlYWYwM2I1MzhkYjAxM2E5YWE5ZDJiNTMxNDY0NDQ0ZDFmLi4xZmI5NTVkNmZiNDdlMTNl
MjQyMmMwNDBlNjQ0NWEyY2JhZmUwZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjQ5NywxMyArMjQ5NywxMyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVN5bmNBbGxDb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzdG9yZUFkQ2xpY2tBdHRy
aWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1
dGlvbiYmIGFkQ2xpY2tBdHRyaWJ1dGlvbikKIHsKLSAgICBpZiAoYXV0byBzZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHNlc3Npb24tPnN0b3JlQWRDbGlja0F0dHJpYnV0
aW9uKFdURk1vdmUoYWRDbGlja0F0dHJpYnV0aW9uKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8gc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYgKGF1
dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm4g
c2Vzc2lvbi0+ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtMjUxMSwxMCArMjUxMSwyNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgQ29tcGxldGlvbgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybiBzZXNzaW9uLT5jbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0QWRDbGlj
a0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9u
SUQpKQorICAgICAgICBzZXNzaW9uLT5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyh2YWx1ZSk7CisgICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwor
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwmJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoYXV0byogc2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFdURk1vdmUodXJsKSk7Cisg
ICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXgg
MGJmZTNkYzYwODc5N2QzYTkxYWRjNDBkMmU1YzEwNzFiZDhhMDJhMC4uYTYyY2NiOGZiMWY5NTNi
NGQ3MjJjMmQwOGMxYzI3MDQ2NWIwOTBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMzI4LDYgKzMyOCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklELCBXZWJDb3JlOjpBZENs
aWNrQXR0cmlidXRpb24mJik7CiAgICAgdm9pZCBkdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6
U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpOwogICAgIHZvaWQg
Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBVUkwmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKIAogICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHN0b3JhZ2VRdW90YU1h
bmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgppbmRleCBkYmYzY2E3YWUyZTViMDhmMDhkNjVhODhkYzU2MDBmY2FlNTNkNmJk
Li44NzY0Njg4ZWVmMDU2YTQ2ZTYyYTEyNzIyM2YxMTdhNTFmNDEwNmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KQEAgLTE2OSw0ICsxNjksNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0aW9uKQog
ICAgIER1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAo
U3RyaW5nIGFkQ2xpY2tBdHRyaWJ1dGlvblN0YXRlKSBBc3luYwogICAgIENsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKKyAgICBTZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGJvb2wgdmFsdWUpIC0+ICgpIEFzeW5jCisgICAgU2V0QWRDbGlja0F0dHJpYnV0
aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwg
dXJsKSAtPiAoKSBBc3luYwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcAppbmRleCA5OGNkMDViYjc1NzFmNjRiMWZmYzE2Y2MzZGJhOGM1ODNk
NjlmNWNjLi5lZDEzOGMyZTJmY2ZmMGY5ZjUxOTQzZDQ0NTg0YmRmNmRiN2Y3ZWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcApAQCAtMjYs
OSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lv
bi5oIgogCi0jaW5jbHVkZSAiTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5oIgorI2luY2x1ZGUg
IkFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUGluZ0xvYWQuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgpAQCAtNzEsOCArNzMsMTQgQEAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0
d29ya1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKICAgICAsIG1fbmV0d29ya1Byb2Nlc3MobmV0d29ya1Byb2Nlc3MpCi0gICAg
LCBtX2FkQ2xpY2tBdHRyaWJ1dGlvbihtYWtlVW5pcXVlUmVmPE5ldHdvcmtBZENsaWNrQXR0cmli
dXRpb24+KCkpCisgICAgLCBtX2FkQ2xpY2tBdHRyaWJ1dGlvbihtYWtlVW5pcXVlUmVmPEFkQ2xp
Y2tBdHRyaWJ1dGlvbk1hbmFnZXI+KCkpCiB7CisgICAgbV9hZENsaWNrQXR0cmlidXRpb24tPnNl
dFBpbmdMb2FkRnVuY3Rpb24oW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYgbG9hZFBhcmFtZXRlcnMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBQaW5nTG9hZCBtYW5h
Z2VzIGl0cyBvd24gbGlmZXRpbWUsIGRlbGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhh
cyBiZWVuIGZ1bGZpbGxlZC4KKyAgICAgICAgbmV3IFBpbmdMb2FkKG1fbmV0d29ya1Byb2Nlc3Ms
IFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQpAQCAtMTU1LDQg
KzE2MywxNCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldAogICAgIG1fYWRDbGlja0F0dHJpYnV0
aW9uLT5jbGVhcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgTmV0d29y
a1Nlc3Npb246OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJv
b2wgdmFsdWUpCit7CisgICAgbV9hZENsaWNrQXR0cmlidXRpb24tPnNldE92ZXJyaWRlVGltZXJG
b3JUZXN0aW5nKHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoVVJMJiYgdXJsKQoreworICAgIG1fYWRD
bGlja0F0dHJpYnV0aW9uLT5zZXRDb252ZXJzaW9uVVJMRm9yVGVzdGluZyhXVEZNb3ZlKHVybCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCBhOWVhMjg3NjYxMGZjNWE5YjdjMjIyMDM2YmU0
MGY5OTZkNTBiZDJlLi41NmVhMmEwOTc5MDI2YWJkMTk1MmU1ODFmZWRmNDI3ZDIxNDJmMWFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC00
NSw3ICs0NSw3IEBAIGVudW0gY2xhc3MgU2hvdWxkU2FtcGxlIDogYm9vbDsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb247CitjbGFzcyBBZENs
aWNrQXR0cmlidXRpb25NYW5hZ2VyOwogY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0
d29ya1Byb2Nlc3M7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CkBAIC04
Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnZlcnRBZENsaWNrQXR0cmlidXRpb24o
Y29uc3QgV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UmLCBjb25zdCBXZWJDb3Jl
OjpBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uJiwgV2ViQ29yZTo6QWRDbGlja0F0dHJp
YnV0aW9uOjpDb252ZXJzaW9uJiYpOwogICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpOwogICAgIHZvaWQgY2xlYXJBZENsaWNr
QXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpOworICAg
IHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoVVJMJiYp
OwogCiBwcm90ZWN0ZWQ6CiAgICAgTmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3MmLCBQQUw6
OlNlc3Npb25JRCk7CkBAIC05Nyw3ICs5OSw3IEBAIHByb3RlY3RlZDoKICAgICBFbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIG1fZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSB7IEVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU6Ok5vIH07
CiAgICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFudWFsUHJldmFsZW50UmVzb3VyY2U7CiAjZW5kaWYKLSAgICBVbmlxdWVSZWY8TmV0d29ya0Fk
Q2xpY2tBdHRyaWJ1dGlvbj4gbV9hZENsaWNrQXR0cmlidXRpb247CisgICAgVW5pcXVlUmVmPEFk
Q2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXI+IG1fYWRDbGlja0F0dHJpYnV0aW9uOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1BpbmdMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQu
Y3BwCmluZGV4IDI5Njg1ZTdlNTlmNzMzZDI5OTM2YTUwMTM2ZmY5MjU3NjQ4YWQ4ZTYuLjQ5NTUz
MDJkYTA3ODljMWU1ODNjMDhmOTQ3M2M5MmNhMzk5ZTIzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCkBAIC00MCw2ICs0MCwxNSBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1BpbmdMb2FkOjpQaW5nTG9hZChO
ZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZUVy
cm9yJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAg
IDogbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCisgICAgLCBtX2NvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgICwgbV90aW1lb3V0VGltZXIo
KnRoaXMsICZQaW5nTG9hZDo6dGltZW91dFRpbWVyRmlyZWQpCisgICAgLCBtX25ldHdvcmtMb2Fk
Q2hlY2tlcihtYWtlVW5pcXVlUmVmPE5ldHdvcmtMb2FkQ2hlY2tlcj4obmV0d29ya1Byb2Nlc3Ms
IEZldGNoT3B0aW9ucyB7IG1fcGFyYW1ldGVycy5vcHRpb25zfSwgbV9wYXJhbWV0ZXJzLnNlc3Np
b25JRCwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdU
Rk1vdmUobV9wYXJhbWV0ZXJzLm9yaWdpbmFsUmVxdWVzdEhlYWRlcnMpLCBVUkwgeyBtX3BhcmFt
ZXRlcnMucmVxdWVzdC51cmwoKSB9LCBtX3BhcmFtZXRlcnMuc291cmNlT3JpZ2luLmNvcHlSZWYo
KSwgbV9wYXJhbWV0ZXJzLnByZWZsaWdodFBvbGljeSwgbV9wYXJhbWV0ZXJzLnJlcXVlc3QuaHR0
cFJlZmVycmVyKCkpKQoreworICAgIGluaXRpYWxpemUobmV0d29ya1Byb2Nlc3MpOworfQorCiBQ
aW5nTG9hZDo6UGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lY3Rp
b24sIE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMmJiBwYXJhbWV0ZXJzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291
cmNlRXJyb3ImLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgOiBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCkBAIC01Miw2ICs2MSwxMSBA
QCBQaW5nTG9hZDo6UGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5l
Y3Rpb24sIE5ldHdvcmtQcm9jZXNzJiBuZQogICAgICAgICAgICAgZmlsZS0+cHJlcGFyZUZvckZp
bGVBY2Nlc3MoKTsKICAgICB9CiAKKyAgICBpbml0aWFsaXplKG5ldHdvcmtQcm9jZXNzKTsKK30K
Kwordm9pZCBQaW5nTG9hZDo6aW5pdGlhbGl6ZShOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nl
c3MpCit7CiAgICAgbV9uZXR3b3JrTG9hZENoZWNrZXItPmVuYWJsZUNvbnRlbnRFeHRlbnNpb25z
Q2hlY2soKTsKICAgICBpZiAobV9wYXJhbWV0ZXJzLmNzcFJlc3BvbnNlSGVhZGVycykKICAgICAg
ICAgbV9uZXR3b3JrTG9hZENoZWNrZXItPnNldENTUFJlc3BvbnNlSGVhZGVycyhXVEZNb3ZlKG1f
cGFyYW1ldGVycy5jc3BSZXNwb25zZUhlYWRlcnMudmFsdWUoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9QaW5nTG9hZC5oCmluZGV4IDkwYWFhZTQ1MTcwOTE5YmQ5ODQ5ODI4NTRlYWQ5
MWM1YTcxOTU2NTkuLmM3ZTEyYmIxMzBkMDQ5YzVkMGE1OTdjMDFmZTViZmZjOGIyMjFiZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmgKQEAgLTQyLDkgKzQyLDExIEBA
IGNsYXNzIE5ldHdvcmtQcm9jZXNzOwogY2xhc3MgUGluZ0xvYWQgZmluYWwgOiBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8UGluZ0xvYWQ+LCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudCB7CiBw
dWJsaWM6CiAgICAgUGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBOZXR3
b3JrUHJvY2VzcyYsIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKT4mJik7Ci0gICAgCisgICAgUGluZ0xvYWQoTmV0d29ya1Byb2Nl
c3MmLCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJik+JiYpOworCiBwcml2YXRlOgogICAgIH5QaW5nTG9hZCgpOworICAgIHZvaWQg
aW5pdGlhbGl6ZShOZXR3b3JrUHJvY2VzcyYpOwogCiAgICAgY29uc3QgVVJMJiBjdXJyZW50VVJM
KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDg4MWQxNGFhOGM2YzIyYWM5MWNjNWJjMTVhMzUw
ZDNjMTIyMDFiMDguLjNjNzI4MWUwODUzNGVhNGY1M2VkMmU5ZTMxOWU5MGI4ZjU1MDhjZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogLy8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWRDbGlj
a0F0dHJpYnV0aW9uLmNwcAorTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdl
ci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCmluZGV4IDVmNjY1YTUyMmM1YmRjNzM3ZmVhMTVlZWY1ZmVjZWYxY2Jm
MTYzMGEuLjQxNGRjNDk2Zjc1OTMzM2FmNDZhYTlmMzkyMzU3NTRlMDE1ZDM5OTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMjczOCwzICsyNzM4LDE3IEBA
IHZvaWQgV0tQYWdlQ2xlYXJBZENsaWNrQXR0cmlidXRpb24oV0tQYWdlUmVmIHBhZ2UsIFdLUGFn
ZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uCiAgICAgICAgIGNhbGxiYWNrKGNhbGxiYWNrQ29udGV4
dCk7CiAgICAgfSk7CiB9CisKK3ZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJp
ZGVUaW1lckZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgdmFsdWUsIFdLUGFnZVNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ss
IHZvaWQqIGNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKHZhbHVlLCBbY2FsbGJhY2tDb250ZXh0
LCBjYWxsYmFja10gKCkgeworICAgICAgICBjYWxsYmFjayhjYWxsYmFja0NvbnRleHQpOworICAg
IH0pOworfQorCit2b2lkIFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBVUkxSZWYsIFdLUGFnZVNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ssIHZv
aWQqIGNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoVVJM
UmVmKSksIFtjYWxsYmFja0NvbnRleHQsIGNhbGxiYWNrXSAoKSB7CisgICAgICAgIGNhbGxiYWNr
KGNhbGxiYWNrQ29udGV4dCk7CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2VQcml2YXRlLmgKaW5kZXggYjA3NmU3NWRhN2Y1YTU1ODk0OGE1NmU4ZGIx
M2E5MjJkODg1MmQyYS4uYzk5ZjczMmE2MjdkN2NkNjkxNGJlZGM0OTI1ZDhmMGIwMzRkM2Q3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZVByaXZhdGUuaApAQCAt
MTg3LDYgKzE4NywxMCBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEdW1wQWRDbGlja0F0dHJpYnV0
aW9uRnVuY3Rpb24pKFdLU3RyaW5nUmVmIGFkQ2xpY2tBdHRyaWJ1dAogV0tfRVhQT1JUIHZvaWQg
V0tQYWdlRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihXS1BhZ2VSZWYsIFdLUGFnZUR1bXBBZENsaWNr
QXR0cmlidXRpb25GdW5jdGlvbiwgdm9pZCogY2FsbGJhY2tDb250ZXh0KTsKIHR5cGVkZWYgdm9p
ZCAoKldLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9u
Q29udGV4dCk7CiBXS19FWFBPUlQgdm9pZCBXS1BhZ2VDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihX
S1BhZ2VSZWYsIFdLUGFnZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uRnVuY3Rpb24sIHZvaWQqIGNh
bGxiYWNrQ29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRp
b25PdmVycmlkZVRpbWVyRm9yVGVzdGluZ0Z1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQp
OworV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgdmFsdWUsIFdLUGFnZVNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQq
IGNhbGxiYWNrQ29udGV4dCk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZ0Z1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRl
eHQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHVybFN0cmluZywgV0tQYWdl
U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmdGdW5jdGlvbiBjYWxs
YmFjaywgdm9pZCogY2FsbGJhY2tDb250ZXh0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCA0NzJmZGVlNDAzOGZkNWM5NDBhMTVjM2EwZjE1YzE0ZWM2OGUwZjE2
Li5jMzQ0ZDE2MzgyNzM1YjBiNjgzYzY5NmY5YjY2MjY3MTA3MWQ4NDY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKQEAgLTExNjIsMjYgKzExNjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERl
c3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogfQogI2Vu
ZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3Ry
aW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgp
KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJBZENs
aWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24oc2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzRGlk
VHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApp
bmRleCBkYWNlZWFlYmFiNDczNmRmMWQyMmE3ODFiYzE2OWI1Yjg4N2U5MDI3Li5mY2IyYjc4YjQ1
ZGM1NzJjMzc4ODNlOGU2YTgwZmJiZjhkYjFhNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMTcwLDkgKzE3
MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2
b2lkIGR1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOwotICAgIHZvaWQgY2xlYXJBZENsaWNrQXR0cmli
dXRpb24oUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KICAg
ICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOwogICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCAzMTIxZjliNTRkOTE3OGZhZTlmNjA4MzgyZDdkNmEyMzQy
MDdhMGRkLi41MmQ2NzlhOTcxYWU1YTFlZDIzOTA0NDdhZGEzNTJkYzczYmIyMjI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTg4NTgsMTIgKzg4NTgsNDYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRGF0YURldGUKIAogdm9pZCBXZWJQYWdlUHJveHk6OmR1bXBBZENs
aWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuZHVtcEFk
Q2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgeworICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lv
bklEKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0KK30KKwor
dm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JU
ZXN0aW5nKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJM
Rm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9CiB9CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggM2U4NmFmOTUxZTBlZGJlZTc5YmY3ODhmODM5ODY0MWFh
YzE3OGEyZi4uY2YwMGM2NDJhMmFjZWE5NWNjMGZkNzYyNGQxY2I3YjgwMmQ2ZWQ2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE1MDQsNiArMTUwNCw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0
aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0
cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogICAgIHZvaWQgc3BlZWNoU3ludGhlc2lz
Vm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiYmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKaW5kZXggMmE2MDQ2OTI3YTZmNmY5MWVlOGM2NGRlYWRmOTc3N2Y2YTJiMmNjNy4uN2NiMWJi
NDBhYTg2NDg3OTIwZjljNGQxNTM1MzRjMDI2ZTQ3ZDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjUwNywyNiArMjUwNyw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKICAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNsZWFyQ3VycmVudE1vZGlm
aWVyU3RhdGVGb3JUZXN0aW5nKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpkdW1wQWRD
bGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAo
IW1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJp
bmcoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5k
dW1wQWRDbGlja0F0dHJpYnV0aW9uKHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBt
X25ldHdvcmtQcm9jZXNzLT5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihzZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLSAgICAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNv
bW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvRG9tYWluLCB1aW50NjRfdCBwYWdlSUQpCiB7CiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCmluZGV4IDNiYjFmNzU4NmQ2MzRlMzJiMDIxMDI2YjlhNDQ2YWZhMzAwZTdjOGYuLjQ5
ZWY5NzIzNjg1MWM1MzMyYTgyN2QzNjgzNTFhYWU3ODdlNTY1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtNDkzLDggKzQ5Myw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZygp
OwogICAgIHZvaWQgY2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKIAotICAg
IHZvaWQgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7Ci0gICAgdm9pZCBjbGVhckFkQ2xpY2tBdHRy
aWJ1dGlvbihQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGNvbW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25z
dCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIHVpbnQ2NF90IHBhZ2VJRCk7
CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRjOTQ2ODk5NDRhNzcxOWMx
NzIzZThjOWRiMzA1ZTNkMWI1YTJhZmQuLmUxMDE1MWEzZTQwNjc5N2FhNzQ4ZTA2MGRjNTc1MjEx
ZmQ4MDgxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTEwNiw3ICsxMTA2LDcgQEAKIAkJNjNDMzJDMjgxRTk4MTE5MDAwNjk5QkQw
IC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNDMzJDMjcxRTk4MTE5MDAwNjk5QkQwIC8qIF9X
S0dlb2xvY2F0aW9uUG9zaXRpb25JbnRlcm5hbC5oICovOyB9OwogCQk2NUI4NkYxRTEyRjExREUz
MDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRs
ZUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZBNTA4MEJGMUYwRURBQUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE1MDgw
QkUxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkJEMDU4NjUyMjBDRThD
MjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAv
KiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggKi87IH07CisJCTZCRDA1ODY1MjIwQ0U4QzIw
MDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkQwNTg2MzIyMENFOEMyMDAwQkVENUMgLyog
QWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5oICovOyB9OwogCQk2QkU5NjlDMTFFNTRENDUyMDA4
Qjc0ODMgLyogY29yZVByZWRpY3Rpb25fbW9kZWwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUMwMUU1NEQ0NTIwMDhCNzQ4MyAvKiBjb3JlUHJl
ZGljdGlvbl9tb2RlbCAqLzsgfTsKIAkJNkJFOTY5Q0IxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUM5MUU1NEQ0Q0YwMDhCNzQ4MyAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggKi87IH07CiAJCTZCRTk2OUNEMUU1
NEUwNTQwMDhCNzQ4MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5Q0MxRTU0RTA1
NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggKi87IH07CkBA
IC0zNTY2LDggKzM1NjYsOCBAQAogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5k
bGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tC
dW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYx
ODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAvKiBOZXR3
b3JrQWRDbGlja0F0dHJpYnV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtBZENsaWNrQXR0
cmlidXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJEMDU4NjQyMjBDRThD
MjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25N
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJEMDU4NjQyMjBDRThDMjAwMEJFRDVDIC8qIEFk
Q2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWRDbGlja0F0
dHJpYnV0aW9uTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCRTk2
OUMwMUU1NEQ0NTIwMDhCNzQ4MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBjb3JlUHJlZGljdGlvbl9tb2RlbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkJFOTY5QzYxRTU0RDRCNjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkJFOTY5QzgxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02NTQ3LDEwICs2NTQ3LDEwIEBACiAJCQkJNTEwQ0M3REMxNjEzOEUy
OTAwRDAzRUQzIC8qIG1hYyAqLywKIAkJCQk5M0JBMDREOTIxNTFBRENEMDA3RjQ1NUYgLyogU2Vy
dmljZVdvcmtlciAqLywKIAkJCQk0MTMwNzU5NzFERTg0RUQ3MDAzOUVDNjkgLyogd2VicnRjICov
LAorCQkJCTZCRDA1ODY0MjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcCAqLywKKwkJCQk2QkQwNTg2MzIyMENFOEMyMDAwQkVENUMgLyogQWRDbGlja0F0dHJp
YnV0aW9uTWFuYWdlci5oICovLAogCQkJCTUzRjNDQUE1MjA2QzQ0M0UwMDg2NDkwRSAvKiBOZXR3
b3JrQWN0aXZpdHlUcmFja2VyLmNwcCAqLywKIAkJCQk1MzVCQ0I5MDIwNjlDNDlDMDBDQ0NFMDIg
LyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5oICovLAotCQkJCTZCRDA1ODY0MjIwQ0U4QzIwMDBC
RUQ1QyAvKiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcCAqLywKLQkJCQk2QkQwNTg2MzIy
MENFOEMyMDAwQkVENUMgLyogTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5oICovLAogCQkJCTUx
M0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgKi8sCiAJCQkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJNTEzQTE2NEIxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAtOTA1OSw2ICs5MDU5
LDcgQEAKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0eUlPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRCNzY2NzEyMUI1RTQ4QTAwNDVEREIxIC8qIEFjY2Vzc2li
aWxpdHlTdXBwb3J0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q3OTJEODE3NjdDQ0EzMDA4
ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTZCRDA1ODY1
MjIwQ0U4QzIwMDBCRUQ1QyAvKiBBZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2MzQ4NDI1MTFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGljYXRpb25NYW5p
ZmVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY5NzAxMURCRTYwMzAwNjQ1NUIwIC8qIEFQ
SUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTVDNzcwRTFGQTdENDI5MDA1OTMyQzMgLyog
QVBJQXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05Mjk5LDcgKzkzMDAsNiBAQAogCQkJ
CTFBNEE5QzU2MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFBNTg4OTIxMUVFNzA0MDAwNjFCODgyIC8qIE5ldHNjYXBlUGx1Z2lu
U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzVCQ0I5MjIwNjlDNDlDMDBDQ0NFMDIgLyog
TmV0d29ya0FjdGl2aXR5VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkJEMDU4NjUyMjBD
RThDMjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUExMDVEMEQxMjEyNzM0QjIwMDM0RjZDNyAvKiBOZXR3b3JrQmxvYlJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDQzFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3QjkgLyogTmV0
d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM1Zjc1MjZhYjFlMjZhMDdkNGIzNjk3
OTAyZTE3OTE1YjI1NDExNmMuLjIzYTAxMjBhM2U5YmU3OTJmNDVlYmVkMWM1Y2E3ZTA5OTExZmIw
NGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzMCBAQAorMjAxOS0wNC0xNSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBTZW5kIGRlbGF5ZWQgQWQgQ2xpY2sgQXR0cmlidXRpb24gY29udmVy
c2lvbiByZXF1ZXN0cyB0byB0aGUgY2xpY2sgc291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4MzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzQ3NjUwMTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6IGFuZCBZb3Vlbm4g
RmFibGV0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0ZXN0IGluZnJhc3RydWN0dXJlIHRv
IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGluCisgICAgICAgIFdlYktpdDo6TmV0d29y
a0FkQ2xpY2tBdHRyaWJ1dGlvbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0
dHJpYnV0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmli
dXRpb24pOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxOS0wNC0xNSAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpIHNob3Vs
ZCBiZSBzYWZlbHkgcmVlbnRyYW50CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCmluZGV4IDNhOTgxM2U5YjU1Mjc4
ZTJiZGE2YWQzZjFkNzU3YzJhM2ZjMmUzYTYuLmZhMGE3ODZiZmEzNTU4YjFlOWMxNzNkYTgwODQz
NjBlZGYxNDY0ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9BZENsaWNrQXR0cmlidXRpb24uY3BwCkBAIC00NCw3ICs0NCw3IEBAIGNvbnN0IFVS
TCBlbXB0eVVSTCB7IH07CiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgVmFsaWRNaW5WYWx1ZXMp
CiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlja0F0dHJpYnV0
aW9uOjpDYW1wYWlnbihtaW42Qml0VmFsdWUpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSB7
IHdlYktpdFVSTCB9LCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uIHsgZXhhbXBsZVVS
TCB9IH07Ci0gICAgYXR0cmlidXRpb24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246
OkNvbnZlcnNpb24obWluNkJpdFZhbHVlLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KG1p
bjZCaXRWYWx1ZSkpKTsKKyAgICBhdHRyaWJ1dGlvbi5jb252ZXJ0QW5kR2V0RWFybGllc3RUaW1l
VG9TZW5kKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihtaW42Qml0VmFsdWUsIEFkQ2xp
Y2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkobWluNkJpdFZhbHVlKSkpOwogCiAgICAgYXV0byBhdHRy
aWJ1dGlvblVSTCA9IGF0dHJpYnV0aW9uLnVybCgpOwogICAgIGF1dG8gcmVmZXJyZXJVUkwgPSBh
dHRyaWJ1dGlvbi5yZWZlcnJlcigpOwpAQCAtNTYsNyArNTYsNyBAQCBURVNUKEFkQ2xpY2tBdHRy
aWJ1dGlvbiwgVmFsaWRNaW5WYWx1ZXMpCiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgVmFsaWRN
aWRWYWx1ZXMpCiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlj
a0F0dHJpYnV0aW9uOjpDYW1wYWlnbigodWludDMyX3QpMTIpLCBBZENsaWNrQXR0cmlidXRpb246
OlNvdXJjZSB7IHdlYktpdFVSTCB9LCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uIHsg
ZXhhbXBsZVVSTCB9IH07Ci0gICAgYXR0cmlidXRpb24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0
cmlidXRpb246OkNvbnZlcnNpb24oKHVpbnQzMl90KTQ0LCBBZENsaWNrQXR0cmlidXRpb246OlBy
aW9yaXR5KCh1aW50MzJfdCkyMikpKTsKKyAgICBhdHRyaWJ1dGlvbi5jb252ZXJ0QW5kR2V0RWFy
bGllc3RUaW1lVG9TZW5kKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbigodWludDMyX3Qp
NDQsIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkoKHVpbnQzMl90KTIyKSkpOwogCiAgICAg
YXV0byBhdHRyaWJ1dGlvblVSTCA9IGF0dHJpYnV0aW9uLnVybCgpOwogICAgIGF1dG8gcmVmZXJy
ZXJVUkwgPSBhdHRyaWJ1dGlvbi5yZWZlcnJlcigpOwpAQCAtNjgsNyArNjgsNyBAQCBURVNUKEFk
Q2xpY2tBdHRyaWJ1dGlvbiwgVmFsaWRNaWRWYWx1ZXMpCiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlv
biwgVmFsaWRNYXhWYWx1ZXMpCiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9u
IHsgQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWlnbihBZENsaWNrQXR0cmlidXRpb246Ok1heEVu
dHJvcHkpLCBBZENsaWNrQXR0cmlidXRpb246OlNvdXJjZSB7IHdlYktpdFVSTCB9LCBBZENsaWNr
QXR0cmlidXRpb246OkRlc3RpbmF0aW9uIHsgZXhhbXBsZVVSTCB9IH07Ci0gICAgYXR0cmlidXRp
b24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpNYXhFbnRyb3B5LCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KEFkQ2xp
Y2tBdHRyaWJ1dGlvbjo6TWF4RW50cm9weSkpKTsKKyAgICBhdHRyaWJ1dGlvbi5jb252ZXJ0QW5k
R2V0RWFybGllc3RUaW1lVG9TZW5kKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihBZENs
aWNrQXR0cmlidXRpb246Ok1heEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHko
QWRDbGlja0F0dHJpYnV0aW9uOjpNYXhFbnRyb3B5KSkpOwogCiAgICAgYXV0byBhdHRyaWJ1dGlv
blVSTCA9IGF0dHJpYnV0aW9uLnVybCgpOwogICAgIGF1dG8gcmVmZXJyZXJVUkwgPSBhdHRyaWJ1
dGlvbi5yZWZlcnJlcigpOwpAQCAtODEsNyArODEsNyBAQCBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlv
biwgRWFybGllc3RUaW1lVG9TZW5kQXR0cmlidXRpb25NaW5pbXVtRGVsYXkpCiB7CiAgICAgQWRD
bGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlja0F0dHJpYnV0aW9uOjpDYW1wYWln
bihBZENsaWNrQXR0cmlidXRpb246Ok1heEVudHJvcHkpLCBBZENsaWNrQXR0cmlidXRpb246OlNv
dXJjZSB7IHdlYktpdFVSTCB9LCBBZENsaWNrQXR0cmlidXRpb246OkRlc3RpbmF0aW9uIHsgZXhh
bXBsZVVSTCB9IH07CiAgICAgYXV0byBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgYXR0cmli
dXRpb24uc2V0Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oQWRDbGlj
a0F0dHJpYnV0aW9uOjpNYXhFbnRyb3B5LCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KEFk
Q2xpY2tBdHRyaWJ1dGlvbjo6TWF4RW50cm9weSkpKTsKKyAgICBhdHRyaWJ1dGlvbi5jb252ZXJ0
QW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihB
ZENsaWNrQXR0cmlidXRpb246Ok1heEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3Jp
dHkoQWRDbGlja0F0dHJpYnV0aW9uOjpNYXhFbnRyb3B5KSkpOwogICAgIGF1dG8gZWFybGllc3RU
aW1lVG9TZW5kID0gYXR0cmlidXRpb24uZWFybGllc3RUaW1lVG9TZW5kKCk7CiAgICAgQVNTRVJU
X1RSVUUoZWFybGllc3RUaW1lVG9TZW5kKTsKICAgICBBU1NFUlRfVFJVRShlYXJsaWVzdFRpbWVU
b1NlbmQudmFsdWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpIC0gMjRfaCA+PSBub3cuc2Vjb25kc1Np
bmNlRXBvY2goKSk7CkBAIC0xMjgsNyArMTI4LDcgQEAgVEVTVChBZENsaWNrQXR0cmlidXRpb24s
IFZhbGlkQ29udmVyc2lvblVSTHMpCiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZENh
bXBhaWduSWQpCiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlj
a0F0dHJpYnV0aW9uOjpDYW1wYWlnbihBZENsaWNrQXR0cmlidXRpb246Ok1heEVudHJvcHkgKyAx
KSwgQWRDbGlja0F0dHJpYnV0aW9uOjpTb3VyY2UgeyB3ZWJLaXRVUkwgfSwgQWRDbGlja0F0dHJp
YnV0aW9uOjpEZXN0aW5hdGlvbiB7IGV4YW1wbGVVUkwgfSB9OwotICAgIGF0dHJpYnV0aW9uLnNl
dENvbnZlcnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1
dGlvbjo6TWF4RW50cm9weSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShBZENsaWNrQXR0
cmlidXRpb246Ok1heEVudHJvcHkpKSk7CisgICAgYXR0cmlidXRpb24uY29udmVydEFuZEdldEVh
cmxpZXN0VGltZVRvU2VuZChBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oQWRDbGlja0F0
dHJpYnV0aW9uOjpNYXhFbnRyb3B5LCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5KEFkQ2xp
Y2tBdHRyaWJ1dGlvbjo6TWF4RW50cm9weSkpKTsKIAogICAgIGF1dG8gYXR0cmlidXRpb25VUkwg
PSBhdHRyaWJ1dGlvbi51cmwoKTsKICAgICBhdXRvIHJlZmVycmVyVVJMID0gYXR0cmlidXRpb24u
cmVmZXJyZXIoKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwg
SW52YWxpZENhbXBhaWduSWQpCiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZFNvdXJj
ZUhvc3QpCiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlja0F0
dHJpYnV0aW9uOjpDYW1wYWlnbihBZENsaWNrQXR0cmlidXRpb246Ok1heEVudHJvcHkpLCBBZENs
aWNrQXR0cmlidXRpb246OlNvdXJjZSB7IGVtcHR5VVJMIH0sIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6
RGVzdGluYXRpb24geyBleGFtcGxlVVJMIH0gfTsKLSAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJz
aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246Ok1h
eEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkoQWRDbGlja0F0dHJpYnV0aW9u
OjpNYXhFbnRyb3B5KSkpOworICAgIGF0dHJpYnV0aW9uLmNvbnZlcnRBbmRHZXRFYXJsaWVzdFRp
bWVUb1NlbmQoQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6TWF4RW50cm9weSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShBZENsaWNrQXR0cmli
dXRpb246Ok1heEVudHJvcHkpKSk7CiAKICAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0cmli
dXRpb24udXJsKCk7CiAgICAgYXV0byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVycmVy
KCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRT
b3VyY2VIb3N0KQogVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWREZXN0aW5hdGlvbkhv
c3QpCiB7CiAgICAgQWRDbGlja0F0dHJpYnV0aW9uIGF0dHJpYnV0aW9uIHsgQWRDbGlja0F0dHJp
YnV0aW9uOjpDYW1wYWlnbihBZENsaWNrQXR0cmlidXRpb246Ok1heEVudHJvcHkgKyAxKSwgQWRD
bGlja0F0dHJpYnV0aW9uOjpTb3VyY2UgeyB3ZWJLaXRVUkwgfSwgQWRDbGlja0F0dHJpYnV0aW9u
OjpEZXN0aW5hdGlvbiB7IGVtcHR5VVJMIH0gfTsKLSAgICBhdHRyaWJ1dGlvbi5zZXRDb252ZXJz
aW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihBZENsaWNrQXR0cmlidXRpb246Ok1h
eEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkoQWRDbGlja0F0dHJpYnV0aW9u
OjpNYXhFbnRyb3B5KSkpOworICAgIGF0dHJpYnV0aW9uLmNvbnZlcnRBbmRHZXRFYXJsaWVzdFRp
bWVUb1NlbmQoQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlv
bjo6TWF4RW50cm9weSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShBZENsaWNrQXR0cmli
dXRpb246Ok1heEVudHJvcHkpKSk7CiAKICAgICBhdXRvIGF0dHJpYnV0aW9uVVJMID0gYXR0cmli
dXRpb24udXJsKCk7CiAgICAgYXV0byByZWZlcnJlclVSTCA9IGF0dHJpYnV0aW9uLnJlZmVycmVy
KCk7CkBAIC0xNjQsNyArMTY0LDcgQEAgVEVTVChBZENsaWNrQXR0cmlidXRpb24sIEludmFsaWRE
ZXN0aW5hdGlvbkhvc3QpCiBURVNUKEFkQ2xpY2tBdHRyaWJ1dGlvbiwgSW52YWxpZENvbnZlcnNp
b25EYXRhKQogewogICAgIEFkQ2xpY2tBdHRyaWJ1dGlvbiBhdHRyaWJ1dGlvbiB7IEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6Q2FtcGFpZ24oQWRDbGlja0F0dHJpYnV0aW9uOjpNYXhFbnRyb3B5KSwgQWRD
bGlja0F0dHJpYnV0aW9uOjpTb3VyY2UgeyB3ZWJLaXRVUkwgfSwgQWRDbGlja0F0dHJpYnV0aW9u
OjpEZXN0aW5hdGlvbiB7IGV4YW1wbGVVUkwgfSB9OwotICAgIGF0dHJpYnV0aW9uLnNldENvbnZl
cnNpb24oQWRDbGlja0F0dHJpYnV0aW9uOjpDb252ZXJzaW9uKChBZENsaWNrQXR0cmlidXRpb246
Ok1heEVudHJvcHkgKyAxKSwgQWRDbGlja0F0dHJpYnV0aW9uOjpQcmlvcml0eShBZENsaWNrQXR0
cmlidXRpb246Ok1heEVudHJvcHkpKSk7CisgICAgYXR0cmlidXRpb24uY29udmVydEFuZEdldEVh
cmxpZXN0VGltZVRvU2VuZChBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24oKEFkQ2xpY2tB
dHRyaWJ1dGlvbjo6TWF4RW50cm9weSArIDEpLCBBZENsaWNrQXR0cmlidXRpb246OlByaW9yaXR5
KEFkQ2xpY2tBdHRyaWJ1dGlvbjo6TWF4RW50cm9weSkpKTsKIAogICAgIGF1dG8gYXR0cmlidXRp
b25VUkwgPSBhdHRyaWJ1dGlvbi51cmwoKTsKICAgICBhdXRvIHJlZmVycmVyVVJMID0gYXR0cmli
dXRpb24ucmVmZXJyZXIoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBURVNUKEFkQ2xpY2tBdHRyaWJ1
dGlvbiwgSW52YWxpZENvbnZlcnNpb25EYXRhKQogVEVTVChBZENsaWNrQXR0cmlidXRpb24sIElu
dmFsaWRQcmlvcml0eSkKIHsKICAgICBBZENsaWNrQXR0cmlidXRpb24gYXR0cmlidXRpb24geyBB
ZENsaWNrQXR0cmlidXRpb246OkNhbXBhaWduKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6TWF4RW50cm9w
eSksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6U291cmNlIHsgd2ViS2l0VVJMIH0sIEFkQ2xpY2tBdHRy
aWJ1dGlvbjo6RGVzdGluYXRpb24geyBleGFtcGxlVVJMIH0gfTsKLSAgICBhdHRyaWJ1dGlvbi5z
ZXRDb252ZXJzaW9uKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihBZENsaWNrQXR0cmli
dXRpb246Ok1heEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHkoQWRDbGlja0F0
dHJpYnV0aW9uOjpNYXhFbnRyb3B5ICsgMSkpKTsKKyAgICBhdHRyaWJ1dGlvbi5jb252ZXJ0QW5k
R2V0RWFybGllc3RUaW1lVG9TZW5kKEFkQ2xpY2tBdHRyaWJ1dGlvbjo6Q29udmVyc2lvbihBZENs
aWNrQXR0cmlidXRpb246Ok1heEVudHJvcHksIEFkQ2xpY2tBdHRyaWJ1dGlvbjo6UHJpb3JpdHko
QWRDbGlja0F0dHJpYnV0aW9uOjpNYXhFbnRyb3B5ICsgMSkpKTsKIAogICAgIGF1dG8gYXR0cmli
dXRpb25VUkwgPSBhdHRyaWJ1dGlvbi51cmwoKTsKICAgICBhdXRvIHJlZmVycmVyVVJMID0gYXR0
cmlidXRpb24ucmVmZXJyZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCmluZGV4IDA4N2Rh
ODQ2NTI1N2ZiZTY5ZDM1OGJmNTc3MGVmNzIzMmM2OTU1YjAuLmU3YjU4MTNmZDEwYjVlODRmMmMx
NTdjMmI3NjJkYmQ5MGM0Yzc3YTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbApAQCAtMzgx
LDQgKzM4MSw2IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKIAogICAgIC8vIEFkIENsaWNrIEF0
dHJpYnV0aW9uCiAgICAgdm9pZCBjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOworICAgIHZvaWQg
c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbGVhbiB2YWx1
ZSk7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGlu
ZyhET01TdHJpbmcgdXJsKTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCAxYzlhZjMzMTk3MGJlNGM0Njc1ZmI2
OTM5Zjk0N2Q4OWExMWMxZTQ2Li41MGI5OTllM2FlZDI5OTBmYThhODJkNWM4OGE1ZTQ2ZjMxZWM5
NTY4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHAKQEAgLTI3OTUsMTQgKzI3OTUsMjkgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2wgc2hvdWxk
RGlzbWkKIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlv
biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFkQ2xp
Y2tBdHRyaWJ1dGlvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIikpOworICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKIH0KIAordm9p
ZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGlu
Zyhib29sIHZhbHVlKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJp
YnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKKyAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoSlNTdHJpbmdSZWYgdXJsU3RyaW5n
KQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3RpbmciKSk7CisgICAgYXV0byB3dGZVUkxTdHJpbmcgPSB0b1dURlN0cmlu
ZyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1cmxTdHJpbmcpKTsKKyAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcod3RmVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCA4NGFiMjE5MzMzNjZkM2Q3ZTY3
YzkxNjhlZDhkMDY2YzE2MTQxNjE1Li4wOWE5NWVhMGNiMDFmZWUwY2FkNzA4MzA2ZjllNmQwNjc0
NzdiOTA1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaApAQCAtNDk0LDYgKzQ5NCw4IEBAIHB1YmxpYzoKICAgICAvLyBBZCBDbGlj
ayBBdHRyaWJ1dGlvbi4KICAgICB2b2lkIGR1bXBBZENsaWNrQXR0cmlidXRpb24oKTsKICAgICB2
b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CisgICAgdm9pZCBzZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKEpTU3RyaW5nUmVmKTsKIAog
cHJpdmF0ZToKICAgICBUZXN0UnVubmVyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCmluZGV4IDczZGIzMDMxMDExZDQwMzVmNWMyM2Q1M2UyNjQyM2UzNDcxMTRl
YTkuLmFlNTQ3YjZlOWY0MjRiOWEwZDFkZTViMjM0MTgzOGY2MGE1NzVkZTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNTc0LDQgKzM1NzQsMTggQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oKQogICAgIHJ1blVu
dGlsKGNhbGxiYWNrQ29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogfQogCit2b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29s
IHZhbHVlKQoreworICAgIEFkQ2xpY2tBdHRyaWJ1dGlvblZvaWRDYWxsYmFja0NvbnRleHQgY2Fs
bGJhY2tDb250ZXh0KCp0aGlzKTsKKyAgICBXS1BhZ2VTZXRBZENsaWNrQXR0cmlidXRpb25PdmVy
cmlkZVRpbWVyRm9yVGVzdGluZyhtX21haW5XZWJWaWV3LT5wYWdlKCksIHZhbHVlLCBhZENsaWNr
QXR0cmlidXRpb25Wb2lkQ2FsbGJhY2ssICZjYWxsYmFja0NvbnRleHQpOworICAgIHJ1blVudGls
KGNhbGxiYWNrQ29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCit2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhXS1VSTFJl
ZiB1cmwpCit7CisgICAgQWRDbGlja0F0dHJpYnV0aW9uVm9pZENhbGxiYWNrQ29udGV4dCBjYWxs
YmFja0NvbnRleHQoKnRoaXMpOworICAgIFdLUGFnZVNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgdXJsLCBhZENsaWNrQXR0
cmlidXRpb25Wb2lkQ2FsbGJhY2ssICZjYWxsYmFja0NvbnRleHQpOworICAgIHJ1blVudGlsKGNh
bGxiYWNrQ29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBkZTkxMzBjNjg0MzQ1
ZmQ1ZmY5OGE2YWVmMDY2ZTg1MWNkY2RhYWU1Li42ODk1MjZkZmQ3MDc0M2ZkNTJiMzllMGQ4Zjg2
NzBjYjMxYjIwZDgzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBA
IC0zMDYsNiArMzA2LDggQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGR1bXBBZENsaWNrQXR0cmli
dXRpb24oKTsKICAgICB2b2lkIGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CisgICAgdm9pZCBz
ZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKTsK
KyAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFdL
VVJMUmVmKTsKIAogcHJpdmF0ZToKICAgICBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9u
UmVmPiBnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJik7CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IDRjNzAzN2I3ZjU3NzVj
NjY3ZGYzOGIwMzEzYzFkYWMwMDRhYmU1MjAuLjA2OTljYzdkMTVhODgyNGE4ZjMyYjU3MmZhMWYw
OTYzNTQ3YjU4MDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CkBAIC0xNjA2LDE2ICsxNjA2LDMwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKSB7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEdW1wQWRDbGlja0F0
dHJpYnV0aW9uIikpIHsKICAgICAgICAgZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKSB7Cisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbiIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIpKSB7Cisg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOworICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpIHsKKyAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VSTEdldFR5cGVJRCgpKTsKKyAgICAgICAg
V0tVUkxSZWYgdXJsID0gc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKHVybCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNjQwYjg0MjhjOWQ2N2I0NDhkMTZiYTQ0MWI0ZjJkYjUyYTA0NjIyLi5jNmYwZWNl
ZjYwMjAzNDY2NTM0OTlhNjMyNjQyNDAyNmFjNjJmYmViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTktMDQtMTUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgU2VuZCBkZWxheWVkIEFkIENsaWNrIEF0dHJpYnV0aW9uIGNvbnZlcnNpb24gcmVxdWVzdHMg
dG8gdGhlIGNsaWNrIHNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk2ODM4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzY1MDE1Nz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1leiBhbmQgWW91ZW5uIEZhYmxldC4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNp
b24tdGhyb3VnaC1pbWFnZS1yZWRpcmVjdC13aXRoLXByaW9yaXR5LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJz
aW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aG91dC1wcmlvcml0eS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2NvbnZl
cnNpb25GaWxlUGF0aC5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYWRDbGlja0F0
dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2dldENvbnZlcnNpb25E
YXRhLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24v
c2VuZC1hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXJlcXVlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9u
LWNvbnZlcnNpb24tcmVxdWVzdC5odG1sOiBBZGRlZC4KKwogMjAxOS0wNC0xNSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlQgZmlyZXMgd2hlbiBy
ZW1vdmluZyBhIGRpc2FsbG93ZWQgY2xvbmUgZnJvbSB0aGUgc2hhZG93IHRyZWUgd2l0aG91dCBy
ZXNldGluZyBpdHMgY29ycmVzcG9uZGluZyBlbGVtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRo
cm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aC1wcmlvcml0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9u
LXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qtd2l0aC1wcmlvcml0eS1leHBlY3RlZC50eHQKaW5kZXgg
YmMyNzFkNDJiOWViNWZiNDNlMTRmYmY0ODQzN2QzZmQ1ZTYwZjU5ZS4uZGY0MTg1MzY5ZjVlMDI3
YWM1MzQ2YWU3MzdlM2Y2OTk5ODE3YjZkMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWlt
YWdlLXJlZGlyZWN0LXdpdGgtcHJpb3JpdHktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhy
b3VnaC1pbWFnZS1yZWRpcmVjdC13aXRoLXByaW9yaXR5LWV4cGVjdGVkLnR4dApAQCAtNywzICs3
LDUgQEAgRGVzdGluYXRpb246IGxvY2FsaG9zdAogQ2FtcGFpZ24gSUQ6IDMKIENvbnZlcnNpb24g
ZGF0YTogMTIKIENvbnZlcnNpb24gcHJpb3JpdHk6IDMKK0NvbnZlcnNpb24gZWFybGllc3QgdGlt
ZSB0byBzZW5kOiBXaXRoaW4gMjQtNDggaG91cnMKK0NvbnZlcnNpb24gcmVxdWVzdCBzZW50OiBm
YWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRp
b24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0LXdpdGhvdXQt
cHJpb3JpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0
cmlidXRpb24vYXR0cmlidXRpb24tY29udmVyc2lvbi10aHJvdWdoLWltYWdlLXJlZGlyZWN0LXdp
dGhvdXQtcHJpb3JpdHktZXhwZWN0ZWQudHh0CmluZGV4IDRjODU4ZjAyNGQ2ODUyNWMxNjlhZWY5
NTUxZWE2OGFhMGI0OWQ3MTguLmQzYzJhYzZlYTczNzA3NDlhMTdlY2FhNGRkYmUxMzMxZGI5Yzg2
NTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9u
L2F0dHJpYnV0aW9uLWNvbnZlcnNpb24tdGhyb3VnaC1pbWFnZS1yZWRpcmVjdC13aXRob3V0LXBy
aW9yaXR5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tB
dHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1jb252ZXJzaW9uLXRocm91Z2gtaW1hZ2UtcmVkaXJlY3Qt
d2l0aG91dC1wcmlvcml0eS1leHBlY3RlZC50eHQKQEAgLTcsMyArNyw1IEBAIERlc3RpbmF0aW9u
OiBsb2NhbGhvc3QKIENhbXBhaWduIElEOiAzCiBDb252ZXJzaW9uIGRhdGE6IDEyCiBDb252ZXJz
aW9uIHByaW9yaXR5OiAwCitDb252ZXJzaW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogV2l0aGlu
IDI0LTQ4IGhvdXJzCitDb252ZXJzaW9uIHJlcXVlc3Qgc2VudDogZmFsc2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252
ZXJzaW9uRmlsZVBhdGgucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmli
dXRpb24vcmVzb3VyY2VzL2NvbnZlcnNpb25GaWxlUGF0aC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU1M2Nm
OTYwNjNiZTdjNmFmYWYwYTlkZjNhMThjMWFmYmNkYWIzMAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJz
aW9uRmlsZVBhdGgucGhwCkBAIC0wLDAgKzEsNiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAnLi4v
Li4vcmVzb3VyY2VzL3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKworJGNvbnZlcnNpb25GaWxlUGF0
aCA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvYWRDbGlja0NvbnZlcnNpb24udHh0IjsKKworPz4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0aW9uL3Jl
c291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRD
bGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252ZXJzaW9uUmVwb3J0LnBocApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZjNmNzg3ODZmY2YwYzhmYWQ2YmY2MTE4N2M2MTYxMjliZmI3NDlkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2Vz
L2NvbnZlcnNpb25SZXBvcnQucGhwCkBAIC0wLDAgKzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29u
Y2UgJ2NvbnZlcnNpb25GaWxlUGF0aC5waHAnOworCiskY29udmVyc2lvbkZpbGUgPSBmb3Blbigk
Y29udmVyc2lvbkZpbGVQYXRoIC4gIi50bXAiLCAndycpOworJGh0dHBIZWFkZXJzID0gJF9TRVJW
RVI7CiskY29va2llc0ZvdW5kID0gZmFsc2U7Citmb3JlYWNoICgkaHR0cEhlYWRlcnMgYXMgJG5h
bWUgPT4gJHZhbHVlKSB7CisgICAgaWYgKCRuYW1lID09PSAiSFRUUF9IT1NUIiB8fCAkbmFtZSA9
PT0gIlJFUVVFU1RfVVJJIikKKyAgICAgICAgZndyaXRlKCRjb252ZXJzaW9uRmlsZSwgIiRuYW1l
OiAkdmFsdWVcbiIpOworICAgIGVsc2UgaWYgKCRuYW1lID09PSAiSFRUUF9DT09LSUUiKSB7Cisg
ICAgICAgIGZ3cml0ZSgkY29udmVyc2lvbkZpbGUsICJDb29raWVzIGluIGNvbnZlcnNpb24gcmVx
dWVzdDogJHZhbHVlXG4iKTsKKyAgICAgICAgJGNvb2tpZXNGb3VuZCA9IHRydWU7CisgICAgfQor
fQoraWYgKCEkY29va2llc0ZvdW5kKSB7CisgICAgZndyaXRlKCRjb252ZXJzaW9uRmlsZSwgIk5v
IGNvb2tpZXMgaW4gY29udmVyc2lvbiByZXF1ZXN0LlxuIik7Cit9CitmY2xvc2UoJGNvbnZlcnNp
b25GaWxlKTsKK3JlbmFtZSgkY29udmVyc2lvbkZpbGVQYXRoIC4gIi50bXAiLCAkY29udmVyc2lv
bkZpbGVQYXRoKTsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xp
Y2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0cmlidXRpb24vcmVzb3VyY2VzL2dldENvbnZlcnNpb25E
YXRhLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yOTk2ZmEwOTI2ODZiNmYxODEyMTUyYmUwM2JjNjQzZGZlOGE4
NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hZENsaWNrQXR0
cmlidXRpb24vcmVzb3VyY2VzL2dldENvbnZlcnNpb25EYXRhLnBocApAQCAtMCwwICsxLDUwIEBA
Cis8P3BocAorcmVxdWlyZV9vbmNlICdjb252ZXJzaW9uRmlsZVBhdGgucGhwJzsKKworJG5vVGlt
ZW91dCA9IFRydWU7CiskdGltZW91dE1zZWNzID0gMDsKK2lmIChpc3NldCgkX0dFVFsndGltZW91
dF9tcyddKSkgeworICAgICRub1RpbWVvdXQgPSBGYWxzZTsKKyAgICAkdGltZW91dE1zZWNzID0g
KGludCkgJF9HRVRbJ3RpbWVvdXRfbXMnXTsKK30KKworJGNvbnZlcnNpb25GaWxlRm91bmQgPSBG
YWxzZTsKK3doaWxlICgkbm9UaW1lb3V0IHx8ICR0aW1lb3V0TXNlY3MgPiAwKSB7CisgICAgaWYg
KGZpbGVfZXhpc3RzKCRjb252ZXJzaW9uRmlsZVBhdGgpKSB7CisgICAgICAgICRjb252ZXJzaW9u
RmlsZUZvdW5kID0gVHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICRzbGVlcE1zZWNz
ID0gMTA7CisgICAgdXNsZWVwKCRzbGVlcE1zZWNzICogMTAwMCk7CisgICAgaWYgKCEkbm9UaW1l
b3V0KSB7CisgICAgICAgICR0aW1lb3V0TXNlY3MgLT0gJHNsZWVwTXNlY3M7CisgICAgfQorICAg
IC8vIGZpbGVfZXhpc3RzKCkgY2FjaGVzIHJlc3VsdHMsIHdlIHdhbnQgdG8gaW52YWxpZGF0ZSB0
aGUgY2FjaGUuCisgICAgY2xlYXJzdGF0Y2FjaGUoKTsKK30KKworCitlY2hvICI8aHRtbD48Ym9k
eT5cbiI7CisKK2lmICgkY29udmVyc2lvbkZpbGVGb3VuZCkgeworICAgIGVjaG8gIkNvbnZlcnNp
b24gcmVjZWl2ZWQuIjsKKyAgICAkY29udmVyc2lvbkZpbGUgPSBmb3BlbigkY29udmVyc2lvbkZp
bGVQYXRoLCAncicpOworICAgIHdoaWxlICgkbGluZSA9IGZnZXRzKCRjb252ZXJzaW9uRmlsZSkp
IHsKKyAgICAgICAgZWNobyAiPGJyPiI7CisgICAgICAgIGVjaG8gdHJpbSgkbGluZSk7CisgICAg
fQorICAgIGZjbG9zZSgkY29udmVyc2lvbkZpbGUpOworICAgIHVubGluaygkY29udmVyc2lvbkZp
bGVQYXRoKTsKK30gZWxzZSB7CisgICAgZWNobyAiQ29udmVyc2lvbiBub3QgcmVjZWl2ZWQgLSB0
aW1lZCBvdXQuIjsKK30KKworaWYgKGlzc2V0KCRfR0VUWydlbmRUZXN0J10pKSB7CisgICAgZWNo
byAiPHNjcmlwdD4iOworICAgIGVjaG8gImlmICh3aW5kb3cudGVzdFJ1bm5lcikiOworICAgIGVj
aG8gIiAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsiOworICAgIGVjaG8gIjwvc2NyaXB0PiI7
Cit9CisKK2VjaG8gIjwvYm9keT48L2h0bWw+IjsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNp
b24tcmVxdWVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tB
dHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVxdWVzdC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2VhOTAxMjFhMjlhNjMwMzk0ZGZmOTkyNmUyYjliYWU4MzMwZmFhYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0dHJpYnV0
aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE5IEBACitUZXN0cyBzZW5kaW5nIG9mIGFkIGNsaWNrIGF0dHJpYnV0aW9uIHJlcXVl
c3RzIGFmdGVyIGEgY29udmVyc2lvbi4KKworCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFt
ZTEtLT4nCistLS0tLS0tLQorQ29udmVyc2lvbiByZWNlaXZlZC4KK0hUVFBfSE9TVDogMTI3LjAu
MC4xOjgwMDAKK1JFUVVFU1RfVVJJOiAvYWRDbGlja0F0dHJpYnV0aW9uL3Jlc291cmNlcy9jb252
ZXJzaW9uUmVwb3J0LnBocD9jb252ZXJzaW9uPTEyJmNhbXBhaWduPTMKK05vIGNvb2tpZXMgaW4g
Y29udmVyc2lvbiByZXF1ZXN0LgorV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uIDEKK1NvdXJj
ZTogMTI3LjAuMC4xCitEZXN0aW5hdGlvbjogbG9jYWxob3N0CitDYW1wYWlnbiBJRDogMworQ29u
dmVyc2lvbiBkYXRhOiAxMgorQ29udmVyc2lvbiBwcmlvcml0eTogMAorQ29udmVyc2lvbiBlYXJs
aWVzdCB0aW1lIHRvIHNlbmQ6IFdpdGhpbiAyNC00OCBob3VycworQ29udmVyc2lvbiByZXF1ZXN0
IHNlbnQ6IHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvYWRDbGlja0F0
dHJpYnV0aW9uL3NlbmQtYXR0cmlidXRpb24tY29udmVyc2lvbi1yZXF1ZXN0Lmh0bWwgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNv
bnZlcnNpb24tcmVxdWVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMGI4MGZjZWQ1MzU5MThmZWU3MGE2
ZDk3YWFmNWQwYjA4NjdmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0aW9uLWNvbnZlcnNpb24tcmVxdWVz
dC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBpbnRlcm5hbDpBZENsaWNrQXR0cmli
dXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxt
ZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0i
d2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9bm8iPgor
ICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0VGltZW91dChydW5UZXN0LCAwKSI+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+VGVzdHMgc2VuZGluZyBvZiBhZCBjbGljayBhdHRyaWJ1dGlvbiBy
ZXF1ZXN0cyBhZnRlciBhIGNvbnZlcnNpb24uPC9kaXY+Cis8YSBpZD0idGFyZ2V0TGluayIgaHJl
Zj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL2FkQ2xpY2tBdHRyaWJ1dGlvbi9zZW5kLWF0dHJpYnV0
aW9uLWNvbnZlcnNpb24tcmVxdWVzdC5odG1sP3N0ZXBUd28iIGFkY2FtcGFpZ25pZD0iMyIgYWRk
ZXN0aW5hdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwIj5MaW5rPC9hPjxicj4KKzxkaXYgaWQ9
Im91dHB1dCI+PC9kaXY+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewor
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZSh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZygiaHR0cDovLzEyNy4w
LjAuMTo4MDAwL2FkQ2xpY2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvY29udmVyc2lvblJlcG9ydC5w
aHAiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhY3RpdmF0ZUVsZW1lbnQoZWxlbWVudElEKSB7
CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElE
KTsKKyAgICAgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9m
ZnNldFdpZHRoIC8gMjsKKyAgICAgICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICAgICAgVUlIZWxwZXIuYWN0aXZhdGVBdChj
ZW50ZXJYLCBjZW50ZXJZKS50aGVuKAorICAgICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgib3V0cHV0IikuaW5uZXJUZXh0ID0gIkZBSUwgUHJvbWlzZSBy
ZWplY3RlZC4iOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFwcGVuZENvbnZl
cnNpb25EYXRhSWZyYW1lQW5kRmluaXNoKCkgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBZENs
aWNrQXR0cmlidXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0TGluayIpKTsKKyAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGl4ZWwiKSk7CisKKyAgICAg
ICAgbGV0IGlmcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsK
KyAgICAgICAgaWZyYW1lRWxlbWVudC5zcmMgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FkQ2xp
Y2tBdHRyaWJ1dGlvbi9yZXNvdXJjZXMvZ2V0Q29udmVyc2lvbkRhdGEucGhwP2VuZFRlc3Q9dHJ1
ZSZ0aW1lb3V0X21zPTIwMDAiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlm
cmFtZUVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlv
bi5zZWFyY2ggPT09ICI/c3RlcFR3byIpIHsKKyAgICAgICAgICAgICAgICBsZXQgaW1hZ2VFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAgICAgICAgICAgICAgaW1h
Z2VFbGVtZW50LnNyYyA9ICJodHRwczovLzEyNy4wLjAuMTo4NDQzL2FkQ2xpY2tBdHRyaWJ1dGlv
bi9yZXNvdXJjZXMvcmVkaXJlY3RUb0NvbnZlcnNpb24ucGhwP2NvbnZlcnNpb25EYXRhPTEyIjsK
KyAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQuaWQgPSAicGl4ZWwiOworICAgICAgICAgICAg
ICAgIGltYWdlRWxlbWVudC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZENvbnZlcnNpb25EYXRhSWZyYW1lQW5kRmluaXNoKCk7CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltYWdlRWxl
bWVudCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFjdGl2YXRlRWxl
bWVudCgidGFyZ2V0TGluayIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVyVGV4dCA9ICJG
QUlMIE5vIHRlc3RSdW5uZXIuIjsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>