<?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>173499</bug_id>
          
          <creation_ts>2017-06-16 16:25:33 -0700</creation_ts>
          <short_desc>Resource Load Statistics: Add telemetry</short_desc>
          <delta_ts>2017-06-28 16:26:39 -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>WebKit2</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=173940</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>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jlewis3</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1320231</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-16 16:25:33 -0700</bug_when>
    <thetext>Add telemetry. Only numbers on top prevalent resources, i.e. no domain names or other sensitive data such as timestamps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320232</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-16 16:26:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/32826094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320248</commentid>
    <comment_count>2</comment_count>
      <attachid>313161</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-16 17:04:42 -0700</bug_when>
    <thetext>Created attachment 313161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320826</commentid>
    <comment_count>3</comment_count>
      <attachid>313161</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-19 14:10:29 -0700</bug_when>
    <thetext>Comment on attachment 313161
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:244
&gt; +        m_fireTelementryHandler();

typo: m_fireTelementryHandler -&gt; m_fireTelemetryHandler

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:344
&gt; +        page.value-&gt;postMessageToInjectedBundle(&quot;ResourceLoadStatisticsTelemetryFinished&quot;, messageBody);

Why doesn&apos;t this send an IPC to the WebProcess and have it iterate over the pages? This would reduce the amount of IPC.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:65
&gt; +    m_telemetryTimer.start(5_s, WTF::Seconds::fromHours(24));

24_h ?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:202
&gt; +        m_telemetryTimer.startOneShot(WTF::Seconds::fromMilliseconds(100));

100_ms ?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:113
&gt; +    WebCore::Timer m_telemetryTimer;

We should not be using WebCore::Timer in the UIProcess. RunLoop::Timer is the one you want I believe.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:42
&gt; +static unsigned minimumPrevalentResourcesForTelemetry = 3;

const unsigned minimumPrevalentResourcesForTelemetry = 3;

Should be const and does not need the static.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:46
&gt; +    unsigned numberOfTimesDataRecordsRemoved;

I believe these members should have inline initializers.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:53
&gt; +static inline Vector&lt;PrevalentResourceTelemetry&gt; sortPrevalentResources(Vector&lt;WebCore::ResourceLoadStatistics&gt;&amp; resourceLoadStatistics)

Seems big to inline. The name is a bit weird because it does more than sorting. Maybe toSortedPrevalentResources()?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:55
&gt; +    Vector&lt;PrevalentResourceTelemetry&gt; sorted;

You can reverseInitialCapacity(resourceLoadStatistics.size());

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:57
&gt; +        sorted.append(PrevalentResourceTelemetry {

You can uncheckedAppend().

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:67
&gt; +        bool operator()(PrevalentResourceTelemetry a, PrevalentResourceTelemetry b) const

Shouldn&apos;t these be const PrevalentResourceTelemetry&amp; ?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:79
&gt; +static inline unsigned withUserInteraction(Vector&lt;PrevalentResourceTelemetry&gt; v, unsigned begin, unsigned end)

Why are all these functions inline?

I doubt we should be passing the Vector by value here. Should likely be a const Vector&amp;.

v is a bad name.

The name withUserInteraction() is really unclear. What does this method do?

Shouldn&apos;t we babe using size_t for those begin / end (same comment below).

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:85
&gt; +    for (unsigned i = begin; i &lt; end; i++) {

++i.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:86
&gt; +        if (v.at(i).hasHadUserInteraction)

We prefer [I] when the vector is not a pointer.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:87
&gt; +            result++;

++result;

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:93
&gt; +static inline unsigned median(Vector&lt;unsigned&gt; v)

Again passing Vector by value.. and inline

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:98
&gt; +        return v.at(0);

[0]

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:104
&gt; +    return (v.at(middle - 1) + v.at(middle)) / 2;

[middle -1]

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:107
&gt; +static inline unsigned median(Vector&lt;PrevalentResourceTelemetry&gt; v, unsigned begin, unsigned end, std::function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt;&amp;&amp; statisticGetter)

Again passing Vector by value.. and inline.

Please use WTF::Function instead of std::function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:113
&gt; +    for (unsigned i = begin; i &lt;= end; i++)

++i

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:114
&gt; +        part.append(statisticGetter(v.at(i)));

[I]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320834</commentid>
    <comment_count>4</comment_count>
      <attachid>313161</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-19 14:17:36 -0700</bug_when>
    <thetext>Comment on attachment 313161
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:123
&gt; +    Vector&lt;WebCore::ResourceLoadStatistics&gt; prevalentResources = resourceLoadStatisticsStore.prevalentResources();

auto

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:128
&gt; +    Vector&lt;PrevalentResourceTelemetry&gt; sortedPrevalentResources = sortPrevalentResources(prevalentResources);

auto

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:131
&gt; +    for (PrevalentResourceTelemetry prevalentResource : sortedPrevalentResources) {

auto&amp;

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:133
&gt; +            totalNumberOfPrevalentResourcesWithUserInteraction++;

++totalNumberOfPrevalentResourcesWithUserInteraction;

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:216
&gt; +    if (processPool) {

This logic should probably do into a separate function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:224
&gt; +                goto foundNonEphemeralWebPageProxy;

Please no goto :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320850</commentid>
    <comment_count>5</comment_count>
      <attachid>313161</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-19 14:29:08 -0700</bug_when>
    <thetext>Comment on attachment 313161
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:231
&gt; +    nonEphemeralWebPageProxy-&gt;logDiagnosticMessageWithValue(&quot;totalNumberOfPrevalentResources&quot;, &quot;Total number of prevalent resources.&quot;, prevalentResources.size(), 0, WebCore::ShouldSample::No);

These should really use ASCIILiteral()

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:232
&gt; +    nonEphemeralWebPageProxy-&gt;logDiagnosticMessageWithValue(&quot;totalNumberOfPrevalentResourcesWithUserInteraction&quot;, &quot;Total number of prevalent resources with user interaction.&quot;, totalNumberOfPrevalentResourcesWithUserInteraction, 0, WebCore::ShouldSample::No);

Does this really work when there are spaces in the keys?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:240
&gt; +        nonEphemeralWebPageProxy-&gt;logDiagnosticMessageWithValue(&quot;top3PrevalentResourcesWithUserInteraction&quot;, &quot;Top  3: Number of prevalent resources with user interaction.&quot;, top3PrevalentResourcesWithUserInteraction, 0, WebCore::ShouldSample::No);

Double space between top and 3.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:272
&gt; +        WKRetainPtr&lt;WKMutableDictionaryRef&gt; messageBody(AdoptWK, WKMutableDictionaryCreate());

Since what we really want is an API::Dictionary, I think we should construct an API::Dictionary and work at this level instead of using the WK C API.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:286
&gt; +        RunLoop::main().dispatch([messageBody] () {

unnecessary ()

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.h:33
&gt; +class WebResourceLoadStatisticsTelemetry {

Feels like this should be a namespace? This object has no state and I could be wrong but it looks like both methods should be static.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.h:35
&gt; +    void calculateAndSubmit(WebCore::ResourceLoadStatisticsStore&amp;);

can this be static too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320851</commentid>
    <comment_count>6</comment_count>
      <attachid>313161</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-19 14:35:33 -0700</bug_when>
    <thetext>Comment on attachment 313161
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:138
&gt; +    bool shouldDoTop3 = sortedPrevalentResourcesWithoutUserInteraction.size() &gt;= 3;

Feel like it may be possible to refactor this code to use a loop and avoid a lot of code duplication. This seems unnecessarily huge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320852</commentid>
    <comment_count>7</comment_count>
      <attachid>313161</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-19 14:43:54 -0700</bug_when>
    <thetext>Comment on attachment 313161
Patch

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

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:6
&gt; +    &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;/js-test-resources/js-test.js&quot;&gt;&lt;/script&gt;

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:20
&gt; +        if (!enable) {

These curly brackets are not needed.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:28
&gt; +        setEnableFeature(false);

We should not rely on tests to reset state. The TestRunner should do this between tests. See TestController::resetStateToConsistentValues().

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:29
&gt; +        testRunner.notifyDone();

finishJSTest();

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:52
&gt; +        // Prevalent resource 1

Missing period at the end.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:138
&gt; +    testRunner.waitUntilDone();

jsTestIsAsync = true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321277</commentid>
    <comment_count>8</comment_count>
      <attachid>313448</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-20 15:57:03 -0700</bug_when>
    <thetext>Created attachment 313448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321285</commentid>
    <comment_count>9</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-20 16:13:03 -0700</bug_when>
    <thetext>Thanks, Chris, for your detailed review!

The only thing I left as-is is WebProcessProxy::notifyPageStatisticsTelemetryFinished(). It is only used for testing, clearly named for this purpose, and there is only one page when the TestRunner executes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321537</commentid>
    <comment_count>10</comment_count>
      <attachid>313448</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-21 10:09:36 -0700</bug_when>
    <thetext>Comment on attachment 313448
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:55
&gt; +static Vector&lt;PrevalentResourceTelemetry&gt; toSortedPrevalentResources(Vector&lt;WebCore::ResourceLoadStatistics&gt;&amp; resourceLoadStatistics)

resourceLoadStatistics should be a const&amp;, since we do not (and should not!) mutate resourceLoadStatistics in this function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:96
&gt; +static unsigned median(Vector&lt;unsigned&gt;&amp; v)

v should be a const&amp;

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:115
&gt; +    Vector&lt;unsigned&gt; part;

We should do a part.reserveInitialCapacity since these vectors might be large.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:125
&gt; +    if (processPool) {

I would do an early return here: &quot;if (!processPool) return nullptr&quot;

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:141
&gt; +    WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt; subframeUnderTopFrameOriginsGetter = [] (const PrevalentResourceTelemetry&amp; t) {

These are all making const copies of telemetry. Shouldn&apos;t they be declared as &quot;const PrevalentResourceTelemetry&amp; telemetry)&quot;?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:158
&gt; +    unsigned topNumberOfTimesDataRecordsRemoved = 0;

Delete the above 5 lines, and just declare and assign them in the 5 lines below.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:250
&gt; +        return;

It would be nice if we could avoid making the copy of &apos;prevalentResources&apos; if there aren&apos;t enough statistics to do the telemetry. I guess since that implies a small vector the cost is low, but it still seems wasteful.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:252
&gt; +    auto sortedPrevalentResources = toSortedPrevalentResources(prevalentResources);

We always get the resources, then sort them. Seems like we should just return a sorted vector rather than make two copies of the same data. I guess this is necessary because the Telemetry concept is only in WK2, and we change from ResourceLoadStatistics to Telemetry objects. But if the Telemetry class was a WebCore concept, you could build them as you sorted the list, and avoid a copy of the vector contents.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:253
&gt; +    Vector&lt;PrevalentResourceTelemetry&gt; sortedPrevalentResourcesWithoutUserInteraction;

We should do a sortedPrevalentResourcesWithoutUserInteraction.reserveInitialCapacity since these vectors might be large.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:254
&gt; +    unsigned totalNumberOfPrevalentResourcesWithUserInteraction = 0;

You could also compute this value while making your vector of Telemetry objects! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321541</commentid>
    <comment_count>11</comment_count>
      <attachid>313448</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-21 10:12:31 -0700</bug_when>
    <thetext>Comment on attachment 313448
Patch

I think this is looking good, but it&apos;s not quite ready. Can you please address some of my suggestions? We should also get a second look from Chris.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321546</commentid>
    <comment_count>12</comment_count>
      <attachid>313448</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-21 10:42:06 -0700</bug_when>
    <thetext>Comment on attachment 313448
Patch

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

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:344
&gt; +        page.value-&gt;postMessageToInjectedBundle(&quot;ResourceLoadStatisticsTelemetryFinished&quot;, messageBody);

Can we instead send *one* IPC to the WebContent process and do the looping over the pages on the WebContent process side (i.e. calling WebPage::postInjectedBundleMessage() from a new method in WebProcess.cpp)

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:202
&gt; +        // This cancels the one shot timer and is only intended for testing purposes.

Wasn&apos;t this supposed to cancel the *repeating* timer? At least that&apos;s what the previous patch iteration says.

It does not make much sense to call stop() before calling startOneShot() on the same timer I believe. startOneShot() will re-schedule the timer.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:113
&gt; +    RunLoop::Timer&lt;WebResourceLoadStatisticsStore&gt; m_telemetryRepeatedTimer;

Do we really need 2 timers? Do they need to run at the same time?

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:55
&gt;&gt; +static Vector&lt;PrevalentResourceTelemetry&gt; toSortedPrevalentResources(Vector&lt;WebCore::ResourceLoadStatistics&gt;&amp; resourceLoadStatistics)
&gt; 
&gt; resourceLoadStatistics should be a const&amp;, since we do not (and should not!) mutate resourceLoadStatistics in this function.

+1

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:77
&gt; +    std::sort(sorted.begin(), sorted.end(), comparator);

Let&apos;s just pass in a lambda function rather than constructing a struct with an operator() for this.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:88
&gt; +    for (unsigned i = begin; i &lt; end; ++i) {

size_t

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:96
&gt;&gt; +static unsigned median(Vector&lt;unsigned&gt;&amp; v)
&gt; 
&gt; v should be a const&amp;

+1

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:110
&gt; +static unsigned median(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; v, unsigned begin, unsigned end, WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt;&amp; statisticGetter)

statisticGetter should be const.
telemetry parameter to the WTF::Function should be const too.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:115
&gt;&gt; +    Vector&lt;unsigned&gt; part;
&gt; 
&gt; We should do a part.reserveInitialCapacity since these vectors might be large.

+1

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:116
&gt; +    for (unsigned i = begin; i &lt;= end; ++i)

size_t

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:124
&gt; +    auto processPool = WebProcessPool::allProcessPools().at(0);

[0]

Also, why no bounds checking before accessing? at(0) will crash if out of bounds rather than returning null. Which makes the null check below useless I believe.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:127
&gt; +            if (!webProcess || !webProcess-&gt;pageCount())

This check looks useless to me. I don&apos;t think webProcess can be null. If webProcess-&gt;pageCount() is 0 then the loop below will be a no-op.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:130
&gt; +                if (!page || page-&gt;sessionID().isEphemeral())

I don&apos;t believe the page can be null.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:141
&gt;&gt; +    WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt; subframeUnderTopFrameOriginsGetter = [] (const PrevalentResourceTelemetry&amp; t) {
&gt; 
&gt; These are all making const copies of telemetry. Shouldn&apos;t they be declared as &quot;const PrevalentResourceTelemetry&amp; telemetry)&quot;?

+1

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:165
&gt; +    WTF::StringBuilder preambleBuilder;

WTF:: seems redundant.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:166
&gt; +    preambleBuilder.append(&quot;top&quot;);

appendLiteral()

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:169
&gt; +    WTF::StringBuilder descriptionPreambleBuilder;

WTF:: seems redundant.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:170
&gt; +    descriptionPreambleBuilder.append(&quot;Top &quot;);

appendLiteral()

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:174
&gt; +    if (!webPageProxy)

Isn&apos;t this too late to check if webPageProxy is null? What was the point of doing all this computation if we are no going to be able to log it?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:178
&gt; +        descriptionPreamble + &quot;: Number of prevalent resources with user interaction.&quot;,

Is it really OK to have spaces in the description here? We&apos;ve never done this before.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:194
&gt; +static void submitTopLists(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResources, const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResourcesWithoutUserInteraction, WebPageProxy* webPageProxy)

Should probably take a WebPageProxy by reference.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:218
&gt; +    WKRetainPtr&lt;WKMutableDictionaryRef&gt; messageBody(AdoptWK, WKMutableDictionaryCreate());

Why are we using the WK API instead of constructing an API::Dictionary directly?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:238
&gt; +    RunLoop::main().dispatch([messageBody] {

Looks like you can WTFMove() messageBody here.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:243
&gt; +void WebResourceLoadStatisticsTelemetry::calculateAndSubmit(WebCore::ResourceLoadStatisticsStore&amp; resourceLoadStatisticsStore)

Can the parameter be const?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:266
&gt; +    webPageProxy-&gt;logDiagnosticMessageWithValue(&quot;totalNumberOfPrevalentResources&quot;, &quot;Total number of prevalent resources.&quot;, prevalentResources.size(), 0, WebCore::ShouldSample::No);

Use ASCIILiteral() for those literals.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:269
&gt; +    submitTopLists(sortedPrevalentResources, sortedPrevalentResourcesWithoutUserInteraction, webPageProxy);

*webPageProxy

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.h:28
&gt; +#include &lt;WebCore/ResourceLoadStatisticsStore.h&gt;

Looks like this could be a forward declaration.

&gt; Tools/WebKitTestRunner/TestController.cpp:841
&gt; +    statisticsResetToConsistentState();

This seems reversed. Maybe resetLoadStatistics(); ?

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:2
&gt; +&lt;html lang=&quot;en&quot;&gt;

Why do we need the lang?

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:10
&gt; +    const topFrame1 = &quot;http://127.0.0.1:8000/temp&quot;;

Would be nice to have a description(&quot;....&quot;); for this test.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:11
&gt; +    const topFrame2 = &quot;http://127.0.0.2:8000/temp&quot;;

Should those variable names have &quot;URL&quot; in them given their values?

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:14
&gt; +    const prevalentResource1 = &quot;http://127.0.1.1:8000/temp&quot;;

ditto.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:25
&gt; +        setEnableFeature(false);

Is this really needed? Can&apos;t we just remove this function and call finishJSTest() directly?

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:30
&gt; +        if (!testRunner.isStatisticsPrevalentResource(prevalentResource1)) {

shouldBeTrue(&quot;testRunner.isStatisticsPrevalentResource(prevalentResource1)&quot;); ?
ditto below.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:48
&gt; +    function setUpStatisticsAndContinue() {

Could we use a loop in here to reduce the code size?

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:124
&gt; +        if (result.totalPrevalentResources === 4)

testResult = result;
shouldBe(&quot;testResult.totalPrevalentResources&quot;, &quot;4&quot;);
Ditto below.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:133
&gt; +    setEnableFeature(true);

Not sure we need a function for this if this is one only once and with true as parameter.

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:135
&gt; +    testRunner.installStatisticsDidRunTelemetryCallback(checkTelemetry);

if (window.testRunner) {
  ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321560</commentid>
    <comment_count>13</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-21 11:14:09 -0700</bug_when>
    <thetext>Thanks, Brent and Chris! I&apos;ll fix everything Brent brought up unless commented otherwise below. Also replied to Chris&apos;s questions.

(In reply to Chris Dumez from comment #12)
&gt; Comment on attachment 313448 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313448&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:344
&gt; &gt; +        page.value-&gt;postMessageToInjectedBundle(&quot;ResourceLoadStatisticsTelemetryFinished&quot;, messageBody);
&gt; 
&gt; Can we instead send *one* IPC to the WebContent process and do the looping
&gt; over the pages on the WebContent process side (i.e. calling
&gt; WebPage::postInjectedBundleMessage() from a new method in WebProcess.cpp)

I made a comment about this above. The function is only used in testing and there is only one page at that time.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:202
&gt; &gt; +        // This cancels the one shot timer and is only intended for testing purposes.
&gt; 
&gt; Wasn&apos;t this supposed to cancel the *repeating* timer? At least that&apos;s what
&gt; the previous patch iteration says.

With WebCore::Timer you get both the initial 5_s shot and the repeated 24_h one. That does not seem to be possible with RunLoop::Timer. Therefore, I use two timers and only have to cancel the one-shot one.

&gt; It does not make much sense to call stop() before calling startOneShot() on
&gt; the same timer I believe. startOneShot() will re-schedule the timer.

Got it, will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:113
&gt; &gt; +    RunLoop::Timer&lt;WebResourceLoadStatisticsStore&gt; m_telemetryRepeatedTimer;
&gt; 
&gt; Do we really need 2 timers? Do they need to run at the same time?

We need the 5_s timer for the case where the browser is launched and killed/quit often.
We need the 24_h timer for the case where the browser is long-lived.

I need two since RunLoop::Timer doesn&apos;t offer a way to start a repeated timer with an initial one-shot.

&gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:55
&gt; &gt;&gt; +static Vector&lt;PrevalentResourceTelemetry&gt; toSortedPrevalentResources(Vector&lt;WebCore::ResourceLoadStatistics&gt;&amp; resourceLoadStatistics)
&gt; &gt; 
&gt; &gt; resourceLoadStatistics should be a const&amp;, since we do not (and should not!) mutate resourceLoadStatistics in this function.
&gt; 
&gt; +1
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:77
&gt; &gt; +    std::sort(sorted.begin(), sorted.end(), comparator);
&gt; 
&gt; Let&apos;s just pass in a lambda function rather than constructing a struct with
&gt; an operator() for this.

OK.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:88
&gt; &gt; +    for (unsigned i = begin; i &lt; end; ++i) {
&gt; 
&gt; size_t

Will fix.

&gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:96
&gt; &gt;&gt; +static unsigned median(Vector&lt;unsigned&gt;&amp; v)
&gt; &gt; 
&gt; &gt; v should be a const&amp;
&gt; 
&gt; +1
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:110
&gt; &gt; +static unsigned median(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; v, unsigned begin, unsigned end, WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt;&amp; statisticGetter)
&gt; 
&gt; statisticGetter should be const.
&gt; telemetry parameter to the WTF::Function should be const too.

Will fix.

&gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:115
&gt; &gt;&gt; +    Vector&lt;unsigned&gt; part;
&gt; &gt; 
&gt; &gt; We should do a part.reserveInitialCapacity since these vectors might be large.
&gt; 
&gt; +1
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:116
&gt; &gt; +    for (unsigned i = begin; i &lt;= end; ++i)
&gt; 
&gt; size_t

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:124
&gt; &gt; +    auto processPool = WebProcessPool::allProcessPools().at(0);
&gt; 
&gt; [0]

Will fix.

&gt; Also, why no bounds checking before accessing? at(0) will crash if out of
&gt; bounds rather than returning null. Which makes the null check below useless
&gt; I believe.

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:127
&gt; &gt; +            if (!webProcess || !webProcess-&gt;pageCount())
&gt; 
&gt; This check looks useless to me. I don&apos;t think webProcess can be null. If
&gt; webProcess-&gt;pageCount() is 0 then the loop below will be a no-op.

I don&apos;t know if webProcess can be null so I have the habit of null checking. I can remove it if we don&apos;t think it&apos;s necessary but this is not a hot code path.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:130
&gt; &gt; +                if (!page || page-&gt;sessionID().isEphemeral())
&gt; 
&gt; I don&apos;t believe the page can be null.

See comment on webProcess above.

&gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:141
&gt; &gt;&gt; +    WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt; subframeUnderTopFrameOriginsGetter = [] (const PrevalentResourceTelemetry&amp; t) {
&gt; &gt; 
&gt; &gt; These are all making const copies of telemetry. Shouldn&apos;t they be declared as &quot;const PrevalentResourceTelemetry&amp; telemetry)&quot;?
&gt; 
&gt; +1
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:165
&gt; &gt; +    WTF::StringBuilder preambleBuilder;
&gt; 
&gt; WTF:: seems redundant.

Will fix. Might have been Xcode auto-complete. :P

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:166
&gt; &gt; +    preambleBuilder.append(&quot;top&quot;);
&gt; 
&gt; appendLiteral()

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:169
&gt; &gt; +    WTF::StringBuilder descriptionPreambleBuilder;
&gt; 
&gt; WTF:: seems redundant.

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:170
&gt; &gt; +    descriptionPreambleBuilder.append(&quot;Top &quot;);
&gt; 
&gt; appendLiteral()

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:174
&gt; &gt; +    if (!webPageProxy)
&gt; 
&gt; Isn&apos;t this too late to check if webPageProxy is null? What was the point of
&gt; doing all this computation if we are no going to be able to log it?

I&apos;m doing the check as close to the use as possible if it has been invalidated since I got the pointer. The reason I get the pointer so much earlier is to be able to return early if we only have ephemeral pages.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:178
&gt; &gt; +        descriptionPreamble + &quot;: Number of prevalent resources with user interaction.&quot;,
&gt; 
&gt; Is it really OK to have spaces in the description here? We&apos;ve never done
&gt; this before.

I&apos;ll check documentation.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:194
&gt; &gt; +static void submitTopLists(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResources, const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResourcesWithoutUserInteraction, WebPageProxy* webPageProxy)
&gt; 
&gt; Should probably take a WebPageProxy by reference.

The reason for this is to check it later. Are you saying I should rely on webPageProxy staying valid?

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:218
&gt; &gt; +    WKRetainPtr&lt;WKMutableDictionaryRef&gt; messageBody(AdoptWK, WKMutableDictionaryCreate());
&gt; 
&gt; Why are we using the WK API instead of constructing an API::Dictionary
&gt; directly?

Sorry, missed this in your previous comments. This is code only used in the test case but I can change it.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:238
&gt; &gt; +    RunLoop::main().dispatch([messageBody] {
&gt; 
&gt; Looks like you can WTFMove() messageBody here.

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:243
&gt; &gt; +void WebResourceLoadStatisticsTelemetry::calculateAndSubmit(WebCore::ResourceLoadStatisticsStore&amp; resourceLoadStatisticsStore)
&gt; 
&gt; Can the parameter be const?

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:266
&gt; &gt; +    webPageProxy-&gt;logDiagnosticMessageWithValue(&quot;totalNumberOfPrevalentResources&quot;, &quot;Total number of prevalent resources.&quot;, prevalentResources.size(), 0, WebCore::ShouldSample::No);
&gt; 
&gt; Use ASCIILiteral() for those literals.

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:269
&gt; &gt; +    submitTopLists(sortedPrevalentResources, sortedPrevalentResourcesWithoutUserInteraction, webPageProxy);
&gt; 
&gt; *webPageProxy

Will fix.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.h:28
&gt; &gt; +#include &lt;WebCore/ResourceLoadStatisticsStore.h&gt;
&gt; 
&gt; Looks like this could be a forward declaration.

Will fix.

&gt; &gt; Tools/WebKitTestRunner/TestController.cpp:841
&gt; &gt; +    statisticsResetToConsistentState();
&gt; 
&gt; This seems reversed. Maybe resetLoadStatistics(); ?

I have preampled all these functions with statistics to make them consistent and scoped in name. We have like 20-30 test functions for this feature.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:2
&gt; &gt; +&lt;html lang=&quot;en&quot;&gt;
&gt; 
&gt; Why do we need the lang?

That&apos;s just my IDE.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:10
&gt; &gt; +    const topFrame1 = &quot;http://127.0.0.1:8000/temp&quot;;
&gt; 
&gt; Would be nice to have a description(&quot;....&quot;); for this test.

Will fix.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:11
&gt; &gt; +    const topFrame2 = &quot;http://127.0.0.2:8000/temp&quot;;
&gt; 
&gt; Should those variable names have &quot;URL&quot; in them given their values?

I could add that.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:14
&gt; &gt; +    const prevalentResource1 = &quot;http://127.0.1.1:8000/temp&quot;;
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:25
&gt; &gt; +        setEnableFeature(false);
&gt; 
&gt; Is this really needed? Can&apos;t we just remove this function and call
&gt; finishJSTest() directly?

Maybe nowadays. Many of the tests were written when the feature was off by default and we didn&apos;t want to leave it on after the test was run.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:30
&gt; &gt; +        if (!testRunner.isStatisticsPrevalentResource(prevalentResource1)) {
&gt; 
&gt; shouldBeTrue(&quot;testRunner.isStatisticsPrevalentResource(prevalentResource1)&quot;);
&gt; ?
&gt; ditto below.

Will fix.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:48
&gt; &gt; +    function setUpStatisticsAndContinue() {
&gt; 
&gt; Could we use a loop in here to reduce the code size?

Will fix.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:124
&gt; &gt; +        if (result.totalPrevalentResources === 4)
&gt; 
&gt; testResult = result;
&gt; shouldBe(&quot;testResult.totalPrevalentResources&quot;, &quot;4&quot;);
&gt; Ditto below.

Will fix.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:133
&gt; &gt; +    setEnableFeature(true);
&gt; 
&gt; Not sure we need a function for this if this is one only once and with true
&gt; as parameter.

Yeah, if we remove the call with &apos;false&apos; then I agree.

&gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:135
&gt; &gt; +    testRunner.installStatisticsDidRunTelemetryCallback(checkTelemetry);
&gt; 
&gt; if (window.testRunner) {
&gt;   ...

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321563</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-21 11:24:02 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #13)
&gt; Thanks, Brent and Chris! I&apos;ll fix everything Brent brought up unless
&gt; commented otherwise below. Also replied to Chris&apos;s questions.
&gt; 
&gt; (In reply to Chris Dumez from comment #12)
&gt; &gt; Comment on attachment 313448 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=313448&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:344
&gt; &gt; &gt; +        page.value-&gt;postMessageToInjectedBundle(&quot;ResourceLoadStatisticsTelemetryFinished&quot;, messageBody);
&gt; &gt; 
&gt; &gt; Can we instead send *one* IPC to the WebContent process and do the looping
&gt; &gt; over the pages on the WebContent process side (i.e. calling
&gt; &gt; WebPage::postInjectedBundleMessage() from a new method in WebProcess.cpp)
&gt; 
&gt; I made a comment about this above. The function is only used in testing and
&gt; there is only one page at that time.

Still not more code AFAICT and better practice. I&apos;d rather this got fixed.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:202
&gt; &gt; &gt; +        // This cancels the one shot timer and is only intended for testing purposes.
&gt; &gt; 
&gt; &gt; Wasn&apos;t this supposed to cancel the *repeating* timer? At least that&apos;s what
&gt; &gt; the previous patch iteration says.
&gt; 
&gt; With WebCore::Timer you get both the initial 5_s shot and the repeated 24_h
&gt; one. That does not seem to be possible with RunLoop::Timer. Therefore, I use
&gt; two timers and only have to cancel the one-shot one.
&gt; 
&gt; &gt; It does not make much sense to call stop() before calling startOneShot() on
&gt; &gt; the same timer I believe. startOneShot() will re-schedule the timer.
&gt; 
&gt; Got it, will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:113
&gt; &gt; &gt; +    RunLoop::Timer&lt;WebResourceLoadStatisticsStore&gt; m_telemetryRepeatedTimer;
&gt; &gt; 
&gt; &gt; Do we really need 2 timers? Do they need to run at the same time?
&gt; 
&gt; We need the 5_s timer for the case where the browser is launched and
&gt; killed/quit often.
&gt; We need the 24_h timer for the case where the browser is long-lived.
&gt; 
&gt; I need two since RunLoop::Timer doesn&apos;t offer a way to start a repeated
&gt; timer with an initial one-shot.
&gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:55
&gt; &gt; &gt;&gt; +static Vector&lt;PrevalentResourceTelemetry&gt; toSortedPrevalentResources(Vector&lt;WebCore::ResourceLoadStatistics&gt;&amp; resourceLoadStatistics)
&gt; &gt; &gt; 
&gt; &gt; &gt; resourceLoadStatistics should be a const&amp;, since we do not (and should not!) mutate resourceLoadStatistics in this function.
&gt; &gt; 
&gt; &gt; +1
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:77
&gt; &gt; &gt; +    std::sort(sorted.begin(), sorted.end(), comparator);
&gt; &gt; 
&gt; &gt; Let&apos;s just pass in a lambda function rather than constructing a struct with
&gt; &gt; an operator() for this.
&gt; 
&gt; OK.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:88
&gt; &gt; &gt; +    for (unsigned i = begin; i &lt; end; ++i) {
&gt; &gt; 
&gt; &gt; size_t
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:96
&gt; &gt; &gt;&gt; +static unsigned median(Vector&lt;unsigned&gt;&amp; v)
&gt; &gt; &gt; 
&gt; &gt; &gt; v should be a const&amp;
&gt; &gt; 
&gt; &gt; +1
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:110
&gt; &gt; &gt; +static unsigned median(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; v, unsigned begin, unsigned end, WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt;&amp; statisticGetter)
&gt; &gt; 
&gt; &gt; statisticGetter should be const.
&gt; &gt; telemetry parameter to the WTF::Function should be const too.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:115
&gt; &gt; &gt;&gt; +    Vector&lt;unsigned&gt; part;
&gt; &gt; &gt; 
&gt; &gt; &gt; We should do a part.reserveInitialCapacity since these vectors might be large.
&gt; &gt; 
&gt; &gt; +1
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:116
&gt; &gt; &gt; +    for (unsigned i = begin; i &lt;= end; ++i)
&gt; &gt; 
&gt; &gt; size_t
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:124
&gt; &gt; &gt; +    auto processPool = WebProcessPool::allProcessPools().at(0);
&gt; &gt; 
&gt; &gt; [0]
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; Also, why no bounds checking before accessing? at(0) will crash if out of
&gt; &gt; bounds rather than returning null. Which makes the null check below useless
&gt; &gt; I believe.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:127
&gt; &gt; &gt; +            if (!webProcess || !webProcess-&gt;pageCount())
&gt; &gt; 
&gt; &gt; This check looks useless to me. I don&apos;t think webProcess can be null. If
&gt; &gt; webProcess-&gt;pageCount() is 0 then the loop below will be a no-op.
&gt; 
&gt; I don&apos;t know if webProcess can be null so I have the habit of null checking.
&gt; I can remove it if we don&apos;t think it&apos;s necessary but this is not a hot code
&gt; path.

This should not be null. I think we should remove unnecessary null checks, even if it is not hot code. This makes the code larger unnecessarily.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:130
&gt; &gt; &gt; +                if (!page || page-&gt;sessionID().isEphemeral())
&gt; &gt; 
&gt; &gt; I don&apos;t believe the page can be null.
&gt; 
&gt; See comment on webProcess above.
&gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:141
&gt; &gt; &gt;&gt; +    WTF::Function&lt;unsigned(const PrevalentResourceTelemetry telemetry)&gt; subframeUnderTopFrameOriginsGetter = [] (const PrevalentResourceTelemetry&amp; t) {
&gt; &gt; &gt; 
&gt; &gt; &gt; These are all making const copies of telemetry. Shouldn&apos;t they be declared as &quot;const PrevalentResourceTelemetry&amp; telemetry)&quot;?
&gt; &gt; 
&gt; &gt; +1
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:165
&gt; &gt; &gt; +    WTF::StringBuilder preambleBuilder;
&gt; &gt; 
&gt; &gt; WTF:: seems redundant.
&gt; 
&gt; Will fix. Might have been Xcode auto-complete. :P
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:166
&gt; &gt; &gt; +    preambleBuilder.append(&quot;top&quot;);
&gt; &gt; 
&gt; &gt; appendLiteral()
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:169
&gt; &gt; &gt; +    WTF::StringBuilder descriptionPreambleBuilder;
&gt; &gt; 
&gt; &gt; WTF:: seems redundant.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:170
&gt; &gt; &gt; +    descriptionPreambleBuilder.append(&quot;Top &quot;);
&gt; &gt; 
&gt; &gt; appendLiteral()
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:174
&gt; &gt; &gt; +    if (!webPageProxy)
&gt; &gt; 
&gt; &gt; Isn&apos;t this too late to check if webPageProxy is null? What was the point of
&gt; &gt; doing all this computation if we are no going to be able to log it?
&gt; 
&gt; I&apos;m doing the check as close to the use as possible if it has been
&gt; invalidated since I got the pointer. The reason I get the pointer so much
&gt; earlier is to be able to return early if we only have ephemeral pages.

You already have a null check before calling those functions. After doing the null check, I think we should start passing the page by reference and not do any null check downstream. Not sure what you mean by this pointer getting invalidated, nothing here seems like it could reset it to null.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:178
&gt; &gt; &gt; +        descriptionPreamble + &quot;: Number of prevalent resources with user interaction.&quot;,
&gt; &gt; 
&gt; &gt; Is it really OK to have spaces in the description here? We&apos;ve never done
&gt; &gt; this before.
&gt; 
&gt; I&apos;ll check documentation.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:194
&gt; &gt; &gt; +static void submitTopLists(const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResources, const Vector&lt;PrevalentResourceTelemetry&gt;&amp; sortedPrevalentResourcesWithoutUserInteraction, WebPageProxy* webPageProxy)
&gt; &gt; 
&gt; &gt; Should probably take a WebPageProxy by reference.
&gt; 
&gt; The reason for this is to check it later. Are you saying I should rely on
&gt; webPageProxy staying valid?
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:218
&gt; &gt; &gt; +    WKRetainPtr&lt;WKMutableDictionaryRef&gt; messageBody(AdoptWK, WKMutableDictionaryCreate());
&gt; &gt; 
&gt; &gt; Why are we using the WK API instead of constructing an API::Dictionary
&gt; &gt; directly?
&gt; 
&gt; Sorry, missed this in your previous comments. This is code only used in the
&gt; test case but I can change it.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:238
&gt; &gt; &gt; +    RunLoop::main().dispatch([messageBody] {
&gt; &gt; 
&gt; &gt; Looks like you can WTFMove() messageBody here.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:243
&gt; &gt; &gt; +void WebResourceLoadStatisticsTelemetry::calculateAndSubmit(WebCore::ResourceLoadStatisticsStore&amp; resourceLoadStatisticsStore)
&gt; &gt; 
&gt; &gt; Can the parameter be const?
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:266
&gt; &gt; &gt; +    webPageProxy-&gt;logDiagnosticMessageWithValue(&quot;totalNumberOfPrevalentResources&quot;, &quot;Total number of prevalent resources.&quot;, prevalentResources.size(), 0, WebCore::ShouldSample::No);
&gt; &gt; 
&gt; &gt; Use ASCIILiteral() for those literals.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:269
&gt; &gt; &gt; +    submitTopLists(sortedPrevalentResources, sortedPrevalentResourcesWithoutUserInteraction, webPageProxy);
&gt; &gt; 
&gt; &gt; *webPageProxy
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.h:28
&gt; &gt; &gt; +#include &lt;WebCore/ResourceLoadStatisticsStore.h&gt;
&gt; &gt; 
&gt; &gt; Looks like this could be a forward declaration.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/TestController.cpp:841
&gt; &gt; &gt; +    statisticsResetToConsistentState();
&gt; &gt; 
&gt; &gt; This seems reversed. Maybe resetLoadStatistics(); ?
&gt; 
&gt; I have preampled all these functions with statistics to make them consistent
&gt; and scoped in name. We have like 20-30 test functions for this feature.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:2
&gt; &gt; &gt; +&lt;html lang=&quot;en&quot;&gt;
&gt; &gt; 
&gt; &gt; Why do we need the lang?
&gt; 
&gt; That&apos;s just my IDE.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:10
&gt; &gt; &gt; +    const topFrame1 = &quot;http://127.0.0.1:8000/temp&quot;;
&gt; &gt; 
&gt; &gt; Would be nice to have a description(&quot;....&quot;); for this test.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:11
&gt; &gt; &gt; +    const topFrame2 = &quot;http://127.0.0.2:8000/temp&quot;;
&gt; &gt; 
&gt; &gt; Should those variable names have &quot;URL&quot; in them given their values?
&gt; 
&gt; I could add that.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:14
&gt; &gt; &gt; +    const prevalentResource1 = &quot;http://127.0.1.1:8000/temp&quot;;
&gt; &gt; 
&gt; &gt; ditto.
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:25
&gt; &gt; &gt; +        setEnableFeature(false);
&gt; &gt; 
&gt; &gt; Is this really needed? Can&apos;t we just remove this function and call
&gt; &gt; finishJSTest() directly?
&gt; 
&gt; Maybe nowadays. Many of the tests were written when the feature was off by
&gt; default and we didn&apos;t want to leave it on after the test was run.

Now that this patch supposedly reset state between tests in WKTR, we should not need this. Otherwise your resetState is wrong (e.g. it fails to turn off feature after the test). We should NEVER rely on tests to reset state as they may fail.

&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:30
&gt; &gt; &gt; +        if (!testRunner.isStatisticsPrevalentResource(prevalentResource1)) {
&gt; &gt; 
&gt; &gt; shouldBeTrue(&quot;testRunner.isStatisticsPrevalentResource(prevalentResource1)&quot;);
&gt; &gt; ?
&gt; &gt; ditto below.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:48
&gt; &gt; &gt; +    function setUpStatisticsAndContinue() {
&gt; &gt; 
&gt; &gt; Could we use a loop in here to reduce the code size?
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:124
&gt; &gt; &gt; +        if (result.totalPrevalentResources === 4)
&gt; &gt; 
&gt; &gt; testResult = result;
&gt; &gt; shouldBe(&quot;testResult.totalPrevalentResources&quot;, &quot;4&quot;);
&gt; &gt; Ditto below.
&gt; 
&gt; Will fix.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:133
&gt; &gt; &gt; +    setEnableFeature(true);
&gt; &gt; 
&gt; &gt; Not sure we need a function for this if this is one only once and with true
&gt; &gt; as parameter.
&gt; 
&gt; Yeah, if we remove the call with &apos;false&apos; then I agree.
&gt; 
&gt; &gt; &gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:135
&gt; &gt; &gt; +    testRunner.installStatisticsDidRunTelemetryCallback(checkTelemetry);
&gt; &gt; 
&gt; &gt; if (window.testRunner) {
&gt; &gt;   ...
&gt; 
&gt; Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322384</commentid>
    <comment_count>15</comment_count>
      <attachid>313735</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 12:53:03 -0700</bug_when>
    <thetext>Created attachment 313735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322416</commentid>
    <comment_count>16</comment_count>
      <attachid>313742</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 13:47:43 -0700</bug_when>
    <thetext>Created attachment 313742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322419</commentid>
    <comment_count>17</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 13:48:09 -0700</bug_when>
    <thetext>Hopefully fixed Windows build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322430</commentid>
    <comment_count>18</comment_count>
      <attachid>313746</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 14:16:39 -0700</bug_when>
    <thetext>Created attachment 313746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322431</commentid>
    <comment_count>19</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 14:17:39 -0700</bug_when>
    <thetext>Resolved conflict from https://trac.webkit.org/changeset/218758/webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322500</commentid>
    <comment_count>20</comment_count>
      <attachid>313759</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 16:46:55 -0700</bug_when>
    <thetext>Created attachment 313759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322502</commentid>
    <comment_count>21</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-23 16:47:41 -0700</bug_when>
    <thetext>Windows build still not happy. New try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322927</commentid>
    <comment_count>22</comment_count>
      <attachid>313857</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 11:55:37 -0700</bug_when>
    <thetext>Created attachment 313857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322929</commentid>
    <comment_count>23</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 11:56:46 -0700</bug_when>
    <thetext>Fixed the merge and added testing for insufficient statistics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322932</commentid>
    <comment_count>24</comment_count>
      <attachid>313857</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-26 12:03:11 -0700</bug_when>
    <thetext>Comment on attachment 313857
Patch

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

&gt; LayoutTests/platform/wk2/TestExpectations:708
&gt; +http/tests/loading/resourceLoadStatistics/telemetry-generation.html [ Pass ]

We should only need this line if it is skipped or marked as &quot;Fail&quot; at the top level of LayoutTests. Is that the case here? It doesn&apos;t seem to be in this patch.

I suspect you can get rid of this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322936</commentid>
    <comment_count>25</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 12:10:05 -0700</bug_when>
    <thetext>Thanks for all the review comments, Chris and Brent! I appreciate it.

Brent, the whole http/tests/loading/resourceLoadStatistics/ directory is skipped by default. That&apos;s why these are enabled here. Some tests are also dependent on CFNetwork.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322937</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-26 12:11:45 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #25)
&gt; Thanks for all the review comments, Chris and Brent! I appreciate it.
&gt; 
&gt; Brent, the whole http/tests/loading/resourceLoadStatistics/ directory is
&gt; skipped by default. That&apos;s why these are enabled here. Some tests are also
&gt; dependent on CFNetwork.

Ah! Okay -- then your patch is perfect as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322938</commentid>
    <comment_count>27</comment_count>
      <attachid>313857</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-26 12:11:46 -0700</bug_when>
    <thetext>Comment on attachment 313857
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:384
&gt; +        if (statistic.isPrevalentResource) {

Is it common for resources to be prevalent? I am wondering because of the sorted.reserveInitialCapacity() call.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:399
&gt; +        sorted.clear();

You could just return { }.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:203
&gt; +        m_telemetryOneShotTimer.stop();

As commented previously, why do we need to stop the timer before calling startOneShot()?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:81
&gt; +        part.append(statisticGetter(v[i]));

uncheckedAppend() ?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:132
&gt; +    webPageProxy.logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceLoadStatisticsTelemetryKey(), descriptionPreamble + ASCIILiteral(&quot;PrevalentResourcesWithUserInteraction&quot;),

I don&apos;t think we should/need use ASCIILiteral() in a + operation.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:168
&gt; +    API::Dictionary::MapType messageBody;

Why cannot we do this *in* the RunLoop::main() dispatch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322941</commentid>
    <comment_count>28</comment_count>
      <attachid>313857</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-26 12:16:44 -0700</bug_when>
    <thetext>Comment on attachment 313857
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:187
&gt; +    API::Dictionary::MapType messageBody;

Looks like we could construct this in the dispatch() and merely capture the few integers we need?

Also, it seems that notifyPagesThatNothingWasDone() could be renamed (and take some parameters) to be reused here and avoid code duplication.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsTelemetry.cpp:208
&gt; +    sortedPrevalentResourcesWithoutUserInteraction.reserveInitialCapacity(sortedPrevalentResources.size());

We normally use these reserveInitialCapacity() with close to accurate sizes. In this case, I am not sure the optimization is worth it given it will go in either of those 2 vectors..

&gt; LayoutTests/http/tests/loading/resourceLoadStatistics/telemetry-generation.html:112
&gt; +        jsTestIsAsync = true;

We usually put this right after the description().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322958</commentid>
    <comment_count>29</comment_count>
      <attachid>313864</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 13:01:28 -0700</bug_when>
    <thetext>Created attachment 313864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322959</commentid>
    <comment_count>30</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 13:01:56 -0700</bug_when>
    <thetext>Trying to fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322960</commentid>
    <comment_count>31</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-26 13:03:05 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #30)
&gt; Trying to fix the Windows build.

Please see review comments too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323045</commentid>
    <comment_count>32</comment_count>
      <attachid>313890</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 20:36:38 -0700</bug_when>
    <thetext>Created attachment 313890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323046</commentid>
    <comment_count>33</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 20:37:47 -0700</bug_when>
    <thetext>Another stab at the Windows build issue. Also fixed Chris&apos;s last requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323050</commentid>
    <comment_count>34</comment_count>
      <attachid>313892</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 20:57:06 -0700</bug_when>
    <thetext>Created attachment 313892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323051</commentid>
    <comment_count>35</comment_count>
      <attachid>313892</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-26 20:57:50 -0700</bug_when>
    <thetext>Comment on attachment 313892
Patch

Style checker bug filed here: https://bugs.webkit.org/show_bug.cgi?id=173859</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323053</commentid>
    <comment_count>36</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-26 20:58:47 -0700</bug_when>
    <thetext>Attachment 313892 did not pass style-queue:


ERROR: Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:397:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323153</commentid>
    <comment_count>37</comment_count>
      <attachid>313892</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-27 09:46:42 -0700</bug_when>
    <thetext>Comment on attachment 313892
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:392
&gt; +                statistic.subresourceUniqueRedirectsTo.size()

You might just need to make a constructor to keep Visual Studio happy here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323158</commentid>
    <comment_count>38</comment_count>
      <attachid>313923</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-27 09:54:05 -0700</bug_when>
    <thetext>Created attachment 313923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323159</commentid>
    <comment_count>39</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-27 09:55:48 -0700</bug_when>
    <thetext>Added constructors to the struct to see if I can get the Windows build working.

Also found the style checker issue. It was Xcode that had indented 8 chars which confused the checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323201</commentid>
    <comment_count>40</comment_count>
      <attachid>313923</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-27 12:30:21 -0700</bug_when>
    <thetext>Comment on attachment 313923
Patch

Finally green! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323209</commentid>
    <comment_count>41</comment_count>
      <attachid>313923</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-27 12:54:12 -0700</bug_when>
    <thetext>Comment on attachment 313923
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323233</commentid>
    <comment_count>42</comment_count>
      <attachid>313923</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-27 14:10:28 -0700</bug_when>
    <thetext>Comment on attachment 313923
Patch

Clearing flags on attachment: 313923

Committed r218841: &lt;http://trac.webkit.org/changeset/218841&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323234</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-27 14:10:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323320</commentid>
    <comment_count>44</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-27 16:48:05 -0700</bug_when>
    <thetext>The test http/tests/loading/resourceLoadStatistics/telemetry-generation.html started failing on all Release builds.
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2Floading%2FresourceLoadStatistics%2Ftelemetry-generation.html

https://build.webkit.org/results/Apple%20iOS%2010%20Simulator%20Release%20WK2%20(Tests)/r218841%20(2554)/results.html
https://build.webkit.org/builders/Apple%20iOS%2010%20Simulator%20Release%20WK2%20(Tests)/builds/2554

--- /Volumes/Data/slave/ios-simulator-10-release-tests-wk2/build/layout-test-results/http/tests/loading/resourceLoadStatistics/telemetry-generation-expected.txt
+++ /Volumes/Data/slave/ios-simulator-10-release-tests-wk2/build/layout-test-results/http/tests/loading/resourceLoadStatistics/telemetry-generation-actual.txt
@@ -14,10 +14,11 @@
 PASS testResult.totalPrevalentResourcesWithUserInteraction is 0
 PASS testResult.top3SubframeUnderTopFrameOrigins is 0
 PASS Hosts classified as prevalent resources.
-PASS testResult.totalPrevalentResources is 4
-PASS testResult.totalPrevalentResourcesWithUserInteraction is 1
-PASS testResult.top3SubframeUnderTopFrameOrigins is 4
+FAIL testResult.totalPrevalentResources should be 4. Was 0.
+FAIL testResult.totalPrevalentResourcesWithUserInteraction should be 1. Was 0.
+FAIL testResult.top3SubframeUnderTopFrameOrigins should be 4. Was 0.
 PASS successfullyParsed is true
+Some tests failed.
 
 TEST COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323325</commentid>
    <comment_count>45</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-27 16:56:16 -0700</bug_when>
    <thetext>Marked test as flaky after speaking with John.
https://trac.webkit.org/changeset/218854/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323326</commentid>
    <comment_count>46</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-27 16:57:18 -0700</bug_when>
    <thetext>(In reply to Matt Lewis from comment #45)
&gt; Marked test as flaky after speaking with John.
&gt; https://trac.webkit.org/changeset/218854/webkit

Reopened bug due to failing test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323602</commentid>
    <comment_count>47</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-28 10:49:00 -0700</bug_when>
    <thetext>(In reply to Matt Lewis from comment #46)
&gt; (In reply to Matt Lewis from comment #45)
&gt; &gt; Marked test as flaky after speaking with John.
&gt; &gt; https://trac.webkit.org/changeset/218854/webkit
&gt; 
&gt; Reopened bug due to failing test.

Adjusted expectations as test is failing on all testers.
https://trac.webkit.org/changeset/218882/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323628</commentid>
    <comment_count>48</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-28 11:59:32 -0700</bug_when>
    <thetext>I have found the issue. It&apos;s a pure testing thing. The non-testing part of this fires a telemetry timer 5 seconds after launch. I cancel it when setting my test callback. But sometimes that happens too late and so the regular timer fires, there are no statistics set up by the test code, and we get a test failure.

I&apos;m working on a follow-up patch that allows the TestController to turn off telemetry for the regular timers. That should be good for not submitting telemetry during test runs anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323728</commentid>
    <comment_count>49</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-06-28 16:26:29 -0700</bug_when>
    <thetext>The fix for the failing test is handled in https://bugs.webkit.org/show_bug.cgi?id=173940. Resolving this one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313161</attachid>
            <date>2017-06-16 17:04:42 -0700</date>
            <delta_ts>2017-06-20 15:57:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170616170814.patch</filename>
            <type>text/plain</type>
            <size>78113</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA2LTE2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgICAgICBDb252
ZW5pZW5jZSBmdW5jdGlvbiBmb3IgdGVsZW1ldHJ5LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNy0wNi0xNiAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gU3dpdGNoaW5nIGNhbWVyYXMgaW4gYSBX
ZWJSVEMgY2FsbCBtYWtlcyBibGFjayBmcmFtZXMgYmVpbmcgc2VudApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTg0
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2Vk
IGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3JlLT5maXJlVGVs
ZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpw
cmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBwcmltYXJ5RG9tYWlu
KHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9i
c2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29v
a2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGNhbmNlbHMgdGhlIHJlcGVhdGVkIHRlbGVtZXRyeSB0aW1lciBhbmQgaXMg
b25seSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVl
dWU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjMsNiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRHcmEKICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZN
b3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCit7
CisgICAgbV9maXJlVGVsZW1lbnRyeUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAg
IAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CkBAIC0yMzEsNyArMjM2
LDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlRGEKICAgICAgICAg
ICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogICAgIH0pOwogfQotCisgICAgCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fZmlyZVRlbGVtZW50cnlIYW5kbGVyKQor
ICAgICAgICBtX2ZpcmVUZWxlbWVudHJ5SGFuZGxlcigpOworfQorICAgIAogc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZFBhcnRpdGlvbkNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgc3RhdGlzdGljKQogewogICAgIHJldHVybiBzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZQpAQCAtMzYxLDYgKzM3MywxOCBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvCiAKICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwogfQorICAgIAorVmVjdG9y
PFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJl
dmFsZW50UmVzb3VyY2VzKCkKK3sKKyAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4g
cHJldmFsZW50UmVzb3VyY2VzOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0
aWNzTG9jayk7CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3Vy
Y2UpCisgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRpc3RpYyk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFS
ZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTg0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0
LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBhcnRpdGlv
bkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9v
bCBjbGVhckZpcnN0KT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXcml0ZVBlcnNp
c3RlbnRTdG9yZUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpcmVU
ZWxlbWV0cnlDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVyKTsKIAogICAg
IHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBmaXJlVGVsZW1l
dHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3Vi
bGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShk
b3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKQEAgLTc3LDYgKzc5LDcgQEAgcHVibGljOgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJp
bmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigp
OworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBwcmV2
YWxlbnRSZXNvdXJjZXMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3Rp
Y3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJl
c291cmNlRG9tYWlucyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUZyZXNoU3Rh
cnRXaXRoRW1wdHlPck5vU3RvcmUoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbnNUb0dyYW5kZmF0aGVyKTsKQEAgLTk1LDYgKzk4LDcgQEAgcHJpdmF0ZToKICAg
ICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIGJvb2wgY2xlYXJGaXJzdCk+IG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRv
bWFpbnNIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3dyaXRlUGVyc2lzdGVu
dFN0b3JlSGFuZGxlcjsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9ncmFuZGZhdGhlckV4
aXN0aW5nV2Vic2l0ZURhdGFIYW5kbGVyOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2Zp
cmVUZWxlbWVudHJ5SGFuZGxlcjsKIAogICAgIGRvdWJsZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdU
aW1lc3RhbXAgeyAwIH07CiAgICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1v
dmVkIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4NDI2KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTctMDYt
MTYgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAg
ICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
Y3BwCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVU
ZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICAgICBU
ZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0
YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0
dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhh
bmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSk6CisgICAgICAgICAgICBDb25maWd1cmVzIGEgdGltZXIgZm9yIHRlbGVtZXRyeSBj
YXB0dXJlLiBGaXJlcyA1IHNlY29uZHMgYWZ0ZXIgbGF1bmNoCisgICAgICAgICAgICBhbmQgdGhl
biBldmVyeSAyNCBob3Vycy4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAg
ICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJs
ZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJsZSBy
ZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVn
aXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcik6CisgICAgICAgICAgICBOb3cgc2V0cyBz
ZXQgdGhlIGZpcmUgdGVsZW1ldHJ5IGNhbGxiYWNrLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6
CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCk6CisgICAgICAgICAgICBD
YWxscyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJt
aXQoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6c29ydFByZXZhbGVudFJlc291cmNlcyk6
CisgICAgICAgIChXZWJLaXQ6OndpdGhVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjptZWRpYW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXND
YXB0dXJlZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDE3LTA2LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1dLMl0gQWRkIFdLUHJvY2Vzc1Bvb2wgU1BJIHRvIGVmZmljaWVudGx5IHJlc2V0
IGFsbCBwbHVnaW4gbG9hZCBjbGllbnQgcG9saWNpZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCShyZXZpc2lvbiAyMTg0MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNw
cAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAg
ICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogICAgIFVJUHJvY2Vz
cy9XZWJUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMTg0MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTY3
LDYgKzE2Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9X
ZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHJldmlzaW9uIDIx
ODQyNikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw2ICs5Niw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTg0MjYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4
LDYgKzMzOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpCiAg
ICAgICAgIHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgiV2Vic2l0ZURh
dGFTY2FuRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNGaW5pc2hlZCIsIG51bGxwdHIp
OwogfQogICAgIAordm9pZCBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVs
ZW1ldHJ5RmluaXNoZWQoQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQoreworICAgIGZvciAoYXV0
byYgcGFnZSA6IGdsb2JhbFBhZ2VNYXAoKSkKKyAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNo
ZWQiLCBtZXNzYWdlQm9keSk7Cit9CisgICAgCiBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNz
UHJveHk6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSTo6UGFn
ZUNvbmZpZ3VyYXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWludDY0X3QgcGFn
ZUlEID0gZ2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgRnVuY3Rpb248dm9pZChWZWN0b3I8U3Ry
aW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHN0YXRpYyB2b2lkIHRvcFByaXZhdGVs
eUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIEZ1bmN0aW9uPHZvaWQoSGFzaFNl
dDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CisgICAgc3RhdGljIHZv
aWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCogbWVz
c2FnZUJvZHkpOwogCiAgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogICAgIHZv
aWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwx
MSArMTI0LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmYKICAg
ICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHtob3N0TmFtZX0sIHsgfSwgZmFsc2UpOwog
fQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5
SGFuZGxlcigpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwogfQog
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1do
ZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKHZhbHVlKTsKK30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CkBAIC0x
NTEsNiArMTYxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cgog
ICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldE1p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoNjApOwogICAgIFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldEdyYW5kZmF0aGVyaW5nVGlt
ZSgzNjAwKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZmFsc2UpOworICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKGZhbHNlKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHRydWUpOwogICAgIFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmNsZWFySW5NZW1v
cnlTdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxODQy
NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9p
ZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oY29uc3QgU3RyaW5n
JiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZmlyZVRlbGVtZXRyeUhh
bmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOwogICAg
IHN0YXRpYyB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICBzdGF0
aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJz
KHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTg0MjYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDcs
NyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1Jl
bW92ZTsKLXN0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzID0gZmFsc2U7CitzdGF0aWMgYXV0byBub3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gZmFsc2U7CiBzdGF0aWMgYXV0byBz
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHRydWU7CiAK
IFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSkKQEAgLTU5LDcgKzYwLDkgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpXZWJSZXNvdQogICAgIDogbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKICAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBE
YXRhIFF1ZXVlIikpCiAgICAgLCBtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aChyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KQorICAgICwgbV90ZWxlbWV0cnlUaW1lcigqdGhpcywgJldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkKIHsKKyAgICBt
X3RlbGVtZXRyeVRpbWVyLnN0YXJ0KDVfcywgV1RGOjpTZWNvbmRzOjpmcm9tSG91cnMoMjQpKTsK
IH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKCkKQEAgLTY4LDcgKzcxLDcgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp+V2ViUmVzbwogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIGFsd2F5cykKIHsK
LSAgICBub3RpZnlQYWdlcyA9IGFsd2F5czsKKyAgICBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkID0gYWx3YXlzOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCB2YWx1ZSkKQEAgLTExOSw3ICsxMjIsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVtCiAKICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRv
IGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IENyb3NzVGhyZWFkQ29waWVyPFZl
Y3RvcjxTdHJpbmc+Pjo6Y29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9j
ZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBXVEZNb3ZlKHBy
ZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlmeVBhZ2VzLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGVs
ZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxl
dGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0
ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92ZSwgV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZlY3RvcjxTdHJpbmc+IGRv
bWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1
dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdv
cmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1Ro
cmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0
ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb3Jl
U3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHRvcERvbWFpbnMp
OwpAQCAtMTQwLDcgKzE0Myw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcm8KICAgICAgICAgfQogICAgICAgICByZW1vdmVEYXRhUmVjb3JkcygpOwogICAgICAgICAK
LSAgICAgICAgaWYgKG5vdGlmeVBhZ2VzKSB7CisgICAgICAgIGlmIChub3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW10gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpu
b3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CiAgICAgICAgICAg
ICB9KTsKQEAgLTE5Myw2ICsxOTYsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlZwogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5zZXRHcmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIHsKICAgICAgICAgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KCk7CiAgICAgfSk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnNldEZpcmVU
ZWxlbWV0cnlDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgp
IHsKKyAgICAgICAgLy8gVGhpcyBjYW5jZWxzIHRoZSByZXBlYXRlZCB0aW1lciBhbmQgaXMgb25s
eSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgICAgbV90ZWxlbWV0cnlUaW1l
ci5zdG9wKCk7CisgICAgICAgIG1fdGVsZW1ldHJ5VGltZXIuc3RhcnRPbmVTaG90KFdURjo6U2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcygxMDApKTsKKyAgICB9KTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yMTUsNyArMjIzLDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYQogICAgIAogICAgIC8vIFN3aXRjaCB0byB0aGUg
bWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc1dpdGhXZWJpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQ
YWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFz
aFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIG5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1dCBh
bHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtl
ciBxdWV1ZQogICAgICAgICAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdG9wRG9tYWlucyA9IENyb3NzVGhyZWFk
Q29waWVyPEhhc2hTZXQ8U3RyaW5nPj46OmNvcHkodG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNXaXRoV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5jb3JlU3RvcmUoKS5oYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKFdU
Rk1vdmUodG9wRG9tYWlucykpOwpAQCAtMzI5LDUgKzMzNywxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWREZWNvZGVyPiBXZWJSZXNvdXJjCiAKICAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNv
ZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEoKSksIHJh
d0RhdGEtPnNpemUoKSk7CiB9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCgpCit7CisgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhjb3JlU3RvcmUoKS5zdGF0aXN0aWNzTG9jaygpKTsKKyAg
ICAgICAgbV90ZWxlbWV0cnkuY2FsY3VsYXRlQW5kU3VibWl0KGNvcmVTdG9yZSgpKTsKKyAgICB9
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShy
ZXZpc2lvbiAyMTg0MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVjb3Jk
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC05NSw2ICs5Nyw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB3cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVk
RGVjb2Rlcj4gY3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0
OwogICAgIHZvaWQgcGxhdGZvcm1FeGNsdWRlRnJvbUJhY2t1cCgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdGVsZW1ldHJ5VGltZXJGaXJlZCgpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAjaWYg
SEFWRShDT1JFX1BSRURJQ1RJT04pCkBAIC0xMDUsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBS
ZWY8V1RGOjpXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0YXRp
c3RpY3NTdG9yYWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkgbV90
ZWxlbWV0cnk7CisgICAgV2ViQ29yZTo6VGltZXIgbV90ZWxlbWV0cnlUaW1lcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisjaW5jbHVkZSAiV0tEYXRhLmgiCisjaW5jbHVk
ZSAiV0tEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgorI2lu
Y2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJX
S1N0cmluZy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAg
CitzdGF0aWMgdW5zaWduZWQgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSA9
IDM7CitzdGF0aWMgYXV0byBub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGZh
bHNlOworICAgIAorc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNp
Z25lZCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOworICAgIGJvb2wgaGFzSGFkVXNl
ckludGVyYWN0aW9uOworICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7
CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB1bnNp
Z25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworfTsKKyAgICAKK3N0YXRpYyBpbmxp
bmUgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0UHJldmFsZW50UmVzb3Vy
Y2VzKFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcykKK3sKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNv
cnRlZDsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
IHsKKyAgICAgICAgc29ydGVkLmFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7Cisg
ICAgICAgICAgICBzdGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkLAorICAgICAgICAgICAgc3Rh
dGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHN0cnVjdCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSBhLCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSBiKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvID4KKyAgICAgICAgICAgICAgICBiLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgICAgIH0KKyAgICB9IGNvbXBhcmF0b3I7
CisgICAgCisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIGNvbXBh
cmF0b3IpOworICAgIAorICAgIHJldHVybiBzb3J0ZWQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5l
IHVuc2lnbmVkIHdpdGhVc2VySW50ZXJhY3Rpb24oVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5PiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQoreworICAgIGlmICh2Lmlz
RW1wdHkoKSB8fCB2LnNpemUoKSA8IGJlZ2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gYmVnaW47IGkgPCBlbmQ7IGkrKykgeworICAgICAgICBpZiAodi5hdChp
KS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bWVkaWFuKFZlY3Rvcjx1bnNpZ25lZD4gdikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICh2LnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gdi5h
dCgwKTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIG1pZGRsZSA9
IHNpemUgLyAyOworICAgIGlmIChzaXplICUgMikKKyAgICAgICAgcmV0dXJuIHYuYXQobWlkZGxl
KTsKKyAgICByZXR1cm4gKHYuYXQobWlkZGxlIC0gMSkgKyB2LmF0KG1pZGRsZSkpIC8gMjsKK30K
KyAgICAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWVkaWFuKFZlY3RvcjxQcmV2YWxlbnRSZXNv
dXJjZVRlbGVtZXRyeT4gdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgc3RkOjpmdW5j
dGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB0ZWxlbWV0cnkp
PiYmIHN0YXRpc3RpY0dldHRlcikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkgfHwgdi5zaXplKCkg
PCBiZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmVn
aW47IGkgPD0gZW5kOyBpKyspCisgICAgICAgIHBhcnQuYXBwZW5kKHN0YXRpc3RpY0dldHRlcih2
LmF0KGkpKSk7CisgICAgCisgICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKK30KKyAgICAKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIFZlY3Rv
cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBwcmV2YWxlbnRSZXNvdXJjZXMgPSBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUucHJldmFsZW50UmVzb3VyY2VzKCk7CisgICAgCisg
ICAgaWYgKHByZXZhbGVudFJlc291cmNlcy5zaXplKCkgPCBtaW5pbXVtUHJldmFsZW50UmVzb3Vy
Y2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMgPSBzb3J0UHJl
dmFsZW50UmVzb3VyY2VzKHByZXZhbGVudFJlc291cmNlcyk7CisgICAgVmVjdG9yPFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uOworICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRoVXNlckludGVyYWN0aW9uID0gMDsKKyAgICBmb3IgKFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5IHByZXZhbGVudFJlc291cmNlIDogc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSB7CisgICAg
ICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAg
ICAgICB0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbisr
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLmFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgc2hvdWxkRG9Ub3AzID0gc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPj0gMzsKKyAgICBib29sIHNob3VsZERvVG9wMTAgPSBz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA+PSAx
MDsKKyAgICBib29sIHNob3VsZERvVG9wNTAgPSBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA+PSA1MDsKKyAgICBib29sIHNob3VsZERvVG9wMTAw
ID0gc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkg
Pj0gMTAwOworICAgIAorICAgIHN0YXRpYyBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAg
ICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAg
IHN0YXRpYyBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAo
Y29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIHN0YXRpYyBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIHN0YXRpYyBhdXRvIG51bWJlck9mVGltZXNEYXRh
UmVjb3Jkc1JlbW92ZWRHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQubnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3Zl
ZDsKKyAgICB9OworICAgIAorICAgIGF1dG8gdG9wUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbiA9IHdpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
LCAwLCAwKTsKKyAgICBhdXRvIHRvcFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRp
YW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgMCwg
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgYXV0byB0b3BTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDAsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNHZXR0ZXIpOworICAgIGF1dG8gdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9
IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAw
LCAwLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICBhdXRvIHRvcE51
bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgMCwgbnVtYmVyT2ZUaW1lc0RhdGFSZWNv
cmRzUmVtb3ZlZEdldHRlcik7CisgICAgCisgICAgdW5zaWduZWQgdG9wM1ByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAwOworICAgIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zID0gMDsKKyAgICB1bnNpZ25lZCB0b3AzU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9wM1N1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gPSAwOworICAgIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlRpbWVzRGF0YVJlY29y
ZHNSZW1vdmVkID0gMDsKKyAgICBpZiAoc2hvdWxkRG9Ub3AzKSB7CisgICAgICAgIHRvcDNQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gd2l0aFVzZXJJbnRlcmFjdGlvbihz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIDAsIDIpOworICAgICAgICB0b3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVy
KTsKKyAgICAgICAgdG9wM1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4o
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgMiwgc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgICAgIHRvcDNTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDIsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9H
ZXR0ZXIpOworICAgICAgICB0b3AzTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IG1l
ZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAy
LCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyKTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgdG9wMTBQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0g
MDsKKyAgICB1bnNpZ25lZCB0b3AxMFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSAwOwor
ICAgIHVuc2lnbmVkIHRvcDEwU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyA9IDA7Cisg
ICAgdW5zaWduZWQgdG9wMTBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gMDsKKyAgICB1
bnNpZ25lZCB0b3AxME51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSAwOworICAgIGlm
IChzaG91bGREb1RvcDEwKSB7CisgICAgICAgIHRvcDEwUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiA9IHdpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCAwLCA5KTsKKyAgICAgICAgdG9wMTBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0g
bWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAs
IDksIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgICAgICB0b3AxMFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgOSwgc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luc0dldHRlcik7CisgICAgICAgIHRvcDEwU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCAwLCA5LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICAgICAg
dG9wMTBOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDksIG51bWJlck9mVGltZXNE
YXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3A1
MFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAwOworICAgIHVuc2lnbmVk
IHRvcDUwU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9w
NTBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gMDsKKyAgICB1bnNpZ25lZCB0b3A1
MFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAwOworICAgIHVuc2lnbmVkIHRvcDUwTnVt
YmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IDA7CisgICAgaWYgKHNob3VsZERvVG9wNTAp
IHsKKyAgICAgICAgdG9wNTBQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0g
d2l0aFVzZXJJbnRlcmFjdGlvbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIDAsIDQ5KTsKKyAg
ICAgICAgdG9wNTBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDQ5LCBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICAgICAgdG9wNTBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIDAsIDQ5LCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0
dGVyKTsKKyAgICAgICAgdG9wNTBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFu
KHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDQ5LCBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICAgICAgdG9wNTBOdW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDQ5LCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNS
ZW1vdmVkR2V0dGVyKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgdG9wMTAwUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IDA7CisgICAgdW5zaWduZWQgdG9wMTAwU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9wMTAwU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9wMTAwU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IDA7CisgICAgdW5zaWduZWQgdG9wMTAwTnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IDA7CisgICAgaWYgKHNob3VsZERvVG9wMTAwKSB7Cisg
ICAgICAgIHRvcDEwMFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSB3aXRo
VXNlckludGVyYWN0aW9uKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgMCwgOTkpOworICAgICAg
ICB0b3AxMDBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDk5LCBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICAgICAgdG9wMTAwU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAwLCA5OSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRl
cik7CisgICAgICAgIHRvcDEwMFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtZWRpYW4o
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgOTksIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIpOworICAgICAgICB0b3AxMDBOdW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDk5LCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNS
ZW1vdmVkR2V0dGVyKTsKKyAgICB9CisgICAgCisgICAgV2ViUGFnZVByb3h5KiBub25FcGhlbWVy
YWxXZWJQYWdlUHJveHkgPSBudWxscHRyOworICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkuYXQoMCk7CisgICAgaWYgKHByb2Nlc3NQb29sKSB7
CisgICAgICAgIGZvciAoYXV0byYgd2ViUHJvY2VzcyA6IHByb2Nlc3NQb29sLT5wcm9jZXNzZXMo
KSkgeworICAgICAgICAgICAgaWYgKCF3ZWJQcm9jZXNzIHx8ICF3ZWJQcm9jZXNzLT5wYWdlQ291
bnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cGFnZSA6IHdlYlByb2Nlc3MtPnBhZ2VzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhZ2Ug
fHwgcGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5ID0gcGFn
ZTsKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kTm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKKyAgICAKK2ZvdW5k
Tm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5OgorICAgIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eS0+
bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXMiLCAiVG90YWwgbnVtYmVyIG9mIHByZXZhbGVudCByZXNvdXJjZXMuIiwgcHJldmFsZW50
UmVzb3VyY2VzLnNpemUoKSwgMCwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpObyk7CisgICAgbm9u
RXBoZW1lcmFsV2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG90
YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiVG90YWwg
bnVtYmVyIG9mIHByZXZhbGVudCByZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0aW9uLiIsIHRv
dGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAwLCBXZWJD
b3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3BQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIiwgIlRvcDogTnVtYmVyIG9mIHByZXZhbGVudCByZXNvdXJjZXMgd2l0aCB1
c2VyIGludGVyYWN0aW9uLiIsIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24sIDAsIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8pOworICAgIG5vbkVwaGVtZXJhbFdlYlBh
Z2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvcFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMiLCAiVG9wOiBNZWRpYW4gc3ViIGZyYW1lIHVuZGVyIG51bWJlciBvZiB0
b3AgZnJhbWUgb3JpZ2lucy4iLCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBX
ZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHkt
PmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zIiwgIlRvcDogTWVkaWFuIHN1YnJlc291cmNlIHVuZGVyIG51bWJlciBvZiB0b3Ag
ZnJhbWUgb3JpZ2lucy4iLCB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBX
ZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHkt
PmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3BTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIiwgIlRvcDogTWVkaWFuIHN1YnJlc291cmNlIHVuaXF1ZSByZWRpcmVjdHMgdG8gb3Ro
ZXIgb3JpZ2lucy4iLCB0b3BTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCAwLCBXZWJDb3Jl
OjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1v
dmVkIiwgIlRvcDogTWVkaWFuIG51bWJlciBvZiB0aW1lcyBkYXRhIHJlY29yZHMgd2VyZSByZW1v
dmVkLiIsIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQsIDAsIFdlYkNvcmU6OlNo
b3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIGlmIChzaG91bGREb1RvcDMpIHsKKyAgICAgICAg
bm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgi
dG9wM1ByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiVG9wICAzOiBOdW1i
ZXIgb2YgcHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uIiwgdG9wM1By
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFdlYkNvcmU6OlNob3VsZFNh
bXBsZTo6Tm8pOworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsICJU
b3AgMzogTWVkaWFuIHN1YiBmcmFtZSB1bmRlciBudW1iZXIgb2YgdG9wIGZyYW1lIG9yaWdpbnMu
IiwgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMsIDAsIFdlYkNvcmU6OlNob3VsZFNh
bXBsZTo6Tm8pOworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3AzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyIs
ICJUb3AgMzogTWVkaWFuIHN1YnJlc291cmNlIHVuZGVyIG51bWJlciBvZiB0b3AgZnJhbWUgb3Jp
Z2lucy4iLCB0b3AzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgV2ViQ29yZTo6
U2hvdWxkU2FtcGxlOjpObyk7CisgICAgICAgIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eS0+bG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvcDNTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIiwgIlRvcCAzOiBNZWRpYW4gc3VicmVzb3VyY2UgdW5pcXVlIHJlZGlyZWN0cyB0byBvdGhl
ciBvcmlnaW5zLiIsIHRvcDNTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCAwLCBXZWJDb3Jl
OjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5LT5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG9wM051bWJlck9mVGltZXNEYXRhUmVjb3Jk
c1JlbW92ZWQiLCAiVG9wIDM6IE1lZGlhbiBudW1iZXIgb2YgdGltZXMgZGF0YSByZWNvcmRzIHdl
cmUgcmVtb3ZlZC4iLCB0b3AzTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwgV2Vi
Q29yZTo6U2hvdWxkU2FtcGxlOjpObyk7CisgICAgfQorICAgIAorICAgIGlmIChzaG91bGREb1Rv
cDEwKSB7CisgICAgICAgIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoVmFsdWUoInRvcDEwUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
biIsICJUb3AgMTA6IE51bWJlciBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRl
cmFjdGlvbi4iLCB0b3AxMFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAs
IFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8pOworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdl
UHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3AxMFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMiLCAiVG9wIDEwOiBNZWRpYW4gc3ViIGZyYW1lIHVuZGVyIG51bWJlciBv
ZiB0b3AgZnJhbWUgb3JpZ2lucy4iLCB0b3AxMFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMs
IDAsIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8pOworICAgICAgICBub25FcGhlbWVyYWxXZWJQ
YWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3AxMFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiVG9wIDEwOiBNZWRpYW4gc3VicmVzb3VyY2UgdW5kZXIg
bnVtYmVyIG9mIHRvcCBmcmFtZSBvcmlnaW5zLiIsIHRvcDEwU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucywgMCwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpObyk7CisgICAgICAgIG5vbkVw
aGVtZXJhbFdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvcDEw
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsICJUb3AgMTA6IE1lZGlhbiBzdWJyZXNvdXJj
ZSB1bmlxdWUgcmVkaXJlY3RzIHRvIG90aGVyIG9yaWdpbnMuIiwgdG9wMTBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAg
bm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgi
dG9wMTBOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkIiwgIlRvcCAxMDogTWVkaWFuIG51
bWJlciBvZiB0aW1lcyBkYXRhIHJlY29yZHMgd2VyZSByZW1vdmVkLiIsIHRvcDEwTnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpObyk7Cisg
ICAgfQorICAgIAorICAgIGlmIChzaG91bGREb1RvcDUwKSB7CisgICAgICAgIG5vbkVwaGVtZXJh
bFdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvcDUwUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIsICJUb3AgNTA6IE51bWJlciBvZiBwcmV2
YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbi4iLCB0b3A1MFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8p
OworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKCJ0b3A1MFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiVG9wIDUwOiBN
ZWRpYW4gc3ViIGZyYW1lIHVuZGVyIG51bWJlciBvZiB0b3AgZnJhbWUgb3JpZ2lucy4iLCB0b3A1
MFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMsIDAsIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6
Tm8pOworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNz
YWdlV2l0aFZhbHVlKCJ0b3A1MFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiVG9w
IDUwOiBNZWRpYW4gc3VicmVzb3VyY2UgdW5kZXIgbnVtYmVyIG9mIHRvcCBmcmFtZSBvcmlnaW5z
LiIsIHRvcDUwU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgV2ViQ29yZTo6U2hv
dWxkU2FtcGxlOjpObyk7CisgICAgICAgIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eS0+bG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoInRvcDUwU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
byIsICJUb3AgNTA6IE1lZGlhbiBzdWJyZXNvdXJjZSB1bmlxdWUgcmVkaXJlY3RzIHRvIG90aGVy
IG9yaWdpbnMuIiwgdG9wNTBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCAwLCBXZWJDb3Jl
OjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5LT5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG9wNTBOdW1iZXJPZlRpbWVzRGF0YVJlY29y
ZHNSZW1vdmVkIiwgIlRvcCA1MDogTWVkaWFuIG51bWJlciBvZiB0aW1lcyBkYXRhIHJlY29yZHMg
d2VyZSByZW1vdmVkLiIsIHRvcDUwTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwg
V2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpObyk7CisgICAgfQorICAgIAorICAgIGlmIChzaG91bGRE
b1RvcDEwMCkgeworICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3AxMDBQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uIiwgIlRvcCAxMDA6IE51bWJlciBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNl
ciBpbnRlcmFjdGlvbi4iLCB0b3AxMDBQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgbm9uRXBoZW1lcmFs
V2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG9wMTAwU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsICJUb3AgMTAwOiBNZWRpYW4gc3ViIGZyYW1lIHVuZGVy
IG51bWJlciBvZiB0b3AgZnJhbWUgb3JpZ2lucy4iLCB0b3AxMDBTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgbm9uRXBo
ZW1lcmFsV2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG9wMTAw
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyIsICJUb3AgMTAwOiBNZWRpYW4gc3VicmVz
b3VyY2UgdW5kZXIgbnVtYmVyIG9mIHRvcCBmcmFtZSBvcmlnaW5zLiIsIHRvcDEwMFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMsIDAsIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8pOwor
ICAgICAgICBub25FcGhlbWVyYWxXZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFZhbHVlKCJ0b3AxMDBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIiwgIlRvcCAxMDA6IE1l
ZGlhbiBzdWJyZXNvdXJjZSB1bmlxdWUgcmVkaXJlY3RzIHRvIG90aGVyIG9yaWdpbnMuIiwgdG9w
MTAwU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgMCwgV2ViQ29yZTo6U2hvdWxkU2FtcGxl
OjpObyk7CisgICAgICAgIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoVmFsdWUoInRvcDEwME51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQiLCAi
VG9wIDEwMDogTWVkaWFuIG51bWJlciBvZiB0aW1lcyBkYXRhIHJlY29yZHMgd2VyZSByZW1vdmVk
LiIsIHRvcDEwME51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQsIDAsIFdlYkNvcmU6OlNo
b3VsZFNhbXBsZTo6Tm8pOworICAgIH0KKyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICAgICAgCisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3RhbFByZXZh
bGVudFJlc291cmNlc0tleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiB0b3RhbFByZXZhbGVudFJlc291cmNlc1ZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShwcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKSk7CisgICAgICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzS2V5LmdldCgpLCB0
b3RhbFByZXZhbGVudFJlc291cmNlc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb25LZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdGFs
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpKTsKKyAgICAgICAgV0tSZXRh
aW5QdHI8V0tVSW50NjRSZWY+IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvblZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh0b3RhbE51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb25LZXkuZ2V0KCksIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvblZhbHVlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0tleShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMi
KSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0b3AzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc1ZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh0b3AzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2lucykpOworICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0tleS5nZXQoKSwg
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNWYWx1ZS5nZXQoKSk7CisgICAgICAgIAor
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW21lc3NhZ2VCb2R5XSAoKSB7CisgICAg
ICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5Rmlu
aXNoZWQodG9JbXBsKG1lc3NhZ2VCb2R5LmdldCgpKSk7CisgICAgICAgIH0pOworICAgIH0KK30K
KyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCBhbHdheXMpCit7CisgICAgbm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBhbHdheXM7Cit9CisgICAgCit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2NsYXNz
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkgeworcHVibGljOgorICAgIHZvaWQg
Y2FsY3VsYXRlQW5kU3VibWl0KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYp
OworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVk
KGJvb2wpOworfTsKKyAgICAKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDYgKzExNiwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJl
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbih0b1dURlN0cmluZyhob3N0TmFtZSksIHZhbHVl
KTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRy
eUhhbmRsZXIoKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJl
VGVsZW1ldHJ5SGFuZGxlcigpOworfQorCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUp
CiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpAQCAtMTI2LDYgKzEzMSwxMSBAQCB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTCiAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQorCiB2b2lkIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsK
ICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCShy
ZXZpc2lvbiAyMTg0MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwx
MCBAQCBleHRlcm4gIkMiIHsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JU
IHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4o
V0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAg
IFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpOwogICAgIFdLX0VYUE9S
VCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsKKyAgICBXS19FWFBP
UlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVu
VGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25l
ZCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJl
c2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODQyNikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE4OCw2ICsxMTg4LDggQEAKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdL
QnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5j
cHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJbmplY3RlZEJ1bmRsZVBh
Z2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxl
UGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJCTY1Qjg2RjFFMTJGMTFERTMwMEI3
REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5z
cGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmggKi87IH07CisJCTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLzsgfTsKIAkJNkJCQkFEMzgxRUMzRTU3ODAw
QUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkJCQUQzNzFFQzNFNTYz
MDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbSAqLzsg
fTsKIAkJNkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJF
OTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
Y3BwICovOyB9OwpAQCAtMzQ3Niw2ICszNDc4LDggQEAKIAkJNjU0NkE4MkExMzAwMDE2NDAwMENF
QjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTcxMkYxMUQ3QjAwQjdE
RDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQkJBRDM3MUVD
M0U1NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5Njk5RDFF
NDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NTcsNiArNjg2
MSw4IEBACiAJCQkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgKi8sCiAJCQkJN0E5Q0Q4QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCTdBOUNEOEMyMUM3NzlBRDYw
MEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW4gKi8s
CisJCQkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuaCAqLywKKwkJCQk2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8sCiAJCQkJNTFEMTI0MjQxRTZEM0ND
MzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuY3BwICovLAogCQkJCTUxRDEyNDI1MUU2
RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJCQkJNTFFOEI2OEQx
RTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3BwICovLApAQCAtODI0Myw2ICs4
MjQ5LDcgQEAKIAkJCQkyREFCQTc3NjFBODJCNDIxMDBFRjBGMUEgLyogQVBJSGlzdG9yeUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCNDYxQkM4ODI5MzAwQUJBNUMyIC8qIEFQSUhp
dFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NzUxMjMxMURGMERFRTIwMDhBMzUx
QyAvKiBBUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjkwNzlFMThGMzQwQTIwMDFERkYwNCAvKiBB
UElJbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjkwNzlB
MThGMzFDQjIwMDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0NFNEQyMDcxQTQ2Nzc2MTAwQzdGMTUyIC8qIEFQSUxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTk4NzMsNiArOTg4MCw3IEBACiAJ
CQkJNTE1RTc3MkIxODQwMDhCOTAwMDcyMDNGIC8qIERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTE1QzcxNDE5MEY4OUU0MDBFQ0M1MTYg
LyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUyMDIxODBG
NUQxRTAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzYwMTgwRTAzMUQwMDM5QTE0OSAv
KiBEYXRhYmFzZVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE3REQ1QkUxODBEQTdEMzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxMkE5NzY5MTgwRTA5QjgwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nl
c3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODQyNikK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3
LTA2LTE2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
c291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRzIHRocmVlIG5ldyB0ZXN0UnVubmVyIGZ1bmN0aW9uczoKKyAgICAgICAgLSBp
bnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKCkKKyAgICAgICAgLSBzdGF0
aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQorICAgICAgICAtIHNldFN0YXRpc3RpY3NOb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCgpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5
Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVs
ZW1ldHJ5Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmly
ZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisKIDIwMTctMDYtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBbV0syXSBBZGQgV0tQcm9jZXNzUG9vbCBTUEkgdG8gZWZmaWNpZW50bHkgcmVz
ZXQgYWxsIHBsdWdpbiBsb2FkIGNsaWVudCBwb2xpY2llcwpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxODQyNikKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcw
LDYgKzIyNzAsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91bAog
ICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29v
a2llc0hhbmRsZXJGb3JPbmVEb21haW4oaG9zdE5hbWUsIHZhbHVlKTsKIH0KIAordm9pZCBUZXN0
Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAg
ICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFs
dWUpOwpAQCAtMjI4MCw2ICsyMjg1LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRp
c3RpY3NTaG91bGQKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQor
ICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2Vl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CiAgICAgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoc2Vjb25kcyk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMTg0MjYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw4ICsxNjMsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3Rh
dGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3Rh
dGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihXS1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRl
bGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZv
aWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wg
dmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmlu
Z1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCShyZXZpc2lvbiAyMTg0MjYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Niw2ICsxMDU2LDExIEBA
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpIHsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5
SGFuZGxlcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CiAgICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKQEAgLTEwNjMsNiArMTA2OCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7CiAgICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMTg0MjYpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSwxNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNl
aXZlTWVzc2FnZVRvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnlGaW5pc2hlZCIpKSB7CisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzID0gKHVu
c2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSkpKTsKKyAgICAgICAgdW5z
aWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2ln
bmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIikp
KSk7CisgICAgICAgIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0g
KHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSkpKTsK
KyAgICAgICAgCisgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB0b3RhbFByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZXJyb3JNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXJyb3IiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7CiAg
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwg
ZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxODQyNikK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHsKICAgICBEaWRSZW1vdmVT
d2lwZVNuYXBzaG90Q2FsbGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29y
ZHNDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFja0lE
LAorICAgIFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELAogICAgIERpZFJlbW92
ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENhbGxi
YWNrSUQgPSAxMDAKIH07CkBAIC0xMzgyLDcgKzEzODMsMzEgQEAgdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzRGlkU2NhbkRhdGFSZQogewogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3Rh
dGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQpOwogfQotCisgICAgCit2b2lkIFRl
c3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1
ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJRCwgY2FsbGJhY2spOworfQorICAgIAordm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMp
Cit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUpOworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInsgXCJ0b3RhbFByZXZhbGVudFJlc291cmNlc1wi
IDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNv
dXJjZXMpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgXCJ0b3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc1wiIDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiIH0iKTsKKyAgICAKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVN
YWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
c3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAKKyAgICBjYWxs
VGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAx
LCAmcmVzdWx0KTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0
aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyIikpOwpAQCAtMTQxOSw3ICsxNDQ0LDEzIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXIKICAgICAKICAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwog
fQotCisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxl
cigpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhh
bmRsZXIiKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIp
OworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7
CkBAIC0xNDM0LDYgKzE0NjUsMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hv
dWxkQ2xhcwogICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKIH0KKyAgICAKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJv
b2wgdmFsdWUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKKyAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29u
ZHMpCiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE4NDI2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0OCwx
MSArMzQ4LDE0IEBAIHB1YmxpYzoKICAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAg
ICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1Zh
bHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFS
ZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3Rh
dGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAg
IHZvaWQgc3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjaygpOworICAgIHZvaWQgc3RhdGlz
dGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3Vy
Y2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24s
IHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsKICAgICB2b2lkIHN0
YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0
cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSk7CkBAIC0zNjYsNiArMzY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Rp
bWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjE4NDI2KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICAv
LyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlk
TW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5z
dGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2sp
OworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhvYmpl
Y3QgY2FsbGJhY2spOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERP
TVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4g
dmFsdWUpOwpAQCAtMjY2LDggKzI2NywxMCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAg
dm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBz
dGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBz
dGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKERP
TVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmly
ZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2xlYW4gdmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAg
ICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE4NDI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDYtMTYgIEpvaG4gV2lsYW5kZXIgIDx3aWxh
bmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQg
dGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIEVuYWJsZWQgaGVyZSBzaW5jZSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGlzIFdLMi1vbmx5LgorCiAyMDE3LTA2LTE2ICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBTd2l0Y2hpbmcgY2Ft
ZXJhcyBpbiBhIFdlYlJUQyBjYWxsIG1ha2VzIGJsYWNrIGZyYW1lcyBiZWluZyBzZW50CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90
ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdl
bmVyYXRpb24tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9u
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBACittYWluIGZyYW1l
IC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1p
dExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgVGVs
ZW1ldHJ5IEdlbmVyYXRpb24KK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNTIEhvc3RzIGNsYXNzaWZpZWQgYXMgcHJl
dmFsZW50IHJlc291cmNlcy4KK1BBU1MgVG90YWwgcHJldmFsZW50IHJlc291cmNlcyBjb3JyZWN0
LgorUEFTUyBUb3RhbCBwcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbiBj
b3JyZWN0LgorUEFTUyBUb3AgMyBzdWJmcmFtZSB1bmRlciB0b3AgZnJhbWUgb3JpZ2lucyBjb3Jy
ZWN0LgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRy
eS1nZW5lcmF0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRp
dGxlPlRlc3QgZm9yIFRlbGVtZXRyeSBHZW5lcmF0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCB0b3BGcmFtZTEgPSAiaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZyYW1lMiA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAv
dGVtcCI7CisgICAgY29uc3QgdG9wRnJhbWUzID0gImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1w
IjsKKyAgICBjb25zdCB0b3BGcmFtZTQgPSAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiOwor
ICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlMSA9ICJodHRwOi8vMTI3LjAuMS4xOjgwMDAvdGVt
cCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2UyID0gImh0dHA6Ly8xMjcuMC4xLjI6ODAw
MC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZTMgPSAiaHR0cDovLzEyNy4wLjEu
Mzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlNCA9ICJodHRwOi8vMTI3
LjAuMS40OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlvbiBzZXRFbmFibGVGZWF0dXJlKGVuYWJs
ZSkgeworICAgICAgICBpZiAoIWVuYWJsZSkgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0
aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGludGVy
bmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGUpOworICAgICAgICB0
ZXN0UnVubmVyLnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgc2V0RW5hYmxlRmVh
dHVyZShmYWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNoZWNrQ2xhc3NpZmljYXRpb25BbmRDb250aW51ZSgpIHsKKyAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHByZXZhbGVudFJl
c291cmNlMSkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgMSBkaWQgbm90IGdldCBj
bGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKyAgICAgICAgICAgIGZpbmlzaFRl
c3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZTIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVk
KCJIb3N0IDIgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7
CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5u
ZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2UzKSkgewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAg
ICB9IGVsc2UgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHBy
ZXZhbGVudFJlc291cmNlNCkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgNCBkaWQg
bm90IGdldCBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKyAgICAgICAgICAg
IGZpbmlzaFRlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQo
Ikhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAgICAg
IHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzZXRVcFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgLy8gUHJldmFsZW50
IHJlc291cmNlIDEKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9wRnJhbWUxKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZh
bGVudFJlc291cmNlMSwgdG9wRnJhbWUyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9wRnJh
bWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9wRnJhbWU0KTsKKworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50
UmVzb3VyY2UxLCB0b3BGcmFtZTEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UxLCB0b3BGcmFtZTIp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8ocHJldmFsZW50UmVzb3VyY2UxLCB0b3BGcmFtZTMpOworICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3Vy
Y2UxLCB0b3BGcmFtZTQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZyYW1lMSk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZyYW1lMik7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRS
ZXNvdXJjZTEsIHRvcEZyYW1lMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZyYW1l
NCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHJlc291cmNlIDIKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291
cmNlMiwgdG9wRnJhbWUxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMiwgdG9wRnJhbWUyKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
KHByZXZhbGVudFJlc291cmNlMiwgdG9wRnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMiwg
dG9wRnJhbWU0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTEpOworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJl
dmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UyLCB0b3BG
cmFtZTMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTQpOworCisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2
YWxlbnRSZXNvdXJjZTIsIHRvcEZyYW1lMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTIsIHRv
cEZyYW1lMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTIsIHRvcEZyYW1lMyk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihw
cmV2YWxlbnRSZXNvdXJjZTIsIHRvcEZyYW1lNCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHJl
c291cmNlIDMKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJhbWUxKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVu
dFJlc291cmNlMywgdG9wRnJhbWUyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJhbWUz
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJhbWU0KTsKKworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVz
b3VyY2UzLCB0b3BGcmFtZTEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UzLCB0b3BGcmFtZTIpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8ocHJldmFsZW50UmVzb3VyY2UzLCB0b3BGcmFtZTMpOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2Uz
LCB0b3BGcmFtZTQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTMsIHRvcEZyYW1lMSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbihwcmV2YWxlbnRSZXNvdXJjZTMsIHRvcEZyYW1lMik7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNv
dXJjZTMsIHRvcEZyYW1lMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTMsIHRvcEZyYW1lNCk7
CisKKyAgICAgICAgLy8gUHJldmFsZW50IHJlc291cmNlIDQKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNl
NCwgdG9wRnJhbWUxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlNCwgdG9wRnJhbWUyKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHBy
ZXZhbGVudFJlc291cmNlNCwgdG9wRnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlNCwgdG9w
RnJhbWU0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFtZTEpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFs
ZW50UmVzb3VyY2U0LCB0b3BGcmFtZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFt
ZTMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFtZTQpOworCisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxl
bnRSZXNvdXJjZTQsIHRvcEZyYW1lMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTQsIHRvcEZy
YW1lMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTQsIHRvcEZyYW1lMyk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2
YWxlbnRSZXNvdXJjZTQsIHRvcEZyYW1lNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHByZXZhbGVudFJlc291cmNlNCwgdHJ1ZSk7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0Nh
bGxiYWNrKGNoZWNrQ2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCkgeworICAgICAgICB0ZXN0UnVubmVy
Lmluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soY2hlY2tUZWxlbWV0cnkp
OworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrVGVsZW1ldHJ5KHJlc3VsdCkgeworICAgICAgICBp
ZiAocmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzID09PSA0KQorICAgICAgICAgICAgdGVz
dFBhc3NlZCgiVG90YWwgcHJldmFsZW50IHJlc291cmNlcyBjb3JyZWN0LiIpOworICAgICAgICBp
ZiAocmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9PT0g
MSkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRvdGFsIHByZXZhbGVudCByZXNvdXJjZXMgd2l0
aCB1c2VyIGludGVyYWN0aW9uIGNvcnJlY3QuIik7CisgICAgICAgIGlmIChyZXN1bHQudG9wM1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPT09IDQpCisgICAgICAgICAgICB0ZXN0UGFzc2Vk
KCJUb3AgMyBzdWJmcmFtZSB1bmRlciB0b3AgZnJhbWUgb3JpZ2lucyBjb3JyZWN0LiIpOworICAg
ICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQorCisgICAgc2V0RW5hYmxlRmVhdHVyZSh0cnVlKTsK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHRydWUpOworICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVk
KHRydWUpOworICAgIHNldFVwU3RhdGlzdGljc0FuZENvbnRpbnVlKCk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjE4NDI2KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkK
QEAgLTcwNSw2ICs3MDUsNyBAQCBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljCiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9jbGFzc2lmeS1h
cy1wcmV2YWxlbnQtYmFzZWQtb24tc3VicmVzb3VyY2UtdW5pcXVlLXJlZGlyZWN0cy10by5odG1s
IFsgUGFzcyBdCiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9jbGVh
ci1pbi1tZW1vcnktYW5kLXBlcnNpc3RlbnQtc3RvcmUuaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9y
Zy9iLzE3MjQ1MiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ncmFu
ZGZhdGhlcmluZy5odG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQoraHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbCBbIFBh
c3MgXQogCiAjIyMgRU5EIE9GICg1KSBQcm9ncmVzc2lvbnMsIGV4cGVjdGVkIHN1Y2Nlc3NlcyB0
aGF0IGFyZSBleHBlY3RlZCBmYWlsdXJlcyBpbiBXZWJLaXQxLgogIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313448</attachid>
            <date>2017-06-20 15:57:03 -0700</date>
            <delta_ts>2017-06-23 12:53:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170620160056.patch</filename>
            <type>text/plain</type>
            <size>73207</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA2LTIwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgICAgICBDb252
ZW5pZW5jZSBmdW5jdGlvbiBmb3IgdGVsZW1ldHJ5LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNy0wNi0yMCAgRGFuaWVsIEJhdGVzICA8ZGFi
YXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBj
aGVjayBmb3IgYSBtZWRpYSByZXF1ZXN0IHVzaW5nIHN0YW5kYXJkIHNjaGVtZXMgaW5pdGlhdGVk
IGZyb20KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcAkocmV2aXNpb24gMjE4NTEwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg0LDYgKzU4NCwxMyBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFyCiAgICAgfSk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgbV9zdG9yZS0+ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIFN0cmluZyBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkKIHsKICAg
ICByZXR1cm4gcHJpbWFyeURvbWFpbih1cmwuaG9zdCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCShyZXZpc2lvbiAyMTg1MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBk
b21haW5zVG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wg
Y2xlYXJGaXJzdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxl
cigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGF0aXN0aWNzU3RvcmUoUmVmPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTdGF0aXN0aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CShyZXZpc2lvbiAyMTg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDYgKzIyMywxMSBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhCiAgICAgbV9ncmFuZGZhdGhl
ckV4aXN0aW5nV2Vic2l0ZURhdGFIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVyKQoreworICAgIG1fZmlyZVRlbGVtZXRyeUhh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CkBAIC0yMzIsNiArMjM3LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpmaXJlRGEKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmIChtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyKQorICAgICAgICBt
X2ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisgICAgCiBzdGF0aWMgaW5saW5lIGJvb2wgc2hv
dWxkUGFydGl0aW9uQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0
aWMpCiB7CiAgICAgcmV0dXJuIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlCkBAIC0zNjEs
NiArMzczLDE4IEBAIFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG8KIAog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CisgICAgCitWZWN0b3I8UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNv
dXJjZXMoKQoreworICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBwcmV2YWxlbnRS
ZXNvdXJjZXM7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsK
KyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKSB7CisgICAgICAgIGlmIChzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAg
ICAgICAgIHByZXZhbGVudFJlc291cmNlcy5hcHBlbmQoc3RhdGlzdGljKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKK30KIAogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgJKHJldmlzaW9uIDIxODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsMTAgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Nh
bGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1Rv
UmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmly
c3QpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdyaXRlUGVyc2lzdGVudFN0b3Jl
Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0R3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJhY2soV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlyZVRlbGVtZXRyeUNh
bGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKICAgICB2b2lkIHNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKGRvdWJsZSBzZWNv
bmRzKTsKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
ZG91YmxlIHNlY29uZHMpOwpAQCAtNzcsNiArNzksNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHByZXZhbGVudFJlc291
cmNlcygpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3RhdGlzdGljc0ZvclJlbW92
ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21h
aW5zKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0
eU9yTm9TdG9yZShIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1RvR3JhbmRmYXRoZXIpOwpAQCAtOTUsNiArOTgsNyBAQCBwcml2YXRlOgogICAgIFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Ym9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRs
ZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0ZW50U3RvcmVIYW5k
bGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZmlyZVRlbGVtZXRy
eUhhbmRsZXI7CiAKICAgICBkb3VibGUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIHsg
MCB9OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB7IDAgfTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA2LTIwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6Cisg
ICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgICAgIEFkZGVk
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFu
ZGxlcik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0
cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVs
ZW1ldHJ5RmluaXNoZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAg
ICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgor
ICAgICAgICAgICAgQ29uZmlndXJlcyBhIHRpbWVyIGZvciB0ZWxlbWV0cnkgY2FwdHVyZS4gRmly
ZXMgNSBzZWNvbmRzIGFmdGVyIGxhdW5jaAorICAgICAgICAgICAgYW5kIHRoZW4gZXZlcnkgMjQg
aG91cnMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgICAgICBW
YXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBu
b3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3Rp
ZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVk
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgTm93IHNldHMgc2V0IHRoZSBmaXJl
IHRlbGVtZXRyeSBjYWxsYmFjay4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEpOgorICAgICAgICAg
ICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpOgorICAgICAgICAgICAgIENhbGxzIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgpLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0Ojp0b1NvcnRlZFByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6Om51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Om1lZGlhbik6CisgICAgICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJhbFdlYlBh
Z2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OnN1Ym1pdFRvcExpc3QpOgorICAgICAgICAoV2Vi
S2l0OjpzdWJtaXRUb3BMaXN0cyk6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3Vs
YXRlQW5kU3VibWl0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg6IEFk
ZGVkLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAx
Ny0wNi0yMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBPY2Nhc2lvbmFsIGRlYWRsb2NrcyB1bmRlciBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNV
cFRvRGF0ZSAoaW5jb21pbmcgc3luYyBtZXNzYWdlIHdpdGggd2FpdEZvckFuZERpc3BhdGNoSW1t
ZWRpYXRlbHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjE4NTEw
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSw2ICsxMDksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCiAg
ICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjE4NTEwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZv
cm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dE1lbnVMaXN0ZW5lclBy
b3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5j
cHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAg
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCiAgICAg
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtV1BFLmNtYWtlCShyZXZpc2lvbiAyMTg1MTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybVdQRS5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRl
Q29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAK
IAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjE4NTEw
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6Om5vdGlm
eVBhZ2VTdGF0aXN0aQogICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoIldlYnNpdGVEYXRhU2NhbkZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zRmlu
aXNoZWQiLCBudWxscHRyKTsKIH0KICAgICAKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQ
YWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9keSkK
K3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpCisgICAgICAgIHBhZ2Uu
dmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeUZpbmlzaGVkIiwgbWVzc2FnZUJvZHkpOworfQorICAgIAogUmVmPFdlYlBhZ2VQ
cm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGll
bnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9uKQogewog
ICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlEKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTg1MTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NCw2ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlV2Vic2l0
ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFT
dG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXMsIEZ1bmN0aW9u
PHZvaWQoVmVjdG9yPFN0cmluZz4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMg
dm9pZCB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJpdGVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBzaG91bGROb3RpZnlQYWdlLCBGdW5j
dGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAg
c3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgp
OworICAgIHN0YXRpYyB2b2lkIG5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQo
QVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KTsKIAogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWlu
YXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg1MTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsMTEgKzEyNCwyMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyOjpmCiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih7aG9zdE5hbWV9
LCB7IH0sIGZhbHNlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisgICAg
CiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKHZhbHVlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwodmFsdWUpOwpAQCAtMTUxLDYgKzE2MSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OnIKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5zZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDYwKTsK
ICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRH
cmFuZGZhdGhlcmluZ1RpbWUoMzYwMCk7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGZhbHNlKTsKKyAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZChmYWxzZSk7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCh0cnVlKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5jbGVhckluTWVtb3J5U3RvcmUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5o
CShyZXZpc2lvbiAyMTg1MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAg
ICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9t
YWluKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyB2b2lk
IGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChi
b29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlKCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1v
ZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAko
cmV2aXNpb24gMjE4NTEwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTQ3LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlw
ZT4gZGF0YVR5cGVzVG9SZW1vdmU7Ci1zdGF0aWMgYXV0byBub3RpZnlQYWdlcyA9IGZhbHNlOwor
c3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IGZhbHNl
Owogc3RhdGljIGF1dG8gc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCkBAIC01OSw3ICs2MCwxMSBAQCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291CiAgICAgOiBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQogICAgICwgbV9z
dGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKICAgICAsIG1fc3RhdGlzdGljc1N0b3JhZ2VQ
YXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCisgICAgLCBtX3RlbGVtZXRyeU9u
ZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCisgICAgLCBtX3RlbGVtZXRyeVJlcGVhdGVk
VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQogeworICAgIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVy
LnN0YXJ0T25lU2hvdCg1X3MpOworICAgIG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lci5zdGFydFJl
cGVhdGluZygyNF9oKTsKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKQEAgLTY4LDcgKzczLDcgQEAgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sIGFsd2F5cykKIHsKLSAgICBub3RpZnlQYWdlcyA9IGFsd2F5czsKKyAgICBub3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gYWx3YXlzOwogfQogCiB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKQEAgLTExOSw3ICsxMjQsNyBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtCiAKICAgICAvLyBTd2l0Y2ggdG8gdGhl
IG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IENyb3Nz
VGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnMpLCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewot
ICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVt
b3ZlLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlmeVBhZ2VzLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZlY3RvcjxTdHJpbmc+
IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViUHJv
Y2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92ZSwgV1RGTW92ZShw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZl
Y3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIC8vIEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
c3RvcmUgb24gdGhlIHdvcmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVl
LT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERv
bWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1dp
dGhEZWxldGVkV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNv
cmRzKHRvcERvbWFpbnMpOwpAQCAtMTQwLDcgKzE0NSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpwcm8KICAgICAgICAgfQogICAgICAgICByZW1vdmVEYXRhUmVjb3Jk
cygpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vdGlmeVBhZ2VzKSB7CisgICAgICAgIGlmIChu
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKSB7CiAgICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW10gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgV2Vi
UHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2Vk
KCk7CiAgICAgICAgICAgICB9KTsKQEAgLTE5Myw2ICsxOTgsMTEgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZwogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLT5zZXRHcmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKICAgICAgICAgZ3JhbmRmYXRoZXJFeGlz
dGluZ1dlYnNpdGVEYXRhKCk7CiAgICAgfSk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUtPnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgLy8gVGhpcyBjYW5jZWxzIHRoZSBvbmUgc2hvdCB0
aW1lciBhbmQgaXMgb25seSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgICAg
bV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3RvcCgpOworICAgICAgICBtX3RlbGVtZXRyeU9uZVNo
b3RUaW1lci5zdGFydE9uZVNob3QoMTAwX21zKTsKKyAgICB9KTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yMTUsNyArMjI1LDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYQogICAgIAogICAgIC8vIFN3aXRjaCB0byB0aGUg
bWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc1dpdGhXZWJpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQ
YWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFz
aFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIG5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1dCBh
bHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtl
ciBxdWV1ZQogICAgICAgICAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdG9wRG9tYWlucyA9IENyb3NzVGhyZWFk
Q29waWVyPEhhc2hTZXQ8U3RyaW5nPj46OmNvcHkodG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNXaXRoV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5jb3JlU3RvcmUoKS5oYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKFdU
Rk1vdmUodG9wRG9tYWlucykpOwpAQCAtMzI5LDUgKzMzOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWREZWNvZGVyPiBXZWJSZXNvdXJjCiAKICAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNv
ZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEoKSksIHJh
d0RhdGEtPnNpemUoKSk7CiB9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNvcmVT
dG9yZSgpLnN0YXRpc3RpY3NMb2NrKCkpOworICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29yZVN0b3JlKCkpOworICAgIH0pOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlz
aW9uIDIxODUxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKICNpbmNs
dWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFSZWNvcmQuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC05NSw2ICs5Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB3cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3QgU3RyaW5n
JiBsYWJlbCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rl
cj4gY3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogICAg
IHZvaWQgcGxhdGZvcm1FeGNsdWRlRnJvbUJhY2t1cCgpIGNvbnN0OworICAgIAorICAgIHZvaWQg
dGVsZW1ldHJ5VGltZXJGaXJlZCgpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAjaWYgSEFWRShD
T1JFX1BSRURJQ1RJT04pCkBAIC0xMDUsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBSZWY8V1RG
OjpXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0YXRpc3RpY3NT
dG9yYWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBm
YWxzZSB9OworICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gbV90ZWxlbWV0cnlPbmVTaG90VGltZXI7CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeVJlcGVhdGVkVGltZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKKworI2luY2x1ZGUgIldLRGF0YS5oIgorI2luY2x1
ZGUgIldLRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIldLTXV0YWJsZURpY3Rpb25hcnkuaCIKKyNp
bmNsdWRlICJXS051bWJlci5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAi
V0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKyAgICAKK2NvbnN0IHVuc2lnbmVkIG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNG
b3JUZWxlbWV0cnkgPSAzOworc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQgPSBmYWxzZTsKKyAgICAKK3N0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSB7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCB7IDAgfTsK
KyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQg
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAgfTsKKyAgICB1bnNpZ25lZCBzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHsgMCB9OworICAgIHVuc2lnbmVkIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8geyAwIH07Cit9OworICAgIAorc3RhdGljIFZlY3RvcjxQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeT4gdG9Tb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMoVmVjdG9yPFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzKQor
eworICAgIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkOworICAgIHNv
cnRlZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc291cmNlTG9hZFN0YXRpc3RpY3Muc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsK
KyAgICAgICAgc29ydGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSB7CisgICAgICAgICAgICBzdGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkLAorICAgICAgICAg
ICAgc3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgIHN0YXRpc3RpYy5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0
YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICB9KTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHN0cnVjdCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYSwgY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIGIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPgorICAgICAgICAgICAg
ICAgIGIuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICAgICAg
fQorICAgIH0gY29tcGFyYXRvcjsKKyAgICAKKyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCks
IHNvcnRlZC5lbmQoKSwgY29tcGFyYXRvcik7CisgICAgCisgICAgcmV0dXJuIHNvcnRlZDsKK30K
KyAgICAKK3N0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3VyY2VzLCBz
aXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0VtcHR5KCkg
fHwgcmVzb3VyY2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgZW5k
ICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlm
IChyZXNvdXJjZXNbaV0uaGFzSGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgKytyZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCitzdGF0aWMgdW5z
aWduZWQgbWVkaWFuKFZlY3Rvcjx1bnNpZ25lZD4mIHYpCit7CisgICAgaWYgKHYuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAodi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0
dXJuIHZbMF07CisgICAgCisgICAgYXV0byBzaXplID0gdi5zaXplKCk7CisgICAgYXV0byBtaWRk
bGUgPSBzaXplIC8gMjsKKyAgICBpZiAoc2l6ZSAlIDIpCisgICAgICAgIHJldHVybiB2W21pZGRs
ZV07CisgICAgcmV0dXJuICh2W21pZGRsZSAtIDFdICsgdlttaWRkbGVdKSAvIDI7Cit9CisgICAg
CitzdGF0aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeT4mIHYsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQsIFdURjo6RnVuY3Rpb248
dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgdGVsZW1ldHJ5KT4mIHN0
YXRpc3RpY0dldHRlcikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkgfHwgdi5zaXplKCkgPCBiZWdp
biArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW47IGkg
PD0gZW5kOyArK2kpCisgICAgICAgIHBhcnQuYXBwZW5kKHN0YXRpc3RpY0dldHRlcih2W2ldKSk7
CisgICAgCisgICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKK30KKyAgICAKK3N0YXRpYyBXZWJQYWdl
UHJveHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCit7CisgICAgYXV0byBwcm9jZXNzUG9v
bCA9IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKS5hdCgwKTsKKyAgICBpZiAocHJv
Y2Vzc1Bvb2wpIHsKKyAgICAgICAgZm9yIChhdXRvJiB3ZWJQcm9jZXNzIDogcHJvY2Vzc1Bvb2wt
PnByb2Nlc3NlcygpKSB7CisgICAgICAgICAgICBpZiAoIXdlYlByb2Nlc3MgfHwgIXdlYlByb2Nl
c3MtPnBhZ2VDb3VudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBwYWdlIDogd2ViUHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICAgICAgICAg
IGlmICghcGFnZSB8fCBwYWdlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyAgICAK
K3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNGcm9t
VGhlVG9wLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBh
Z2VQcm94eSogd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29u
c3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSYgdCkgeworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwor
ICAgIH07CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0
dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAg
IHJldHVybiB0LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICBX
VEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHRl
bGVtZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoY29uc3Qg
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWdu
ZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgdGVsZW1ldHJ5KT4gbnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5udW1iZXJPZlRpbWVzRGF0YVJlY29y
ZHNSZW1vdmVkOworICAgIH07CisgICAgCisgICAgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IDA7CisgICAgdW5zaWduZWQgdG9wU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucyA9IDA7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyA9IDA7CisgICAgdW5zaWduZWQgdG9wTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVt
b3ZlZCA9IDA7CisgICAgdG9wUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9
IG51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbihzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXMsIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEpOworICAgIHRvcFN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0g
MSwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgdG9wU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAx
LCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICB0b3BTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEs
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIpOworICAgIHRvcE51bWJlck9mVGlt
ZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwg
bnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlcik7CisgICAgCisgICAgV1RGOjpT
dHJpbmdCdWlsZGVyIHByZWFtYmxlQnVpbGRlcjsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5k
KCJ0b3AiKTsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVzb3Vy
Y2VzRnJvbVRoZVRvcCk7CisgICAgU3RyaW5nIGtleVByZWFtYmxlID0gcHJlYW1ibGVCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIGRlc2NyaXB0aW9uUHJlYW1ibGVC
dWlsZGVyOworICAgIGRlc2NyaXB0aW9uUHJlYW1ibGVCdWlsZGVyLmFwcGVuZCgiVG9wICIpOwor
ICAgIGRlc2NyaXB0aW9uUHJlYW1ibGVCdWlsZGVyLmFwcGVuZE51bWJlcihudW1iZXJPZlJlc291
cmNlc0Zyb21UaGVUb3ApOworICAgIFN0cmluZyBkZXNjcmlwdGlvblByZWFtYmxlID0gcHJlYW1i
bGVCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgaWYgKCF3ZWJQYWdlUHJveHkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKGtleVByZWFtYmxlICsgIlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24iLAorICAgICAgICBkZXNjcmlwdGlvblByZWFtYmxlICsgIjogTnVtYmVyIG9mIHByZXZh
bGVudCByZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0aW9uLiIsCisgICAgICAgIHRvcFByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFdlYkNvcmU6OlNob3VsZFNhbXBs
ZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUo
a2V5UHJlYW1ibGUgKyAiU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsCisgICAgICAgIGRl
c2NyaXB0aW9uUHJlYW1ibGUgKyAiOiBNZWRpYW4gc3ViIGZyYW1lIHVuZGVyIG51bWJlciBvZiB0
b3AgZnJhbWUgb3JpZ2lucy4iLAorICAgICAgICB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHktPmxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKGtleVByZWFtYmxlICsgIlN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMiLAorICAgICAgICBkZXNjcmlwdGlvblByZWFtYmxlICsgIjogTWVk
aWFuIHN1YnJlc291cmNlIHVuZGVyIG51bWJlciBvZiB0b3AgZnJhbWUgb3JpZ2lucy4iLAorICAg
ICAgICB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBXZWJDb3JlOjpTaG91
bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFZhbHVlKGtleVByZWFtYmxlICsgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iLAorICAg
ICAgICBkZXNjcmlwdGlvblByZWFtYmxlICsgIjogTWVkaWFuIHN1YnJlc291cmNlIHVuaXF1ZSBy
ZWRpcmVjdHMgdG8gb3RoZXIgb3JpZ2lucy4iLAorICAgICAgICB0b3BTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdl
UHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKGtleVByZWFtYmxlICsgIk51bWJl
ck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQiLAorICAgICAgICBkZXNjcmlwdGlvblByZWFtYmxl
ICsgIjogTWVkaWFuIG51bWJlciBvZiB0aW1lcyBkYXRhIHJlY29yZHMgd2VyZSByZW1vdmVkLiIs
CisgICAgICAgIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQsIDAsIFdlYkNvcmU6
OlNob3VsZFNhbXBsZTo6Tm8pOworfQorICAgIAorc3RhdGljIHZvaWQgc3VibWl0VG9wTGlzdHMo
Y29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0
ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBXZWJQYWdlUHJveHkq
IHdlYlBhZ2VQcm94eSkKK3sKKyAgICBzdWJtaXRUb3BMaXN0KDEsIHNvcnRlZFByZXZhbGVudFJl
c291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwg
d2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm47CisgICAgc3Vi
bWl0VG9wTGlzdCgzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAg
aWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgp
IDwgMTApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwLCBzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgNTApCisgICAgICAgIHJldHVybjsK
KyAgICBzdWJtaXRUb3BMaXN0KDUwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Cisg
ICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24uc2l6ZSgpIDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgxMDAs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKK30KKyAgICAKKy8vIFRoaXMgZnVuY3Rp
b24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCit2b2lkIHN0YXRpYyBub3RpZnlQYWdlcyhWZWN0
b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIHByZXZhbGVudFJlc291cmNlcywg
VmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7CisgICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG90YWxQcmV2
YWxlbnRSZXNvdXJjZXNLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlRvdGFsUHJldmFsZW50UmVzb3VyY2VzIikpOworICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiB0b3RhbFByZXZhbGVudFJlc291cmNlc1ZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShw
cmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKSk7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNLZXkuZ2V0KCksIHRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzVmFsdWUuZ2V0KCkpOworICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdGFsUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpKTsKKyAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
dG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uVmFsdWUgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKHRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uKSk7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
dG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5LmdldCgpLCB0b3Rh
bFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25WYWx1ZS5nZXQoKSk7CisgICAg
CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeSB0ZWxlbWV0cnkpPiBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10g
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIHRv
cDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDIsIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnNHZXR0ZXIpOworICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3Az
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0tleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zKSk7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9w
M1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNLZXkuZ2V0KCksIHRvcDNTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zVmFsdWUuZ2V0KCkpOworICAgIAorICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbbWVzc2FnZUJvZHldIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQ
YWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKHRvSW1wbChtZXNzYWdlQm9keS5nZXQoKSkp
OworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgCisgICAgYXV0byBwcmV2YWxlbnRSZXNvdXJjZXMgPSByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUucHJldmFsZW50UmVzb3VyY2VzKCk7CisgICAgCisgICAgaWYgKHBy
ZXZhbGVudFJlc291cmNlcy5zaXplKCkgPCBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVs
ZW1ldHJ5KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXMgPSB0b1NvcnRlZFByZXZhbGVudFJlc291cmNlcyhwcmV2YWxlbnRSZXNvdXJjZXMp
OworICAgIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsKKyAgICB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IDA7CisgICAgZm9yIChh
dXRvJiBwcmV2YWxlbnRSZXNvdXJjZSA6IHNvcnRlZFByZXZhbGVudFJlc291cmNlcykgeworICAg
ICAgICBpZiAocHJldmFsZW50UmVzb3VyY2UuaGFzSGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICAgICAgKyt0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
bjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5hcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIHdlYlBhZ2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOwor
ICAgIGlmICghd2ViUGFnZVByb3h5KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd2ViUGFn
ZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSgidG90YWxOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlcyIsICJUb3RhbCBudW1iZXIgb2YgcHJldmFsZW50IHJlc291cmNlcy4iLCBw
cmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCAwLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsK
KyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKCJ0b3RhbE51
bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIsICJUb3RhbCBudW1i
ZXIgb2YgcHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uIiwgdG90YWxO
dW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFdlYkNvcmU6
OlNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIHN1Ym1pdFRvcExpc3RzKHNvcnRlZFByZXZh
bGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNXaGVuVGVsZW1l
dHJ5V2FzQ2FwdHVyZWQpCisgICAgICAgIG5vdGlmeVBhZ2VzKHByZXZhbGVudFJlc291cmNlcywg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdG90YWxOdW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOworfQorICAgIAordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIGFsd2F5cykKK3sKKyAgICBub3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGFsd2F5czsKK30KKyAgICAKK30KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorbmFtZXNwYWNlIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkgeworICAgIAordm9pZCBjYWxjdWxhdGVBbmRT
dWJtaXQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJik7Cit2b2lkIHNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wpOworICAgIAorfTsKKyAgICAK
K30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIx
ODUxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMSBAQCB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlCiAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZv
ck9uZURvbWFpbih0b1dURlN0cmluZyhob3N0TmFtZSksIHZhbHVlKTsKIH0KIAordm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAg
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigp
OworfQorCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQodmFsdWUpOwpAQCAtMTI2LDYgKzEzMSwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJTZXRTCiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZh
bHVlKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQodmFsdWUpOworfQorCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCShyZXZpc2lvbiAyMTg1MTApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwxMCBAQCBleHRlcm4gIkMiIHsK
ICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwog
ICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oV0tTdHJpbmdSZWYgaG9zdE5h
bWUsIGJvb2wgdmFsdWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICBXS19FWFBP
UlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7CiAgICAgV0tfRVhQT1JU
IHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODUxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE4OCw2ICsxMTg4
LDggQEAKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3
MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1
NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0
NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENs
aWVudC5jcHAgKi87IH07CiAJCTY1Qjg2RjFFMTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkI4MjFEREMxRUVGMDVE
RDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCODIxRERBMUVFRjA1REQw
MEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi87IH07CisJ
CTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmNwcCAqLzsgfTsKIAkJNkJCQkFEMzgxRUMzRTU3ODAwQUQwQTJBIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkJCQUQzNzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNkJFOTY5OUMxRTQz
QjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlCMUU0M0IzRkYw
MDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkJFOTY5OUUxRTQzQjQxRDAw
OEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5OUQxRTQzQjQxRDAwOEI3
NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovOyB9OwpAQCAtMzQ3
Niw2ICszNDc4LDggQEAKIAkJNjU0NkE4MkExMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVu
ZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5z
cGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxl
SW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTgxMkYx
MUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREIxRUVGMDVE
RDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCQkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJFOTY5OUIxRTQzQjNGRjAw
OEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyog
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NTcsNiArNjg2MSw4IEBACiAJCQkJN0E5Q0Q4
QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
Ki8sCiAJCQkJN0E5Q0Q4QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oICovLAogCQkJCTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW4gKi8sCisJCQkJNkI4MjFEREExRUVG
MDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLywK
KwkJCQk2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHAgKi8sCiAJCQkJNTFEMTI0MjQxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVS
TFNjaGVtZUhhbmRsZXIuY3BwICovLAogCQkJCTUxRDEyNDI1MUU2RDNDQzMwMDJCMjgyMCAvKiBX
ZWJVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJCQkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8q
IFdlYlVSTFNjaGVtZVRhc2suY3BwICovLApAQCAtODI0Myw2ICs4MjQ5LDcgQEAKIAkJCQkyREFC
QTc3NjFBODJCNDIxMDBFRjBGMUEgLyogQVBJSGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNBODhCNDYxQkM4ODI5MzAwQUJBNUMyIC8qIEFQSUhpdFRlc3RSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3NzUxMjMxMURGMERFRTIwMDhBMzUxQyAvKiBBUElJbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkI4MjFEREMxRUVGMDVERDAw
RDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3NjkwNzlFMThGMzQwQTIwMDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZUZv
cm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjkwNzlBMThGMzFDQjIwMDFERkYwNCAv
KiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NF
NEQyMDcxQTQ2Nzc2MTAwQzdGMTUyIC8qIEFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTk4NzMsNiArOTg4MCw3IEBACiAJCQkJNTE1RTc3MkIxODQwMDhC
OTAwMDcyMDNGIC8qIERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMTE1QzcxNDE5MEY4OUU0MDBFQ0M1MTYgLyogRGF0YWJhc2VQcm9jZXNz
SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUyMDIxODBGNUQxRTAwRTUzQkU5IC8qIERh
dGFiYXNlUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTZCODIxREREMUVFRjA1REQw
MEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxMkE5NzYwMTgwRTAzMUQwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3REQ1QkUxODBEQTdEMzAw
ODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
MkE5NzY5MTgwRTA5QjgwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYwOSkKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA2LTIwICBKb2huIFdpbGFu
ZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlz
dGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHRocmVl
IG5ldyB0ZXN0UnVubmVyIGZ1bmN0aW9uczoKKyAgICAgICAgLSBpbnN0YWxsU3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKCkKKyAgICAgICAgLSBzdGF0aXN0aWNzRmlyZVRlbGVtZXRy
eUhhbmRsZXIoKQorICAgICAgICAtIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0
cnlXYXNDYXB0dXJlZCgpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIp
OgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
VGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRv
Q29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0
aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwog
MjAxNy0wNi0yMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaU9TIERuRF0gW1dLMl0gUmVtb3ZlIGN1c3RvbSBsb2dpYyBmb3IgZGlzYW1iaWd1YXRp
bmcgbG9uZyBwcmVzcyBhY3Rpb24gc2hlZXQgZ2VzdHVyZXMgYW5kIGRyYWcgbGlmdApJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxODUx
MCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MzcsNiArODM3LDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdAogICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51
bGxwdHI7CisgICAgCisgICAgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAog
ICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgpKTsKICAg
ICBydW5VbnRpbChtX2RvbmVSZXNldHRpbmcsIG1fY3VycmVudEludm9jYXRpb24tPnNob3J0VGlt
ZW91dCgpKTsKQEAgLTIyNzAsNiArMjI3MiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0
aXN0aWNzRmlyZVNob3VsCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihob3N0TmFtZSwgdmFsdWUp
OwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5
SGFuZGxlcigpOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0yMjgwLDYgKzIyODcsMTEgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZAogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCh2YWx1ZSk7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsK
ICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVl
bkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxODUxMCkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDggKzE2MywxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
KCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
Rm9yT25lRG9tYWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRp
bWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0
aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxODUxMCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU2LDYgKzEwNTYsMTEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzRmlyZVRlbGVtZXRy
eUhhbmRsZXIiKSkgeworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlz
dGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsK
ICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwpAQCAtMTA2Myw2ICsxMDY4LDEzIEBAIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSkgeworICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpIHsK
ICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDIx
ODUxMCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDE3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsKKyAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdG90YWxQcmV2YWxl
bnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlcyIp
KSkpOworICAgICAgICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24iKSkpKTsKKyAgICAgICAgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucyIpKSkpOworICAgICAgICAKKyAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0
aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHRvdGFs
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZXJyb3JNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVW5rbm93biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1l
c3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAko
cmV2aXNpb24gMjE4NTEwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM2LDYgKzYzNiw3IEBAIGVudW0g
ewogICAgIERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NE
aWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZFNjYW5EYXRh
UmVjb3Jkc0NhbGxiYWNrSUQsCisgICAgU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
SUQsCiAgICAgRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwKICAgICBG
aXJzdFVJU2NyaXB0Q2FsbGJhY2tJRCA9IDEwMAogfTsKQEAgLTEzODIsNyArMTM4MywzMSBAQCB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlCiB7CiAgICAgY2FsbFRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2tJRCk7CiB9
Ci0KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQoreworICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCBjYWxsYmFjayk7Cit9
CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFj
ayh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90YWxQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucykKK3sKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieyBcInRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0
b3RhbFByZXZhbGVudFJlc291cmNlcyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIsIFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBc
InRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zXCIgOiAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZE51bWJlcih0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgfSIpOworICAgIAorICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkp
OworICAgIAorICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrSUQsIDEsICZyZXN1bHQpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIiKSk7CkBAIC0x
NDIwLDYgKzE0NDUsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVNob3VsZFBh
cgogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlI
YW5kbGVyKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlVGVsZW1l
dHJ5SGFuZGxlciIpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVs
bHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCIpKTsKQEAgLTE0MzQsNiArMTQ2NSwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NTaG91bGRDbGFzCiAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShB
ZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQorICAgIAordm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwor
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUg
c2Vjb25kcykKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTg1MTApCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQ4LDExICszNDgsMTQgQEAgcHVibGljOgogICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGlj
cwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNr
KEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2Fu
RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGluc3Rh
bGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7
CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjaygpOwogICAg
IHZvaWQgc3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgdm9pZCBz
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvbiwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOwogICAgIHZv
aWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3Rh
dGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3Rh
dGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihKU1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRl
bGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29s
IHZhbHVlKTsKQEAgLTM2Niw2ICszNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzVGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAg
ICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVu
bmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTg1MTApCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewog
ICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3Rp
Y3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9p
ZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxs
YmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
KG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICBib29sZWFuIGlzU3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9v
bGVhbiB2YWx1ZSk7CkBAIC0yNjYsOCArMjY3LDEwIEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsK
ICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2
b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2
b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21h
aW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3Rp
Y3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
VGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRz
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTg2MDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNi0yMCAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6
IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAgICAgRW5hYmxlZCBoZXJlIHNp
bmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTctMDYtMjAgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBt
ZWRpYS9yZW1vdGUtY29udHJvbC1jb21tYW5kLXNlZWsuaHRtbCBpcyB0aW1pbmcgb3V0CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90
ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdl
bmVyYXRpb24tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9u
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBACittYWluIGZyYW1l
IC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1p
dExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgVGVs
ZW1ldHJ5IEdlbmVyYXRpb24KK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNTIEhvc3RzIGNsYXNzaWZpZWQgYXMgcHJl
dmFsZW50IHJlc291cmNlcy4KK1BBU1MgVG90YWwgcHJldmFsZW50IHJlc291cmNlcyBjb3JyZWN0
LgorUEFTUyBUb3RhbCBwcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbiBj
b3JyZWN0LgorUEFTUyBUb3AgMyBzdWJmcmFtZSB1bmRlciB0b3AgZnJhbWUgb3JpZ2lucyBjb3Jy
ZWN0LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVy
YXRpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9
ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVz
dCBmb3IgVGVsZW1ldHJ5IEdlbmVyYXRpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIvanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CisgICAgY29uc3QgdG9wRnJhbWUxID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90ZW1w
IjsKKyAgICBjb25zdCB0b3BGcmFtZTIgPSAiaHR0cDovLzEyNy4wLjAuMjo4MDAwL3RlbXAiOwor
ICAgIGNvbnN0IHRvcEZyYW1lMyA9ICJodHRwOi8vMTI3LjAuMC4zOjgwMDAvdGVtcCI7CisgICAg
Y29uc3QgdG9wRnJhbWU0ID0gImh0dHA6Ly8xMjcuMC4wLjQ6ODAwMC90ZW1wIjsKKyAgICBjb25z
dCBwcmV2YWxlbnRSZXNvdXJjZTEgPSAiaHR0cDovLzEyNy4wLjEuMTo4MDAwL3RlbXAiOworICAg
IGNvbnN0IHByZXZhbGVudFJlc291cmNlMiA9ICJodHRwOi8vMTI3LjAuMS4yOjgwMDAvdGVtcCI7
CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2UzID0gImh0dHA6Ly8xMjcuMC4xLjM6ODAwMC90
ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZTQgPSAiaHR0cDovLzEyNy4wLjEuNDo4
MDAwL3RlbXAiOworCisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUpIHsKKyAg
ICAgICAgaW50ZXJuYWxzLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZSk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQo
ZW5hYmxlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBz
ZXRFbmFibGVGZWF0dXJlKGZhbHNlKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY2hlY2tDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAg
ICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50
UmVzb3VyY2UxKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNo
VGVzdCgpOworICAgICAgICB9IGVsc2UgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKHByZXZhbGVudFJlc291cmNlMikpIHsKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQoIkhvc3QgMiBkaWQgbm90IGdldCBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZS4i
KTsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1
bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZTMpKSB7
CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDMgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
cHJldmFsZW50UmVzb3VyY2U0KSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCA0IGRp
ZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAg
ICAgZmluaXNoVGVzdCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZCgiSG9zdHMgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2VzLiIpOworICAgICAgICAg
ICAgcnVuVGVsZW1ldHJ5QW5kQ29udGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIHNldFVwU3RhdGlzdGljc0FuZENvbnRpbnVlKCkgeworICAgICAgICAvLyBQcmV2YWxl
bnQgcmVzb3VyY2UgMS4KKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9wRnJhbWUxKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHBy
ZXZhbGVudFJlc291cmNlMSwgdG9wRnJhbWUyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9w
RnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMSwgdG9wRnJhbWU0KTsKKworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFs
ZW50UmVzb3VyY2UxLCB0b3BGcmFtZTEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UxLCB0b3BGcmFt
ZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2UxLCB0b3BGcmFtZTMpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVz
b3VyY2UxLCB0b3BGcmFtZTQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZyYW1l
MSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZyYW1lMik7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxl
bnRSZXNvdXJjZTEsIHRvcEZyYW1lMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTEsIHRvcEZy
YW1lNCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHJlc291cmNlIDIuCisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRS
ZXNvdXJjZTIsIHRvcEZyYW1lMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTIsIHRvcEZyYW1lMik7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbihwcmV2YWxlbnRSZXNvdXJjZTIsIHRvcEZyYW1lMyk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJj
ZTIsIHRvcEZyYW1lNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlMiwgdG9wRnJhbWUxKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KHByZXZhbGVudFJlc291cmNlMiwgdG9wRnJhbWUyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlMiwg
dG9wRnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlMiwgdG9wRnJhbWU0KTsKKworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4o
cHJldmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2Uy
LCB0b3BGcmFtZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTMpOworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4ocHJldmFsZW50UmVzb3VyY2UyLCB0b3BGcmFtZTQpOworCisgICAgICAgIC8vIFByZXZhbGVu
dCByZXNvdXJjZSAzLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2UzLCB0b3BGcmFtZTEpOworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJl
dmFsZW50UmVzb3VyY2UzLCB0b3BGcmFtZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2UzLCB0b3BG
cmFtZTMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2UzLCB0b3BGcmFtZTQpOworCisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxl
bnRSZXNvdXJjZTMsIHRvcEZyYW1lMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZTMsIHRvcEZyYW1l
Mik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZTMsIHRvcEZyYW1lMyk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNv
dXJjZTMsIHRvcEZyYW1lNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJhbWUx
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJhbWUyKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVu
dFJlc291cmNlMywgdG9wRnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlMywgdG9wRnJh
bWU0KTsKKworICAgICAgICAvLyBQcmV2YWxlbnQgcmVzb3VyY2UgNC4KKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJl
c291cmNlNCwgdG9wRnJhbWUxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlNCwgdG9wRnJhbWUyKTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luKHByZXZhbGVudFJlc291cmNlNCwgdG9wRnJhbWUzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNl
NCwgdG9wRnJhbWU0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFtZTEpOworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8o
cHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFtZTIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0
b3BGcmFtZTMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2U0LCB0b3BGcmFtZTQpOworCisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihw
cmV2YWxlbnRSZXNvdXJjZTQsIHRvcEZyYW1lMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTQs
IHRvcEZyYW1lMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZTQsIHRvcEZyYW1lMyk7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bihwcmV2YWxlbnRSZXNvdXJjZTQsIHRvcEZyYW1lNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHByZXZhbGVudFJlc291cmNlNCwgdHJ1
ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVj
b3Jkc0NhbGxiYWNrKGNoZWNrQ2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAgICAgIHRl
c3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCkgeworICAgICAgICB0ZXN0
UnVubmVyLnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNoZWNrVGVsZW1ldHJ5KHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0LnRvdGFs
UHJldmFsZW50UmVzb3VyY2VzID09PSA0KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiVG90YWwg
cHJldmFsZW50IHJlc291cmNlcyBjb3JyZWN0LiIpOworICAgICAgICBpZiAocmVzdWx0LnRvdGFs
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9PT0gMSkKKyAgICAgICAgICAg
IHRlc3RQYXNzZWQoIlRvdGFsIHByZXZhbGVudCByZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0
aW9uIGNvcnJlY3QuIik7CisgICAgICAgIGlmIChyZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMgPT09IDQpCisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUb3AgMyBzdWJmcmFt
ZSB1bmRlciB0b3AgZnJhbWUgb3JpZ2lucyBjb3JyZWN0LiIpOworICAgICAgICBmaW5pc2hUZXN0
KCk7CisgICAgfQorCisgICAgc2V0RW5hYmxlRmVhdHVyZSh0cnVlKTsKKyAgICBqc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKyAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2soY2hlY2tUZWxlbWV0cnkpOworICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1
ZSk7CisgICAgc2V0VXBTdGF0aXN0aWNzQW5kQ29udGludWUoKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTg1MTApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAt
NzA1LDYgKzcwNSw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWMK
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsYXNzaWZ5LWFzLXBy
ZXZhbGVudC1iYXNlZC1vbi1zdWJyZXNvdXJjZS11bmlxdWUtcmVkaXJlY3RzLXRvLmh0bWwgWyBQ
YXNzIF0KIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWlu
LW1lbW9yeS1hbmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2Iv
MTcyNDUyIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0
aGVyaW5nLmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCitodHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sIFsgUGFzcyBd
CiAKICMjIyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQg
YXJlIGV4cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313735</attachid>
            <date>2017-06-23 12:53:03 -0700</date>
            <delta_ts>2017-06-23 13:47:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170623125712.patch</filename>
            <type>text/plain</type>
            <size>70980</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODc1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTIzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXSzJdIFN1cHBvcnQgLVtXZWJBVlBsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6XQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZp
c2lvbiAyMTg3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3Jl
LT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9i
c2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBwcmlt
YXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODc1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIx
ODc1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25D
b29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICBy
ZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2ICszNzMsMzggQEAg
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHBy
ZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRl
ZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8PSAwID8gMCA6Cisg
ICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAgICAgICAgICAgc29y
dGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgICAg
ICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJl
dmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4gVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiB7IH07CisgICAgCisgICAgc3RkOjpzb3J0KHNvcnRlZC5i
ZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikgeworICAgICAgICByZXR1
cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID4KKyAgICAgICAg
Yi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH0pOworICAg
IAorICAgIHJldHVybiBzb3J0ZWQ7Cit9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lv
biAyMTg3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE3IEBAIGNsYXNzIEtleWVkRGVj
b2RlcjsKIGNsYXNzIEtleWVkRW5jb2RlcjsKIGNsYXNzIFVSTDsKIAorc3RhdGljIGNvbnN0IGF1
dG8gbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSA9IDM7CisgICAgCitzdHJ1
Y3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgeworICAgIHVuc2lnbmVkIG51bWJlck9mVGlt
ZXNEYXRhUmVjb3Jkc1JlbW92ZWQgeyAwIH07CisgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rp
b24geyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiB7IDAg
fTsKKyAgICB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHsgMCB9OworICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgeyAwIH07CisgICAgdW5z
aWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB7IDAgfTsKK307CisgICAgCiBzdHJ1
Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gewpAQCAtNjQsOCArNzUsMTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpPiYmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFdyaXRlUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0R3JhbmRmYXRoZXJFeGlzdGlu
Z1dlYnNpdGVEYXRhQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKKyAgICB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFRpbWVUb0xp
dmVDb29raWVQYXJ0aXRpb25GcmVlKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldE1pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwpAQCAtNzcs
NiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0hhZFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNU
b1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3RhdGlzdGljc0ZvclJlbW92
ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21h
aW5zKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0
eU9yTm9TdG9yZShIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1RvR3JhbmRmYXRoZXIpOwpAQCAtOTUsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGJvb2wgY2xlYXJGaXJzdCk+IG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5k
bGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3dyaXRlUGVyc2lzdGVudFN0b3JlSGFu
ZGxlcjsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9ncmFuZGZhdGhlckV4aXN0aW5nV2Vi
c2l0ZURhdGFIYW5kbGVyOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2ZpcmVUZWxlbWV0
cnlIYW5kbGVyOwogCiAgICAgZG91YmxlIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCB7
IDAgfTsKICAgICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgeyAwIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3Bw
CShyZXZpc2lvbiAyMTg3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Nyw1ICs3NjcsMTAgQEAgU3RyaW5nIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6YmFja2dyb3VuZAogICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Im92ZXI3MCIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Iik7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2lu
Z0tleXMuaAkocmV2aXNpb24gMjE4NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9z
dGljTG9nZ2luZ0tleXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw4IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIG1lbW9yeVVzYWdlVG9EaWFnbm9z
dGljTG9nZ2luZ0tleSh1aW50NjRfdCBtZW1vcnlVc2FnZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFN0cmluZyBmb3JlZ3JvdW5kQ1BVVXNhZ2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KGRv
dWJsZSBjcHVVc2FnZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBiYWNrZ3Jv
dW5kQ1BVVXNhZ2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KGRvdWJsZSBjcHVVc2FnZSk7CisgICAg
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5S2V5KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMTg3NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw2MSBAQAorMjAxNy0wNi0yMyAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFk
ZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFr
ZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5LmNwcAorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAgICAg
QWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisg
ICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6CisgICAgICAgIChX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAg
ICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRl
bGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlz
aGVkKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgICAgIFRl
c3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgICAg
IENvbmZpZ3VyZXMgYSB0aW1lciBmb3IgdGVsZW1ldHJ5IGNhcHR1cmUuIEZpcmVzIDUgc2Vjb25k
cyBhZnRlciBsYXVuY2gKKyAgICAgICAgICAgIGFuZCB0aGVuIGV2ZXJ5IDI0IGhvdXJzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVu
YW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92
ZURhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMg
LT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMgLT4g
bm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9h
ZE9ic2VydmVyKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMgLT4g
bm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0
ZURhdGEpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpOgorICAgICAg
ICAgICAgIENhbGxzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0
ZUFuZFN1Ym1pdCgpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpudW1iZXJPZlJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjptZWRpYW4pOgorICAgICAg
ICAoV2ViS2l0Ojpub25FcGhlbWVyYWxXZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0Ojpz
dWJtaXRUb3BMaXN0KToKKyAgICAgICAgKFdlYktpdDo6c3VibWl0VG9wTGlzdHMpOgorICAgICAg
ICAoV2ViS2l0Ojpub3RpZnlQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTctMDYtMjMgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gU3VwcG9ydCAtW1dlYkFWUGxheWVyQ29udHJv
bGxlciBzZXRNdXRlZDpdCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24g
MjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw2ICsxMDksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIu
Y3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dE1lbnVMaXN0
ZW5lclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAog
CiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lv
biAyMTg3NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94
eTo6bm90aWZ5UGFnZVN0YXRpc3RpCiAgICAgICAgIHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZSgiV2Vic2l0ZURhdGFTY2FuRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnNGaW5pc2hlZCIsIG51bGxwdHIpOwogfQogICAgIAordm9pZCBXZWJQcm9jZXNzUHJveHk6
Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQoQVBJOjpPYmplY3QqIG1lc3Nh
Z2VCb2R5KQoreworICAgIGZvciAoYXV0byYgcGFnZSA6IGdsb2JhbFBhZ2VNYXAoKSkKKyAgICAg
ICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKCJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiLCBtZXNzYWdlQm9keSk7Cit9CisgICAgCiBSZWY8
V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYg
cGFnZUNsaWVudCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRp
b24pCiB7CiAgICAgdWludDY0X3QgcGFnZUlEID0gZ2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxODc0
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZWxl
dGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0
ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4m
JiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywg
RnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAg
IHN0YXRpYyB2b2lkIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBh
Z2UsIEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2VkKCk7CisgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlG
aW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCiAgICAgdm9pZCBlbmFibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwogICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMSArMTI0LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OmYKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHto
b3N0TmFtZX0sIHsgfSwgZmFsc2UpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsK
K30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodmFsdWUpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVl
KQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKyAgICAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCh2YWx1ZSk7CkBAIC0xNTEsNiArMTYxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6cgogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWRPYnNlcnZlcigpLnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoNjApOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZl
cigpLnNldEdyYW5kZmF0aGVyaW5nVGltZSgzNjAwKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZmFs
c2UpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGZhbHNlKTsKICAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsKHRydWUpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLmNsZWFySW5NZW1vcnlTdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmgJKHJldmlzaW9uIDIxODc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3Rh
dGljIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lk
IHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAg
IHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmUoKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpAQCAtNDcsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0
ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZTsKLXN0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzID0g
ZmFsc2U7CitzdGF0aWMgYXV0byBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
ID0gZmFsc2U7CiBzdGF0aWMgYXV0byBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCA9IHRydWU7CiAKIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKQEAgLTU5LDcgKzYwLDExIEBAIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3UKICAgICA6IG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAg
ICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdGF0aXN0aWNz
U3RvcmFnZVBhdGgocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKKyAgICAsIG1fdGVs
ZW1ldHJ5T25lU2hvdFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkKKyAgICAsIG1fdGVsZW1ldHJ5
UmVwZWF0ZWRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiB7CisgICAgbV90ZWxlbWV0cnlPbmVT
aG90VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7CisgICAgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVy
LnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6On5XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQpAQCAtNjgsNyArNzMsNyBAQCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiAKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wgYWx3YXlzKQogewotICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOworICAgIG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBhbHdheXM7CiB9CiAKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQpAQCAtMTE5LDcgKzEyNCw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAgIC8vIFN3aXRj
aCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9y
ZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5z
ID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KHByZXZhbGVudFJlc291
cmNlRG9tYWlucyksIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5
cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgbm90aWZ5UGFn
ZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oVmVjdG9y
PFN0cmluZz4gZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAg
ICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBX
VEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKV0oVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFi
bGUgewogICAgICAgICAgICAgLy8gQnV0IGFsd2F5cyB0b3VjaCB0aGUgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyBzdG9yZSBvbiB0aGUgd29ya2VyIHF1ZXVlLgogICAgICAgICAgICAgbV9zdGF0aXN0
aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KSwgdG9wRG9tYWlucyA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShk
b21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmNvcmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVk
RGF0YVJlY29yZHModG9wRG9tYWlucyk7CkBAIC0xNDAsNyArMTQ1LDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURh
dGFSZWNvcmRzKCk7CiAgICAgICAgIAotICAgICAgICBpZiAobm90aWZ5UGFnZXMpIHsKKyAgICAg
ICAgaWYgKG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzZWQoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTkzLDYgKzE5OCwxMSBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUtPnNldEdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewogICAgICAgICBncmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoKTsKICAgICB9KTsKKyAgICBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS0+c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAgICAvLyBUaGlzIGNhbmNlbHMgdGhlIG9u
ZSBzaG90IHRpbWVyIGFuZCBpcyBvbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgor
ICAgICAgICBtX3RlbGVtZXRyeU9uZVNob3RUaW1lci5zdG9wKCk7CisgICAgICAgIG1fdGVsZW1l
dHJ5T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMpOworICAgIH0pOwogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMjUsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhCiAgICAgCiAgICAgLy8gU3dpdGNo
IHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3Jl
CiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUs
IG5vdGlmeVBhZ2VzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIChIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhX
ZWJzaXRlRGF0YSkgbXV0YWJsZSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2ViaXRlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgbm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgewogICAgICAgICAgICAg
Ly8gQnV0IGFsd2F5cyB0b3VjaCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzdG9yZSBvbiB0
aGUgd29ya2VyIHF1ZXVlCiAgICAgICAgICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0b3BEb21haW5zID0gQ3Jv
c3NUaHJlYWRDb3BpZXI8SGFzaFNldDxTdHJpbmc+Pjo6Y29weSh0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPmNvcmVTdG9yZSgpLmhhbmRsZUZyZXNoU3RhcnRXaXRoRW1wdHlPck5v
U3RvcmUoV1RGTW92ZSh0b3BEb21haW5zKSk7CkBAIC0zMjksNSArMzM5LDE0IEBAIHN0ZDo6dW5p
cXVlX3B0cjxLZXllZERlY29kZXI+IFdlYlJlc291cmMKIAogICAgIHJldHVybiBLZXllZERlY29k
ZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3RGF0YS0+ZGF0
YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soY29yZVN0b3JlKCkuc3RhdGlzdGljc0xvY2soKSk7CisgICAgICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb3JlU3RvcmUoKSk7Cisg
ICAgfSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAkocmV2aXNpb24gMjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMCBA
QAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVJl
Y29yZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTk1LDYgKzk3LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHdyaXRlRW5jb2RlclRvRGlzayhXZWJDb3JlOjpLZXllZEVuY29kZXImLCBjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5
ZWREZWNvZGVyPiBjcmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBsYWJlbCkgY29u
c3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCB0ZWxlbWV0cnlUaW1lckZpcmVkKCk7CiAKICAgICBSZWY8V2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKICNp
ZiBIQVZFKENPUkVfUFJFRElDVElPTikKQEAgLTEwNSw2ICsxMDksOCBAQCBwcml2YXRlOgogICAg
IFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAgU3RyaW5nIG1fc3Rh
dGlzdGljc1N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCB7IGZhbHNlIH07CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0YXRpYyBh
dXRvIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gZmFsc2U7CisgICAgCitz
dGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHJlc291cmNlcywgc2l6ZV90IGJl
Z2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChyZXNvdXJjZXMuaXNFbXB0eSgpIHx8IHJlc291
cmNlcy5zaXplKCkgPCBiZWdpbiArIDEgfHwgcmVzb3VyY2VzLnNpemUoKSA8IGVuZCArIDEpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgZm9y
IChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHJlc291cmNl
c1tpXS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRpYyB1bnNpZ25lZCBtZWRp
YW4oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmICh2LnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4g
dlswXTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIG1pZGRsZSA9
IHNpemUgLyAyOworICAgIGlmIChzaXplICUgMikKKyAgICAgICAgcmV0dXJuIHZbbWlkZGxlXTsK
KyAgICByZXR1cm4gKHZbbWlkZGxlIC0gMV0gKyB2W21pZGRsZV0pIC8gMjsKK30KKyAgICAKK3N0
YXRpYyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5PiYgdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgY29uc3QgV1RGOjpGdW5jdGlv
bjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4m
IHN0YXRpc3RpY0dldHRlcikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkgfHwgdi5zaXplKCkgPCBi
ZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7CisgICAgcGFydC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGVuZCAtIGJlZ2luICsgMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW47IGkgPD0g
ZW5kOyArK2kpCisgICAgICAgIHBhcnQuYXBwZW5kKHN0YXRpc3RpY0dldHRlcih2W2ldKSk7Cisg
ICAgCisgICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKK30KKyAgICAKK3N0YXRpYyBXZWJQYWdlUHJv
eHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCit7CisgICAgYXV0byBwcm9jZXNzUG9vbHMg
PSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7CisgICAgaWYgKHByb2Nlc3NQb29s
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcHJv
Y2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHNbMF07CisgICAgaWYgKCFwcm9jZXNzUG9vbCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgZm9yIChhdXRvJiB3ZWJQcm9jZXNzIDogcHJv
Y2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcGFnZSA6IHdlYlBy
b2Nlc3MtPnBhZ2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdlLT5zZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJu
IHBhZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisgICAgCitz
dGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0KHVuc2lnbmVkIG51bWJlck9mUmVzb3VyY2VzRnJvbVRo
ZVRvcCwgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+
JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7Cisg
ICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0
dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAg
IHJldHVybiB0LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICBX
VEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0
ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyID0gW10gKGNvbnN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2ln
bmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0Lm51bWJlck9mVGltZXNEYXRhUmVj
b3Jkc1JlbW92ZWQ7CisgICAgfTsKKyAgICAKKyAgICB1bnNpZ25lZCB0b3BQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9t
VGhlVG9wIC0gMSk7CisgICAgdW5zaWduZWQgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wTnVtYmVy
T2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3Ag
LSAxLCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyKTsKKyAgICAKKyAgICBT
dHJpbmdCdWlsZGVyIHByZWFtYmxlQnVpbGRlcjsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgidG9wIik7CisgICAgcHJlYW1ibGVCdWlsZGVyLmFwcGVuZE51bWJlcihudW1iZXJP
ZlJlc291cmNlc0Zyb21UaGVUb3ApOworICAgIFN0cmluZyBkZXNjcmlwdGlvblByZWFtYmxlID0g
cHJlYW1ibGVCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgd2ViUGFnZVByb3h5LmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgQVNDSUlM
aXRlcmFsKCJQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiksCisgICAgICAg
IHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFNob3VsZFNhbXBs
ZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXko
KSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucyIpLAorICAgICAgICB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAw
LCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyBBU0NJSUxpdGVyYWwoIlN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwKKyAgICAgICAgdG9wU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsg
QVNDSUlMaXRlcmFsKCJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIiksCisgICAgICAgIHRv
cFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAg
IHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRp
b25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3Zl
ZCIpLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkLCAwLCBTaG91
bGRTYW1wbGU6Ok5vKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3RzKGNvbnN0
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291
cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHkpCit7CisgICAgc3VibWl0VG9wTGlzdCgxLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBh
Z2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRv
cExpc3QoMywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDEw
KQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgxMCwgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDUwKQorICAgICAgICByZXR1cm47CisgICAg
c3VibWl0VG9wTGlzdCg1MCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAor
ICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNp
emUoKSA8IDEwMCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAwLCBzb3J0
ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Cit9CisgICAgCisvLyBUaGlzIGZ1bmN0aW9uIGlz
IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgordm9pZCBzdGF0aWMgbm90aWZ5UGFnZXMoY29uc3QgVmVj
dG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
LCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3RhbE51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKK3sKKyAgICBXVEY6OkZ1bmN0
aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkp
PiBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIHRvcDNTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIDAsIDIsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIp
OworICAgIAorICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlQm9keTsKKyAgICBt
ZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJlc291cmNlcyIpLCBB
UEk6OlVJbnQ2NDo6Y3JlYXRlKHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpKTsKKyAg
ICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24iKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZSh0b3RhbE51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgIG1lc3NhZ2VCb2R5LnNl
dChBU0NJSUxpdGVyYWwoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiksIEFQSTo6
VUludDY0OjpjcmVhdGUodG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpKTsKKyAgICAK
KyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW21lc3NhZ2VCb2R5ID0gV1RGTW92ZShtZXNz
YWdlQm9keSldIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGlj
c1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKG1lc3NhZ2VCb2R5KS5w
dHIoKSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRlZFByZXZhbGVudFJlc291cmNlcyA9IHJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5zb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSgpOworICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpIDwgbWluaW11bVBy
ZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsKKyAgICBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwcmV2YWxlbnRSZXNv
dXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb247CisgICAgcHJldmFsZW50UmVzb3VyY2VzRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNv
dXJjZSA6IHNvcnRlZFByZXZhbGVudFJlc291cmNlcykgeworICAgICAgICBpZiAocHJldmFsZW50
UmVzb3VyY2UuaGFzSGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJldmFsZW50UmVz
b3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnVuY2hlY2tlZEFwcGVuZChwcmV2YWxlbnRS
ZXNvdXJjZS5kYXlzU2luY2VVc2VySW50ZXJhY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnVuY2hl
Y2tlZEFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQorICAgIAorICAgIGF1dG8gd2Vi
UGFnZVByb3h5ID0gbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCk7CisgICAgaWYgKCF3ZWJQYWdl
UHJveHkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdu
b3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoInRvdGFsTnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXMiKSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgMCwgU2hv
dWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdp
dGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbiIpLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24uc2l6ZSgpLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAKKyAgICBpZiAocHJl
dmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDApCisgICAg
ICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJ
TGl0ZXJhbCgidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uIiksIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFj
dGlvblswXSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgaWYgKHByZXZhbGVudFJlc291cmNl
c0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAxKQorICAgICAgICB3ZWJQYWdlUHJv
eHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoIm1lZGlh
blByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24iKSwgbWVkaWFuKHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlv
biksIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIHN1Ym1pdFRvcExpc3RzKHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgKndlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKG5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKQorICAgICAgICBub3RpZnlQYWdlcyhzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkpOwor
fQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIGFsd2F5cykKK3sKKyAgICBub3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGFsd2F5czsKK30KKyAgICAKK30KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworICAgIAorbmFtZXNwYWNlIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkgewor
ICAgIAordm9pZCBjYWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJik7Cit2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKGJvb2wpOworICAgIAorfTsKKyAgICAKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJGaXJlCiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbih0b1dURlN0cmluZyhob3N0
TmFtZSksIHZhbHVlKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
RmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorCiB2b2lkIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpAQCAtMTI2LDYg
KzEzMSwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTCiAgICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIH0KIAordm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQorCiB2b2lk
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKCkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw4ICs0OSwxMCBAQCBleHRlcm4gIkMiIHsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAg
ICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIFdLX0VY
UE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFu
ZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpOwog
ICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsK
KyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQ
T1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VI
b3Vycyh1bnNpZ25lZCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODc0
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTE4OCw2ICsxMTg4LDggQEAKIAkJNjUwMUJEMUExMkYxMjQzNDAw
RTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRs
ZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJbmpl
Y3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIElu
amVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJCTY1Qjg2RjFF
MTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8q
IFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmggKi87IH07CisJCTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAv
KiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAv
KiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLzsgfTsKIAkJNkJCQkFE
MzgxRUMzRTU3ODAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkJC
QUQzNzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJD
b2NvYS5tbSAqLzsgfTsKIAkJNkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwICovOyB9OwpAQCAtMzQ3Niw2ICszNDc4LDggQEAKIAkJNjU0NkE4MkEx
MzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNv
dXJjZUxvYWRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTcx
MkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5z
cGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCODIxRERBMUVFRjA1REQwMEQ3
QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZCQkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY4NTcsNiArNjg2MSw4IEBACiAJCQkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCiAJCQkJN0E5Q0Q4QzExQzc3OTg0OTAw
RDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCTdBOUNE
OEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVz
c2FnZXMuaW4gKi8sCisJCQkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLywKKwkJCQk2QjgyMUREQjFFRUYwNUREMDBEN0FG
NEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8sCiAJCQkJNTFE
MTI0MjQxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuY3BwICovLAogCQkJ
CTUxRDEyNDI1MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJ
CQkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3BwICovLApA
QCAtODI0Myw2ICs4MjQ5LDcgQEAKIAkJCQkyREFCQTc3NjFBODJCNDIxMDBFRjBGMUEgLyogQVBJ
SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCNDYxQkM4ODI5MzAwQUJB
NUMyIC8qIEFQSUhpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NzUxMjMxMURG
MERFRTIwMDhBMzUxQyAvKiBBUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjkwNzlFMThGMzQwQTIw
MDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3NjkwNzlBMThGMzFDQjIwMDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VVSUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNEQyMDcxQTQ2Nzc2MTAwQzdGMTUyIC8qIEFQ
SUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTk4NzMsNiAr
OTg4MCw3IEBACiAJCQkJNTE1RTc3MkIxODQwMDhCOTAwMDcyMDNGIC8qIERhdGFiYXNlUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTE1QzcxNDE5MEY4
OUU0MDBFQ0M1MTYgLyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFFMzUyMDIxODBGNUQxRTAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzc01hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzYwMTgwRTAz
MUQwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE3REQ1QkUxODBEQTdEMzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1By
b3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzY5MTgwRTA5QjgwMDM5QTE0OSAvKiBE
YXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIxODc1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMzIEBACisyMDE3LTA2LTIzICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRzIHRocmVlIG5ldyB0ZXN0UnVubmVyIGZ1bmN0aW9uczoK
KyAgICAgICAgLSBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKCkKKyAg
ICAgICAgLSBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQorICAgICAgICAtIHNldFN0
YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCgpCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VU
b1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlk
UnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0
aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
dGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5j
cHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxNy0wNi0yMyAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBTUEkgdG8gV0tVUkxT
Y2hlbWVUYXNrIGZvciByZWRpcmVjdGlvbgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNiArODM3LDgg
QEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMp
OwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CisgICAgCisgICAgc3RhdGlz
dGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAogICAgIFdLUGFnZUxvYWRVUkwobV9tYWlu
V2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgpKTsKICAgICBydW5VbnRpbChtX2RvbmVSZXNldHRp
bmcsIG1fY3VycmVudEludm9jYXRpb24tPnNob3J0VGltZW91dCgpKTsKQEAgLTIyNzAsNiArMjI3
MiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVNob3VsCiAgICAgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFu
ZGxlckZvck9uZURvbWFpbihob3N0TmFtZSwgdmFsdWUpOwogfQogCit2b2lkIFRlc3RDb250cm9s
bGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBA
IC0yMjgwLDYgKzIyODcsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1No
b3VsZAogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJT
ZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKICAgICBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNv
bmRzKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlz
aW9uIDIxODc0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTYzLDggKzE2MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0
aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
RmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
RmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKFdLU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5
SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVt
b3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShk
b3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDYgKzEwNTYsMTEgQEAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSkgeworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpA
QCAtMTA2Myw2ICsxMDY4LDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRp
b246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODEsNiArMjgxLDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eUZpbmlzaGVkIikpIHsKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQp
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlcyIpKSkpOworICAgICAgICB1bnNpZ25lZCB0
b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSkpKTsKKyAg
ICAgICAgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpKSkpOworICAgICAg
ICAKKyAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJh
Y2sodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJv
ck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJv
ciIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKICAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1l
c3NhZ2VCb2R5LmdldCgpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE4NzQ4KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjM2LDYgKzYzNiw3IEBAIGVudW0gewogICAgIERpZFJlbW92ZVN3aXBlU25h
cHNob3RDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxi
YWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCisgICAg
U3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsCiAgICAgRGlkUmVtb3ZlQWxsU2Vz
c2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwKICAgICBGaXJzdFVJU2NyaXB0Q2FsbGJhY2tJRCA9
IDEwMAogfTsKQEAgLTEzODMsNiArMTM4NCwzMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NEaWRTY2FuRGF0YVJlCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlk
U2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2tJRCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFs
bFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQor
eworICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlD
YWxsYmFja0lELCBjYWxsYmFjayk7Cit9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNl
cywgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1
bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykKK3sKKyAgICBXS0J1bmRs
ZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisgICAg
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgieyBcInRvdGFsUHJldmFsZW50UmVzb3VyY2VzXCIgOiAiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNlcyk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0
b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
XCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgfSIp
OworICAgIAorICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmlu
Zyhjb250ZXh0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIAorICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJh
Y2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZyZXN1bHQpOworfQor
ICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIiKSk7CkBAIC0xNDIwLDYgKzE0NDUsMTIgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcgogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlciIpKTsKKyAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wg
dmFsdWUpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKTsKQEAgLTE0MzQsNiArMTQ2NSwxNCBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzCiAgICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
ICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOwogfQorICAgIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIp
KTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsK
K30KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRh
dGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAy
MTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDExICszNDgsMTQgQEAgcHVibGljOgogICAgIC8v
IFJlc291cmNlIExvYWQgU3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRN
b2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQg
aW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNh
bGxiYWNrKTsKKyAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJh
Y2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0
YVJlY29yZHNDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jk
c0NhbGxiYWNrKCk7CisgICAgdm9pZCBzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2so
dW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlckZvck9uZURvbWFpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7Cisg
ICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKQEAgLTM2Niw2ICszNjksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUo
ZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2
YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNv
cmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5n
VGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZp
c2lvbiAyMTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDcgQEAg
aW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwog
ICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9i
amVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVj
b3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGlj
c0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZh
bHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmlu
ZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
KERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CkBAIC0yNjYsOCArMjY3LDEwIEBA
IGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9u
Q29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9u
Q29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZh
bHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1
ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTg3NTcpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAx
Ny0wNi0yMyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxl
bWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAg
ICAgICAgICAgRW5hYmxlZCBoZXJlIHNpbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgaXMgV0sy
LW9ubHkuCisKIDIwMTctMDYtMjMgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVzZSB3aW5kb3cuaW50ZXJuYWxzIGluc3RlYWQgb2Ygb3ZlcnJpZGVQcmVmZXJl
bmNlIHRvIHNldCBXZWJDb3JlIHNldHRpbmdzIGluIHRlc3RzCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0
ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgVGVsZW1ldHJ5IEdlbmVyYXRp
b24KK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFt
ZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNo
TG9hZEZvckZyYW1lCitUZXN0cyB0aGF0IHRlbGVtZXRyeSBmb3IgcHJldmFsZW50IHJlc291cmNl
cyBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgSG9zdHMgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2VzLgorUEFTUyB0
ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzIGlzIDQKK1BBU1MgdGVzdFJlc3VsdC50
b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gaXMgMQorUEFTUyB0ZXN0
UmVzdWx0LnRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIGlzIDQKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2Vu
ZXJhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbjwv
dGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVz
dHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRlZCBj
b3JyZWN0bHkuIik7CisKKyAgICBjb25zdCB0b3BGcmFtZVVybDEgPSAiaHR0cDovLzEyNy4wLjAu
MTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZyYW1lVXJsMiA9ICJodHRwOi8vMTI3LjAuMC4y
OjgwMDAvdGVtcCI7CisgICAgY29uc3QgdG9wRnJhbWVVcmwzID0gImh0dHA6Ly8xMjcuMC4wLjM6
ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BGcmFtZVVybDQgPSAiaHR0cDovLzEyNy4wLjAuNDo4
MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMSA9ICJodHRwOi8vMTI3
LjAuMS4xOjgwMDAvdGVtcCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwyID0gImh0
dHA6Ly8xMjcuMC4xLjI6ODAwMC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVy
bDMgPSAiaHR0cDovLzEyNy4wLjEuMzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJl
c291cmNlVXJsNCA9ICJodHRwOi8vMTI3LjAuMS40OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlv
biBjaGVja0NsYXNzaWZpY2F0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlmICghdGVzdFJ1
bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDEp
KSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQgY2xhc3NpZmll
ZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJI
b3N0IDIgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7Cisg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5l
ci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDMpKSB7
CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDMgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShwcmV2YWxlbnRSZXNvdXJjZVVybDQpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0
IDQgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIkhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAg
ICAgICAgICAgIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291
cmNlVXJsLCB0b3BGcmFtZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1l
VXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0KTsKKworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJl
dmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVy
bCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDMp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZh
bGVudFJlc291cmNlVXJsMSwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNl
VXJsMSwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsMSwgdG9wRnJh
bWVVcmwzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsMSwgdG9wRnJhbWVVcmw0KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzZXRVcFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAg
ICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDEpOworICAgICAgICBtYWtl
VXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsMik7CisgICAgICAgIG1ha2VVcmxQcmV2
YWxlbnQocHJldmFsZW50UmVzb3VyY2VVcmwzKTsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChw
cmV2YWxlbnRSZXNvdXJjZVVybDQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmV2YWxlbnRSZXNvdXJjZVVybDQsIHRydWUpOworCisg
ICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxs
YmFjayhjaGVja0NsYXNzaWZpY2F0aW9uQW5kQ29udGludWUpOworICAgICAgICB0ZXN0UnVubmVy
LnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5z
dGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKKyAgICB9CisKKyAgICB2YXIgdGVzdFJl
c3VsdDsKKyAgICBmdW5jdGlvbiBjaGVja1RlbGVtZXRyeShyZXN1bHQpIHsKKyAgICAgICAgdGVz
dFJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2
YWxlbnRSZXNvdXJjZXMiLCAiNCIpOworICAgICAgICBzaG91bGRCZSgidGVzdFJlc3VsdC50b3Rh
bFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiMSIpOworICAgICAgICBz
aG91bGRCZSgidGVzdFJlc3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsICI0
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikgeworICAgICAgICBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgdGVzdFJ1
bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKGNoZWNrVGVsZW1l
dHJ5KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1ZSk7CisgICAgICAgIHNl
dFVwU3RhdGlzdGljc0FuZENvbnRpbnVlKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxODc0OCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDUs
NiArNzA1LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xhc3NpZnktYXMtcHJldmFs
ZW50LWJhc2VkLW9uLXN1YnJlc291cmNlLXVuaXF1ZS1yZWRpcmVjdHMtdG8uaHRtbCBbIFBhc3Mg
XQogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVt
b3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0
NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJp
bmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIF0KIAog
IyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUg
ZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313742</attachid>
            <date>2017-06-23 13:47:43 -0700</date>
            <delta_ts>2017-06-23 14:16:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170623135151.patch</filename>
            <type>text/plain</type>
            <size>70978</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODc1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTIzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXSzJdIFN1cHBvcnQgLVtXZWJBVlBsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6XQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZp
c2lvbiAyMTg3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3Jl
LT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9i
c2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBwcmlt
YXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODc1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIx
ODc1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25D
b29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICBy
ZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2ICszNzMsMzggQEAg
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHBy
ZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRl
ZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8PSAwID8gMCA6Cisg
ICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAgICAgICAgICAgc29y
dGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgICAg
ICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJl
dmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4gVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PigpOworICAgIAorICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVn
aW4oKSwgc29ydGVkLmVuZCgpLCBbXShjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
YSwgY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGIpIHsKKyAgICAgICAgcmV0dXJu
IGEuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA+CisgICAgICAgIGIu
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9KTsKKyAgICAK
KyAgICByZXR1cm4gc29ydGVkOworfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5zKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24g
MjE4NzU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxNyBAQCBjbGFzcyBLZXllZERlY29k
ZXI7CiBjbGFzcyBLZXllZEVuY29kZXI7CiBjbGFzcyBVUkw7CiAKK3N0YXRpYyBjb25zdCBhdXRv
IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworICAgIAorc3RydWN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlRpbWVz
RGF0YVJlY29yZHNSZW1vdmVkIHsgMCB9OworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9u
IHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24geyAwIH07
CisgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAgfTsKKyAgICB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHsgMCB9OworICAgIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8geyAwIH07Cit9OworICAgIAogc3RydWN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7CiAKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+IHsKQEAgLTY0LDggKzc1LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KT4mJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRXcml0ZVBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYW5kZmF0aGVyRXhpc3RpbmdX
ZWJzaXRlRGF0YUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBoYW5kbGVyKTsKIAogICAgIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZl
Q29va2llUGFydGl0aW9uRnJlZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKQEAgLTc3LDYg
KzkwLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIYWRSZWNlbnRV
c2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9S
ZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVk
RGF0YVJlY29yZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlu
cyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUZyZXNoU3RhcnRXaXRoRW1wdHlP
ck5vU3RvcmUoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNU
b0dyYW5kZmF0aGVyKTsKQEAgLTk1LDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBi
b29sIGNsZWFyRmlyc3QpPiBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxl
cjsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV93cml0ZVBlcnNpc3RlbnRTdG9yZUhhbmRs
ZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNp
dGVEYXRhSGFuZGxlcjsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9maXJlVGVsZW1ldHJ5
SGFuZGxlcjsKIAogICAgIGRvdWJsZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgeyAw
IH07CiAgICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHsgMCB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAko
cmV2aXNpb24gMjE4NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2lu
Z0tleXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNSArNzY3LDEwIEBAIFN0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OmJhY2tncm91bmQKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJv
dmVyNzAiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSIpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgJKHJldmlzaW9uIDIxODc1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtZW1vcnlVc2FnZVRvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXkodWludDY0X3QgbWVtb3J5VXNhZ2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBTdHJpbmcgZm9yZWdyb3VuZENQVVVzYWdlVG9EaWFnbm9zdGljTG9nZ2luZ0tleShkb3Vi
bGUgY3B1VXNhZ2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgYmFja2dyb3Vu
ZENQVVVzYWdlVG9EaWFnbm9zdGljTG9nZ2luZ0tleShkb3VibGUgY3B1VXNhZ2UpOworICAgIAor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjE4NzU3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTctMDYtMjMgIEpvaG4gV2lsYW5kZXIgIDx3aWxh
bmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQg
dGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgICAgIEFk
ZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAg
ICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAgICAgICAoV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxl
bWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hl
ZCk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICAgICBUZXN0
IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgICAgICBD
b25maWd1cmVzIGEgdGltZXIgZm9yIHRlbGVtZXRyeSBjYXB0dXJlLiBGaXJlcyA1IHNlY29uZHMg
YWZ0ZXIgbGF1bmNoCisgICAgICAgICAgICBhbmQgdGhlbiBldmVyeSAyNCBob3Vycy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFt
ZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVE
YXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+
IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRP
YnNlcnZlcik6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKToKKyAgICAgICAg
ICAgICBDYWxscyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVB
bmRTdWJtaXQoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6bnVtYmVyT2ZSZXNvdXJjZXNX
aXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6bWVkaWFuKToKKyAgICAgICAg
KFdlYktpdDo6bm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6c3Vi
bWl0VG9wTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OnN1Ym1pdFRvcExpc3RzKToKKyAgICAgICAg
KFdlYktpdDo6bm90aWZ5UGFnZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTA2LTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIFN1cHBvcnQgLVtXZWJBVlBsYXllckNvbnRyb2xs
ZXIgc2V0TXV0ZWQ6XQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIx
ODc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNiArMTA5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiAgICAgVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNw
cAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAKIApJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm1NYWMuY21ha2UJKHJldmlzaW9uIDIxODc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtTWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDcgQEAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYkNvbnRleHRNZW51TGlzdGVu
ZXJQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
KyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIAog
ICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQkocmV2aXNpb24gMjE4NzQ4KQorKysgU291cmNlL1dl
YktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBA
QCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lv
blN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAKIAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24g
MjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
Om5vdGlmeVBhZ2VTdGF0aXN0aQogICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoIldlYnNpdGVEYXRhU2NhbkZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zRmluaXNoZWQiLCBudWxscHRyKTsKIH0KICAgICAKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpu
b3RpZnlQYWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6T2JqZWN0KiBtZXNzYWdl
Qm9keSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpCisgICAgICAg
IHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIiwgbWVzc2FnZUJvZHkpOworfQorICAgIAogUmVmPFdl
YlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBh
Z2VDbGllbnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9u
KQogewogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlEKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTg3NDgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVsZXRl
V2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVu
dERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFZlY3RvcjxTdHJpbmc+JiYg
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXMsIEZ1
bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBz
dGF0aWMgdm9pZCB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJpdGVEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBzaG91bGROb3RpZnlQYWdl
LCBGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7
CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nl
c3NlZCgpOworICAgIHN0YXRpYyB2b2lkIG5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5Rmlu
aXNoZWQoQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KTsKIAogICAgIHZvaWQgZW5hYmxlU3VkZGVu
VGVybWluYXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQsMTEgKzEyNCwyMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpmCiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWRPYnNlcnZlcigpLmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih7aG9z
dE5hbWV9LCB7IH0sIGZhbHNlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9
CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKHZhbHVlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkK
K3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwodmFsdWUpOwpAQCAtMTUxLDYgKzE2MSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnIKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5zZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFs
KDYwKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoMzYwMCk7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGZhbHNl
KTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChmYWxzZSk7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCh0cnVlKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5jbGVhckluTWVtb3J5U3RvcmUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
KCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9y
T25lRG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHN0YXRp
YyB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbChib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudFN0b3JlKCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAkocmV2aXNpb24gMjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTQ3LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7Ci1zdGF0aWMgYXV0byBub3RpZnlQYWdlcyA9IGZh
bHNlOworc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9
IGZhbHNlOwogc3RhdGljIGF1dG8gc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCkBAIC01OSw3ICs2MCwxMSBAQCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291CiAgICAgOiBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQogICAg
ICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKICAgICAsIG1fc3RhdGlzdGljc1N0
b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCisgICAgLCBtX3RlbGVt
ZXRyeU9uZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCisgICAgLCBtX3RlbGVtZXRyeVJl
cGVhdGVkVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQogeworICAgIG1fdGVsZW1ldHJ5T25lU2hv
dFRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAgIG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lci5z
dGFydFJlcGVhdGluZygyNF9oKTsKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKQEAgLTY4LDcgKzczLDcgQEAgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogCiB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIGFsd2F5cykKIHsKLSAgICBub3RpZnlQYWdlcyA9IGFsd2F5czsKKyAgICBub3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gYWx3YXlzOwogfQogCiB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKQEAgLTExOSw3ICsxMjQsNyBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtCiAKICAgICAvLyBTd2l0Y2gg
dG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUK
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9
IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpLCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFi
bGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBl
c1RvUmVtb3ZlLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlmeVBhZ2Vz
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZlY3RvcjxT
dHJpbmc+IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAg
V2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92ZSwgV1RG
TW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldKFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIC8vIEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyks
IHRvcERvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9t
YWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERh
dGFSZWNvcmRzKHRvcERvbWFpbnMpOwpAQCAtMTQwLDcgKzE0NSw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm8KICAgICAgICAgfQogICAgICAgICByZW1vdmVEYXRh
UmVjb3JkcygpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vdGlmeVBhZ2VzKSB7CisgICAgICAg
IGlmIChub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKSB7CiAgICAgICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW10gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2VkKCk7CiAgICAgICAgICAgICB9KTsKQEAgLTE5Myw2ICsxOTgsMTEgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZwogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKICAgICAgICAgZ3JhbmRmYXRo
ZXJFeGlzdGluZ1dlYnNpdGVEYXRhKCk7CiAgICAgfSk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUtPnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgLy8gVGhpcyBjYW5jZWxzIHRoZSBvbmUg
c2hvdCB0aW1lciBhbmQgaXMgb25seSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICAgICAgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3RvcCgpOworICAgICAgICBtX3RlbGVtZXRy
eU9uZVNob3RUaW1lci5zdGFydE9uZVNob3QoMTAwX21zKTsKKyAgICB9KTsKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVnaXN0ZXJV
c2VyRGVmYXVsdHNJZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yMTUsNyArMjI1LDcgQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYQogICAgIAogICAgIC8vIFN3aXRjaCB0
byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQog
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBu
b3RpZnlQYWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vi
c2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVs
eUNvbnRyb2xsZWREb21haW5zV2l0aFdlYml0ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIG5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8v
IEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhl
IHdvcmtlciBxdWV1ZQogICAgICAgICAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdG9wRG9tYWlucyA9IENyb3Nz
VGhyZWFkQ29waWVyPEhhc2hTZXQ8U3RyaW5nPj46OmNvcHkodG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5jb3JlU3RvcmUoKS5oYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0
b3JlKFdURk1vdmUodG9wRG9tYWlucykpOwpAQCAtMzI5LDUgKzMzOSwxNCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8S2V5ZWREZWNvZGVyPiBXZWJSZXNvdXJjCiAKICAgICByZXR1cm4gS2V5ZWREZWNvZGVy
OjpkZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEo
KSksIHJhd0RhdGEtPnNpemUoKSk7CiB9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGNvcmVTdG9yZSgpLnN0YXRpc3RpY3NMb2NrKCkpOworICAgICAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29yZVN0b3JlKCkpOworICAg
IH0pOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJ
KHJldmlzaW9uIDIxODc0OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAK
ICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFSZWNv
cmQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC05NSw2ICs5Nyw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB3cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVk
RGVjb2Rlcj4gY3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0
OwogICAgIHZvaWQgcGxhdGZvcm1FeGNsdWRlRnJvbUJhY2t1cCgpIGNvbnN0OworICAgIAorICAg
IHZvaWQgdGVsZW1ldHJ5VGltZXJGaXJlZCgpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAjaWYg
SEFWRShDT1JFX1BSRURJQ1RJT04pCkBAIC0xMDUsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBS
ZWY8V1RGOjpXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0YXRp
c3RpY3NTdG9yYWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gbV90ZWxlbWV0cnlPbmVTaG90VGltZXI7CisgICAgUnVuTG9vcDo6VGltZXI8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeVJlcGVhdGVkVGltZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NQ
b29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
aWFnbm9zdGljTG9nZ2luZ0tleXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgCitzdGF0aWMgYXV0
byBub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGZhbHNlOworICAgIAorc3Rh
dGljIHVuc2lnbmVkIG51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiByZXNvdXJjZXMsIHNpemVfdCBiZWdp
biwgc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAocmVzb3VyY2VzLmlzRW1wdHkoKSB8fCByZXNvdXJj
ZXMuc2l6ZSgpIDwgYmVnaW4gKyAxIHx8IHJlc291cmNlcy5zaXplKCkgPCBlbmQgKyAxKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmIChyZXNvdXJjZXNb
aV0uaGFzSGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCitzdGF0aWMgdW5zaWduZWQgbWVkaWFu
KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHYpCit7CisgICAgaWYgKHYuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAodi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZb
MF07CisgICAgCisgICAgYXV0byBzaXplID0gdi5zaXplKCk7CisgICAgYXV0byBtaWRkbGUgPSBz
aXplIC8gMjsKKyAgICBpZiAoc2l6ZSAlIDIpCisgICAgICAgIHJldHVybiB2W21pZGRsZV07Cisg
ICAgcmV0dXJuICh2W21pZGRsZSAtIDFdICsgdlttaWRkbGVdKSAvIDI7Cit9CisgICAgCitzdGF0
aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eT4mIHYsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQsIGNvbnN0IFdURjo6RnVuY3Rpb248
dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+JiBz
dGF0aXN0aWNHZXR0ZXIpCit7CisgICAgaWYgKHYuaXNFbXB0eSgpIHx8IHYuc2l6ZSgpIDwgYmVn
aW4gKyAxIHx8IHYuc2l6ZSgpIDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBwYXJ0OworICAgIHBhcnQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShlbmQgLSBiZWdpbiArIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDw9IGVu
ZDsgKytpKQorICAgICAgICBwYXJ0LmFwcGVuZChzdGF0aXN0aWNHZXR0ZXIodltpXSkpOworICAg
IAorICAgIHJldHVybiBtZWRpYW4ocGFydCk7Cit9CisgICAgCitzdGF0aWMgV2ViUGFnZVByb3h5
KiBub25FcGhlbWVyYWxXZWJQYWdlUHJveHkoKQoreworICAgIGF1dG8gcHJvY2Vzc1Bvb2xzID0g
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOworICAgIGlmIChwcm9jZXNzUG9vbHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHByb2Nl
c3NQb29sID0gcHJvY2Vzc1Bvb2xzWzBdOworICAgIGlmICghcHJvY2Vzc1Bvb2wpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGZvciAoYXV0byYgd2ViUHJvY2VzcyA6IHByb2Nl
c3NQb29sLT5wcm9jZXNzZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiB3ZWJQcm9j
ZXNzLT5wYWdlcygpKSB7CisgICAgICAgICAgICBpZiAocGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhl
bWVyYWwoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBw
YWdlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorICAgIAorc3Rh
dGljIHZvaWQgc3VibWl0VG9wTGlzdCh1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVU
b3AsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZh
bGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHJveHkpCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
dCkgeworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAg
IH07CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRl
ciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICBy
ZXR1cm4gdC5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgV1RG
OjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVs
ZW1ldHJ5KT4gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0dldHRlciA9IFtdIChjb25zdCBQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH07CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25l
ZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gbnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5udW1iZXJPZlRpbWVzRGF0YVJlY29y
ZHNSZW1vdmVkOworICAgIH07CisgICAgCisgICAgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IG51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRo
ZVRvcCAtIDEpOworICAgIHVuc2lnbmVkIHRvcFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMg
PSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwg
MCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcE51bWJlck9m
VGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0g
MSwgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlcik7CisgICAgCisgICAgU3Ry
aW5nQnVpbGRlciBwcmVhbWJsZUJ1aWxkZXI7CisgICAgcHJlYW1ibGVCdWlsZGVyLmFwcGVuZExp
dGVyYWwoInRvcCIpOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmROdW1iZXIobnVtYmVyT2ZS
ZXNvdXJjZXNGcm9tVGhlVG9wKTsKKyAgICBTdHJpbmcgZGVzY3JpcHRpb25QcmVhbWJsZSA9IHBy
ZWFtYmxlQnVpbGRlci50b1N0cmluZygpOworICAgIAorICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0
ZXJhbCgiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpLAorICAgICAgICB0
b3BQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAwLCBTaG91bGRTYW1wbGU6
Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCks
IGRlc2NyaXB0aW9uUHJlYW1ibGUgKyBBU0NJSUxpdGVyYWwoIlN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMiKSwKKyAgICAgICAgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwg
U2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiksCisgICAgICAgIHRvcFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMsIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFT
Q0lJTGl0ZXJhbCgiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpLAorICAgICAgICB0b3BT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3
ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9u
UHJlYW1ibGUgKyBBU0NJSUxpdGVyYWwoIk51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQi
KSwKKyAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwgU2hvdWxk
U2FtcGxlOjpObyk7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0cyhjb25zdCBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFn
ZVByb3h5KQoreworICAgIHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
LCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdl
UHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BM
aXN0KDMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMCkK
KyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFByZXZhbGVudFJl
c291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwg
d2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1
Ym1pdFRvcExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAg
ICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXpl
KCkgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwMCwgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBm
b3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKGNvbnN0IFZlY3Rv
cjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywg
Y29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7CisgICAgV1RGOjpGdW5jdGlv
bjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4g
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAgYXV0byB0b3AzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsK
KyAgICAKKyAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWVzc2FnZUJvZHk7CisgICAgbWVz
c2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSwgQVBJ
OjpVSW50NjQ6OmNyZWF0ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKSk7CisgICAg
bWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uIiksIEFQSTo6VUludDY0OjpjcmVhdGUodG90YWxOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pKTsKKyAgICBtZXNzYWdlQm9keS5zZXQo
QVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpLCBBUEk6OlVJ
bnQ2NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7CisgICAgCisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFttZXNzYWdlQm9keSA9IFdURk1vdmUobWVzc2Fn
ZUJvZHkpXSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NU
ZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRy
KCkpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgCisgICAgYXV0byBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMgPSByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnko
KTsKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSA8IG1pbmltdW1QcmV2
YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcHJldmFsZW50UmVzb3Vy
Y2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIHByZXZhbGVudFJlc291cmNlc0RheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3Vy
Y2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKHByZXZhbGVudFJl
c291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291
cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVz
b3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNr
ZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBhdXRvIHdlYlBh
Z2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgIGlmICghd2ViUGFnZVBy
b3h5KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3RhbE51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzIiksIHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCksIDAsIFNob3Vs
ZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uLnNpemUoKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgaWYgKHByZXZh
bGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAwKQorICAgICAg
ICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxp
dGVyYWwoInRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiIpLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25bMF0sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNE
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMSkKKyAgICAgICAgd2ViUGFnZVByb3h5
LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJtZWRpYW5Q
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uIiksIG1lZGlhbihwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24p
LCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAKKyAgICBzdWJtaXRUb3BMaXN0cyhzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sICp3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChub3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCkKKyAgICAgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpKTsKK30K
KyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCBhbHdheXMpCit7CisgICAgbm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBhbHdheXM7Cit9CisgICAgCit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KyAgICAKK25hbWVzcGFjZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKKyAg
ICAKK3ZvaWQgY2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSYpOwordm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sKTsKKyAgICAKK307CisgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw2ICsxMTYsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyRmlyZQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4odG9XVEZTdHJpbmcoaG9zdE5h
bWUpLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZp
cmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKwogdm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKQEAgLTEyNiw2ICsx
MzEsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0UwogICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVk
KGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNl
dE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKwogdm9pZCBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSgpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuaAkocmV2aXNpb24gMjE4NzQ4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksOCArNDksMTAgQEAgZXh0ZXJuICJDIiB7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAg
IFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9y
T25lRG9tYWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBXS19FWFBP
UlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
U2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKTsKICAg
ICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSk7Cisg
ICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIFdLX0VYUE9S
VCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudFN0b3JlKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91
cnModW5zaWduZWQpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTg3NDgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTExODgsNiArMTE4OCw4IEBACiAJCTY1MDFCRDFBMTJGMTI0MzQwMEU5
RjI0OCAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuY3BwICovOyB9OwogCQk2NTlDNTUxRTEzMDAwNjQxMDAyNUMwQzIgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDZBODI5MTMwMDAxNjQwMDBDRUIxQyAvKiBJbmpl
Y3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwICovOyB9OwogCQk2NUI4NkYxRTEy
RjExREUzMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBX
S0J1bmRsZUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5oICovOyB9OworCQk2QjgyMURERDFFRUYwNUREMDBEN0FGNEEgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi87IH07CiAJCTZCQkJBRDM4
MUVDM0U1NzgwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJCQkFE
MzcxRUMzRTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29j
b2EubW0gKi87IH07CiAJCTZCRTk2OTlDMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTZCRTk2OTlFMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcCAqLzsgfTsKQEAgLTM0NzYsNiArMzQ3OCw4IEBACiAJCTY1NDZBODJBMTMw
MDAxNjQwMDBDRUIxQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3Vy
Y2VMb2FkQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE3MTJG
MTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3Bl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjgyMUREQTFFRUYwNUREMDBEN0FG
NEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
QkJCQUQzNzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
ODU3LDYgKzY4NjEsOCBAQAogCQkJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAogCQkJCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5
RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKIAkJCQk3QTlDRDhD
MjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3Nh
Z2VzLmluICovLAorCQkJCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8sCisJCQkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRB
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovLAogCQkJCTUxRDEy
NDI0MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmNwcCAqLywKIAkJCQk1
MUQxMjQyNTFFNkQzQ0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5oICovLAogCQkJ
CTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVUYXNrLmNwcCAqLywKQEAg
LTgyNDMsNiArODI0OSw3IEBACiAJCQkJMkRBQkE3NzYxQTgyQjQyMTAwRUYwRjFBIC8qIEFQSUhp
c3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjQ2MUJDODgyOTMwMEFCQTVD
MiAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzc1MTIzMTFERjBE
RUUyMDA4QTM1MUMgLyogQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzY5MDc5RTE4RjM0MEEyMDAx
REZGMDQgLyogQVBJSW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzNzY5MDc5QTE4RjMxQ0IyMDAxREZGMDQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTREMjA3MUE0Njc3NjEwMEM3RjE1MiAvKiBBUElM
ZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODczLDYgKzk4
ODAsNyBAQAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBEYXRhYmFzZVByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExNUM3MTQxOTBGODlF
NDAwRUNDNTE2IC8qIERhdGFiYXNlUHJvY2Vzc0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
RTM1MjAyMTgwRjVEMUUwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3NNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk2QjgyMURERDFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2MDE4MEUwMzFE
MDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2OTE4MEUwOUI4MDAzOUExNDkgLyogRGF0
YWJhc2VQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTg3NTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MyBAQAorMjAxNy0wNi0yMyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkcyB0aHJlZSBuZXcgdGVzdFJ1bm5lciBmdW5jdGlvbnM6Cisg
ICAgICAgIC0gaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjaygpCisgICAg
ICAgIC0gc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKKyAgICAgICAgLSBzZXRTdGF0
aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoKQorCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9Q
YWdlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZFJ1
blRlbGVtZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTctMDYtMjMgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2No
ZW1lVGFzayBmb3IgcmVkaXJlY3Rpb24KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM3LDYgKzgzNyw4IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRJZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsK
IAogICAgIG1fb3BlblBhbmVsRmlsZVVSTHMgPSBudWxscHRyOworICAgIAorICAgIHN0YXRpc3Rp
Y3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKICAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldl
YlZpZXctPnBhZ2UoKSwgYmxhbmtVUkwoKSk7CiAgICAgcnVuVW50aWwobV9kb25lUmVzZXR0aW5n
LCBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zaG9ydFRpbWVvdXQoKSk7CkBAIC0yMjcwLDYgKzIyNzIs
MTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91bAogICAgIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXJGb3JPbmVEb21haW4oaG9zdE5hbWUsIHZhbHVlKTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxl
cjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpAQCAt
MjI4MCw2ICsyMjg3LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NTaG91
bGQKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQorICAgIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25k
cyk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lv
biAyMTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2Myw4ICsxNjMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3RhdGlz
dGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0Zp
cmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0Zp
cmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihXS1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhh
bmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91
YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Niw2ICsxMDU2LDExIEBAIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpIHsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKQEAg
LTEwNjMsNiArMTA2OCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9u
OjpkCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKSW5k
ZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMTg3NDgpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgxLDYgKzI4MSwxNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2Fn
ZVRvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlG
aW5pc2hlZCIpKSB7CisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzID0gKHVuc2lnbmVkKVdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSkpKTsKKyAgICAgICAgdW5zaWduZWQgdG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIikpKSk7CisgICAg
ICAgIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gKHVuc2lnbmVk
KVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSkpKTsKKyAgICAgICAg
CisgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
KHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JN
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3Ii
KSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7CiAgICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNz
YWdlQm9keS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxODc0OCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHsKICAgICBEaWRSZW1vdmVTd2lwZVNuYXBz
aG90Q2FsbGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFj
a0lELAogICAgIFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFja0lELAorICAgIFN0
YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELAogICAgIERpZFJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFsc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENhbGxiYWNrSUQgPSAx
MDAKIH07CkBAIC0xMzgzLDYgKzEzODQsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
RGlkU2NhbkRhdGFSZQogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNj
YW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxT
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sK
KyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2Fs
bGJhY2tJRCwgY2FsbGJhY2spOworfQorICAgIAordm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMs
IHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5z
aWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCit7CisgICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworICAgIAor
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoInsgXCJ0b3RhbFByZXZhbGVudFJlc291cmNlc1wiIDogIik7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvblwiIDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgXCJ0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1wi
IDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG9wM1N1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIH0iKTsK
KyAgICAKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmco
Y29udGV4dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAKKyAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNr
KFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKK30KKyAg
ICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmlyZURhdGFNb2RpZmlj
YXRpb25IYW5kbGVyIikpOwpAQCAtMTQyMCw2ICsxNDQ1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0ZpcmVTaG91bGRQYXIKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSk7CisgICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZh
bHVlKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7CkBAIC0xNDM0LDYgKzE0NjUsMTQgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhcwogICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CiAg
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKIH0KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE4
NzQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0OCwxMSArMzQ4LDE0IEBAIHB1YmxpYzoKICAgICAvLyBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9k
aWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGlu
c3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxs
YmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
KEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZE1vZGlmeURhdGFS
ZWNvcmRzQ2FsbGJhY2soKTsKICAgICB2b2lkIHN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHND
YWxsYmFjaygpOworICAgIHZvaWQgc3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVu
c2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hh
bmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hh
bmRsZXJGb3JPbmVEb21haW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAg
IHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUp
OwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9z
dE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNjYsNiArMzY5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKGRv
dWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQg
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFs
dWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1Rp
bWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNp
b24gMjE4NzQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIGlu
dGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAg
ICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmpl
Y3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29y
ZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NE
aWRSdW5UZWxlbWV0cnlDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1
ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcg
aG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihE
T01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjY2LDggKzI2NywxMCBAQCBp
bnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmlj
YXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNv
b2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNv
b2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1
ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xl
YW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFsdWUpOworICAgIHZvaWQgc2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2xlYW4gdmFsdWUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVy
aW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4NzU3KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTct
MDYtMjMgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVz
b3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1l
dHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAg
ICAgICAgIEVuYWJsZWQgaGVyZSBzaW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGlzIFdLMi1v
bmx5LgorCiAyMDE3LTA2LTIzICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVc2Ugd2luZG93LmludGVybmFscyBpbnN0ZWFkIG9mIG92ZXJyaWRlUHJlZmVyZW5j
ZSB0byBzZXQgV2ViQ29yZSBzZXR0aW5ncyBpbiB0ZXN0cwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRp
b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21h
aW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFRlbGVtZXRyeSBHZW5lcmF0aW9u
CittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUg
LSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExv
YWRGb3JGcmFtZQorVGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMg
aXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIEhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4KK1BBU1MgdGVz
dFJlc3VsdC50b3RhbFByZXZhbGVudFJlc291cmNlcyBpcyA0CitQQVNTIHRlc3RSZXN1bHQudG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIGlzIDEKK1BBU1MgdGVzdFJl
c3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyBpcyA0CitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVy
YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJz
ZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdCBmb3IgVGVsZW1ldHJ5IEdlbmVyYXRpb248L3Rp
dGxlPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3Rz
IHRoYXQgdGVsZW1ldHJ5IGZvciBwcmV2YWxlbnQgcmVzb3VyY2VzIGlzIGNhbGN1bGF0ZWQgY29y
cmVjdGx5LiIpOworCisgICAgY29uc3QgdG9wRnJhbWVVcmwxID0gImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BGcmFtZVVybDIgPSAiaHR0cDovLzEyNy4wLjAuMjo4
MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZyYW1lVXJsMyA9ICJodHRwOi8vMTI3LjAuMC4zOjgw
MDAvdGVtcCI7CisgICAgY29uc3QgdG9wRnJhbWVVcmw0ID0gImh0dHA6Ly8xMjcuMC4wLjQ6ODAw
MC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDEgPSAiaHR0cDovLzEyNy4w
LjEuMTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMiA9ICJodHRw
Oi8vMTI3LjAuMS4yOjgwMDAvdGVtcCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwz
ID0gImh0dHA6Ly8xMjcuMC4xLjM6ODAwMC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNv
dXJjZVVybDQgPSAiaHR0cDovLzEyNy4wLjEuNDo4MDAwL3RlbXAiOworCisgICAgZnVuY3Rpb24g
Y2hlY2tDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICBpZiAoIXRlc3RSdW5u
ZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwxKSkg
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQg
YXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UocHJldmFsZW50UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9z
dCAyIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAg
ICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIu
aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwzKSkgewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
cHJldmFsZW50UmVzb3VyY2VVcmw0KSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCA0
IGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuIik7CisgICAg
ICAgICAgICBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybCkgeworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4o
cHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJj
ZVVybCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVy
bDMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZh
bGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmws
IHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwzKTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQpOworCisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxl
bnRSZXNvdXJjZVVybDEsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVy
bDEsIHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybDEsIHRvcEZyYW1l
VXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybDEsIHRvcEZyYW1lVXJsNCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0VXBTdGF0aXN0aWNzQW5kQ29udGludWUoKSB7CisgICAgICAg
IG1ha2VVcmxQcmV2YWxlbnQocHJldmFsZW50UmVzb3VyY2VVcmwxKTsKKyAgICAgICAgbWFrZVVy
bFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDIpOworICAgICAgICBtYWtlVXJsUHJldmFs
ZW50KHByZXZhbGVudFJlc291cmNlVXJsMyk7CisgICAgICAgIG1ha2VVcmxQcmV2YWxlbnQocHJl
dmFsZW50UmVzb3VyY2VVcmw0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24ocHJldmFsZW50UmVzb3VyY2VVcmw0LCB0cnVlKTsKKworICAg
ICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJh
Y2soY2hlY2tDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
dGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcnVuVGVsZW1ldHJ5QW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc3Rh
dGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1
bHQ7CisgICAgZnVuY3Rpb24gY2hlY2tUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RS
ZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzIiwgIjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEiKTsKKyAgICAgICAgc2hv
dWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiNCIp
OworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIHRlc3RSdW5u
ZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhjaGVja1RlbGVtZXRy
eSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHRydWUpOworICAgICAgICBzZXRV
cFN0YXRpc3RpY3NBbmRDb250aW51ZSgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTg3NDgpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzA1LDYg
KzcwNSw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWMKIGh0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsYXNzaWZ5LWFzLXByZXZhbGVu
dC1iYXNlZC1vbi1zdWJyZXNvdXJjZS11bmlxdWUtcmVkaXJlY3RzLXRvLmh0bWwgWyBQYXNzIF0K
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWluLW1lbW9y
eS1hbmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTcyNDUy
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0aGVyaW5n
Lmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sIFsgUGFzcyBdCiAKICMj
IyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4
cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313746</attachid>
            <date>2017-06-23 14:16:39 -0700</date>
            <delta_ts>2017-06-23 16:46:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170623142047.patch</filename>
            <type>text/plain</type>
            <size>71032</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTIzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXSzJdIFN1cHBvcnQgLVtXZWJBVlBsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6XQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZp
c2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3Jl
LT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9i
c2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBwcmlt
YXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIx
ODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25D
b29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICBy
ZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2ICszNzMsMzggQEAg
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHBy
ZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRl
ZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8PSAwID8gMCA6Cisg
ICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAgICAgICAgICAgc29y
dGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgICAg
ICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJl
dmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4gVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PigpOworICAgIAorICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVn
aW4oKSwgc29ydGVkLmVuZCgpLCBbXShjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
YSwgY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGIpIHsKKyAgICAgICAgcmV0dXJu
IGEuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA+CisgICAgICAgIGIu
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9KTsKKyAgICAK
KyAgICByZXR1cm4gc29ydGVkOworfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5zKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24g
MjE4NzYyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxNyBAQCBjbGFzcyBLZXllZERlY29k
ZXI7CiBjbGFzcyBLZXllZEVuY29kZXI7CiBjbGFzcyBVUkw7CiAKK3N0YXRpYyBjb25zdCBhdXRv
IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworICAgIAorc3RydWN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlRpbWVz
RGF0YVJlY29yZHNSZW1vdmVkIHsgMCB9OworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9u
IHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24geyAwIH07
CisgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAgfTsKKyAgICB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHsgMCB9OworICAgIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8geyAwIH07Cit9OworICAgIAogc3RydWN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7CiAKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+IHsKQEAgLTY0LDggKzc1LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KT4mJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRXcml0ZVBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYW5kZmF0aGVyRXhpc3RpbmdX
ZWJzaXRlRGF0YUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBoYW5kbGVyKTsKIAogICAgIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZl
Q29va2llUGFydGl0aW9uRnJlZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKQEAgLTc3LDYg
KzkwLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIYWRSZWNlbnRV
c2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9S
ZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVk
RGF0YVJlY29yZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlu
cyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUZyZXNoU3RhcnRXaXRoRW1wdHlP
ck5vU3RvcmUoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNU
b0dyYW5kZmF0aGVyKTsKQEAgLTk1LDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBi
b29sIGNsZWFyRmlyc3QpPiBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxl
cjsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV93cml0ZVBlcnNpc3RlbnRTdG9yZUhhbmRs
ZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNp
dGVEYXRhSGFuZGxlcjsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9maXJlVGVsZW1ldHJ5
SGFuZGxlcjsKIAogICAgIGRvdWJsZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgeyAw
IH07CiAgICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHsgMCB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAko
cmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2lu
Z0tleXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNSArNzY3LDEwIEBAIFN0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OmJhY2tncm91bmQKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJv
dmVyNzAiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSIpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtZW1vcnlVc2FnZVRvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXkodWludDY0X3QgbWVtb3J5VXNhZ2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBTdHJpbmcgZm9yZWdyb3VuZENQVVVzYWdlVG9EaWFnbm9zdGljTG9nZ2luZ0tleShkb3Vi
bGUgY3B1VXNhZ2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgYmFja2dyb3Vu
ZENQVVVzYWdlVG9EaWFnbm9zdGljTG9nZ2luZ0tleShkb3VibGUgY3B1VXNhZ2UpOworICAgIAor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTctMDYtMjMgIEpvaG4gV2lsYW5kZXIgIDx3aWxh
bmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQg
dGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgICAgIEFk
ZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAg
ICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAgICAgICAoV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxl
bWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hl
ZCk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICAgICBUZXN0
IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgICAgICBD
b25maWd1cmVzIGEgdGltZXIgZm9yIHRlbGVtZXRyeSBjYXB0dXJlLiBGaXJlcyA1IHNlY29uZHMg
YWZ0ZXIgbGF1bmNoCisgICAgICAgICAgICBhbmQgdGhlbiBldmVyeSAyNCBob3Vycy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFt
ZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVE
YXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+
IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkcyk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRP
YnNlcnZlcik6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKToKKyAgICAgICAg
ICAgICBDYWxscyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVB
bmRTdWJtaXQoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6bnVtYmVyT2ZSZXNvdXJjZXNX
aXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6bWVkaWFuKToKKyAgICAgICAg
KFdlYktpdDo6bm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6c3Vi
bWl0VG9wTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OnN1Ym1pdFRvcExpc3RzKToKKyAgICAgICAg
KFdlYktpdDo6bm90aWZ5UGFnZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTA2LTIzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHpl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgdjM6IFJFR1JFU1NJT04gKHIyMTg0MTkpOiAzIE5TTXV0
YWJsZURpY3Rpb25hcnkgbGVha3MgY2FsbGluZyAtW1dLUHJvY2Vzc1Bvb2wgX3BsdWdpbkxvYWRD
bGllbnRQb2xpY2llc10KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAy
MTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5j
cHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0TWVudUxpc3Rl
bmVyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAK
ICAgICBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Np
b25TdGF0ZUNvZGluZ05vbmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9u
IDIxODc2MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
Ojpub3RpZnlQYWdlU3RhdGlzdGkKICAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKCJXZWJzaXRlRGF0YVNjYW5Gb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWluc0ZpbmlzaGVkIiwgbnVsbHB0cik7CiB9CiAgICAgCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6
bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2Fn
ZUJvZHkpCit7CisgICAgZm9yIChhdXRvJiBwYWdlIDogZ2xvYmFsUGFnZU1hcCgpKQorICAgICAg
ICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCIsIG1lc3NhZ2VCb2R5KTsKK30KKyAgICAKIFJlZjxX
ZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBw
YWdlQ2xpZW50LCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJiBwYWdlQ29uZmlndXJhdGlv
bikKIHsKICAgICB1aW50NjRfdCBwYWdlSUQgPSBnZW5lcmF0ZVBhZ2VJRCgpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjE4NzYy
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3Rl
bnREYXRhU3RvcmVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBWZWN0b3I8U3RyaW5nPiYm
IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zLCBib29sIHNob3VsZE5vdGlmeVBhZ2VzLCBG
dW5jdGlvbjx2b2lkKFZlY3RvcjxTdHJpbmc+KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAg
c3RhdGljIHZvaWQgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBh
Z2UsIEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2VkKCk7CisgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlG
aW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCiAgICAgdm9pZCBlbmFibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwogICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMSArMTI0LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OmYKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHto
b3N0TmFtZX0sIHsgfSwgZmFsc2UpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsK
K30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodmFsdWUpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVl
KQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKyAgICAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCh2YWx1ZSk7CkBAIC0xNTEsNiArMTYxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6cgogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWRPYnNlcnZlcigpLnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoNjApOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZl
cigpLnNldEdyYW5kZmF0aGVyaW5nVGltZSgzNjAwKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZmFs
c2UpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGZhbHNlKTsKICAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsKHRydWUpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLmNsZWFySW5NZW1vcnlTdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmgJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3Rh
dGljIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lk
IHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAg
IHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmUoKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpAQCAtNDcsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0
ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZTsKLXN0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzID0g
ZmFsc2U7CitzdGF0aWMgYXV0byBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
ID0gZmFsc2U7CiBzdGF0aWMgYXV0byBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCA9IHRydWU7CiAKIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKQEAgLTU5LDcgKzYwLDExIEBAIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3UKICAgICA6IG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAg
ICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdGF0aXN0aWNz
U3RvcmFnZVBhdGgocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKKyAgICAsIG1fdGVs
ZW1ldHJ5T25lU2hvdFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkKKyAgICAsIG1fdGVsZW1ldHJ5
UmVwZWF0ZWRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiB7CisgICAgbV90ZWxlbWV0cnlPbmVT
aG90VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7CisgICAgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVy
LnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6On5XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQpAQCAtNjgsNyArNzMsNyBAQCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiAKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wgYWx3YXlzKQogewotICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOworICAgIG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBhbHdheXM7CiB9CiAKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQpAQCAtMTE5LDcgKzEyNCw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAgIC8vIFN3aXRj
aCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9y
ZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5z
ID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KHByZXZhbGVudFJlc291
cmNlRG9tYWlucyksIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5
cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgbm90aWZ5UGFn
ZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oVmVjdG9y
PFN0cmluZz4gZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAg
ICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBX
VEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKV0oVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFi
bGUgewogICAgICAgICAgICAgLy8gQnV0IGFsd2F5cyB0b3VjaCB0aGUgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyBzdG9yZSBvbiB0aGUgd29ya2VyIHF1ZXVlLgogICAgICAgICAgICAgbV9zdGF0aXN0
aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KSwgdG9wRG9tYWlucyA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShk
b21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmNvcmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVk
RGF0YVJlY29yZHModG9wRG9tYWlucyk7CkBAIC0xNDAsNyArMTQ1LDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURh
dGFSZWNvcmRzKCk7CiAgICAgICAgIAotICAgICAgICBpZiAobm90aWZ5UGFnZXMpIHsKKyAgICAg
ICAgaWYgKG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQ
cm9jZXNzZWQoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTkzLDYgKzE5OCwxMSBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUtPnNldEdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgewogICAgICAgICBncmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoKTsKICAgICB9KTsKKyAgICBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS0+c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAgICAvLyBUaGlzIGNhbmNlbHMgdGhlIG9u
ZSBzaG90IHRpbWVyIGFuZCBpcyBvbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgor
ICAgICAgICBtX3RlbGVtZXRyeU9uZVNob3RUaW1lci5zdG9wKCk7CisgICAgICAgIG1fdGVsZW1l
dHJ5T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMpOworICAgIH0pOwogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMjUsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhCiAgICAgCiAgICAgLy8gU3dpdGNo
IHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3Jl
CiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3Zl
LCBub3RpZnlQYWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBu
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICAvLyBCdXQgYWx3YXlzIHRvdWNoIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHN0b3JlIG9u
IHRoZSB3b3JrZXIgcXVldWUKICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBD
cm9zc1RocmVhZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpjb3B5KHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+Y29yZVN0b3JlKCkuaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0eU9y
Tm9TdG9yZShXVEZNb3ZlKHRvcERvbWFpbnMpKTsKQEAgLTMyOSw1ICszMzksMTQgQEAgc3RkOjp1
bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwogCiAgICAgcmV0dXJuIEtleWVkRGVj
b2Rlcjo6ZGVjb2RlcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyYXdEYXRhLT5k
YXRhKCkpLCByYXdEYXRhLT5zaXplKCkpOwogfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhjb3JlU3RvcmUoKS5zdGF0aXN0aWNzTG9jaygpKTsKKyAgICAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KGNvcmVTdG9yZSgpKTsK
KyAgICB9KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEw
IEBACiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRh
UmVjb3JkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtOTUsNiArOTcsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgd3JpdGVFbmNvZGVyVG9EaXNrKFdlYkNvcmU6OktleWVkRW5jb2RlciYsIGNv
bnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpL
ZXllZERlY29kZXI+IGNyZWF0ZURlY29kZXJGcm9tRGlzayhjb25zdCBTdHJpbmcmIGxhYmVsKSBj
b25zdDsKICAgICB2b2lkIHBsYXRmb3JtRXhjbHVkZUZyb21CYWNrdXAoKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIHRlbGVtZXRyeVRpbWVyRmlyZWQoKTsKIAogICAgIFJlZjxXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwog
I2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQpAQCAtMTA1LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAg
ICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKICAgICBTdHJpbmcgbV9z
dGF0aXN0aWNzU3RvcmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkIHsgZmFsc2UgfTsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyOworICAgIFJ1bkxvb3A6OlRpbWVy
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnkuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCisKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUG9vbC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorc3RhdGlj
IGF1dG8gbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBmYWxzZTsKKyAgICAK
K3N0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oY29u
c3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3VyY2VzLCBzaXplX3Qg
YmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0VtcHR5KCkgfHwgcmVz
b3VyY2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgZW5kICsgMSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBpZiAocmVzb3Vy
Y2VzW2ldLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgICsrcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1l
ZGlhbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2KQoreworICAgIGlmICh2LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHYuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVy
biB2WzBdOworICAgIAorICAgIGF1dG8gc2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gbWlkZGxl
ID0gc2l6ZSAvIDI7CisgICAgaWYgKHNpemUgJSAyKQorICAgICAgICByZXR1cm4gdlttaWRkbGVd
OworICAgIHJldHVybiAodlttaWRkbGUgLSAxXSArIHZbbWlkZGxlXSkgLyAyOworfQorICAgIAor
c3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+JiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkp
PiYgc3RhdGlzdGljR2V0dGVyKQoreworICAgIGlmICh2LmlzRW1wdHkoKSB8fCB2LnNpemUoKSA8
IGJlZ2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFydDsKKyAgICBwYXJ0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZW5kIC0gYmVnaW4gKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8
PSBlbmQ7ICsraSkKKyAgICAgICAgcGFydC5hcHBlbmQoc3RhdGlzdGljR2V0dGVyKHZbaV0pKTsK
KyAgICAKKyAgICByZXR1cm4gbWVkaWFuKHBhcnQpOworfQorICAgIAorc3RhdGljIFdlYlBhZ2VQ
cm94eSogbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCkKK3sKKyAgICBhdXRvIHByb2Nlc3NQb29s
cyA9IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKKyAgICBpZiAocHJvY2Vzc1Bv
b2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sc1swXTsKKyAgICBpZiAoIXByb2Nlc3NQb29sKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHdlYlByb2Nlc3MgOiBw
cm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWdlIDogd2Vi
UHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPnNlc3Npb25JRCgpLmlz
RXBoZW1lcmFsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1
cm4gcGFnZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyAgICAK
K3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNGcm9t
VGhlVG9wLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBh
Z2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29u
c3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsK
KyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNH
ZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAg
ICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAg
IFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkm
IHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoY29u
c3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5z
aWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJl
ck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQubnVtYmVyT2ZUaW1lc0RhdGFS
ZWNvcmRzUmVtb3ZlZDsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zy
b21UaGVUb3AgLSAxKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1i
ZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRv
cCAtIDEsIG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIAorICAg
IFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVCdWlsZGVyOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJ0b3AiKTsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJl
ck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJlYW1ibGUg
PSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHkubG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyBBU0NJ
SUxpdGVyYWwoIlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSwKKyAgICAg
ICAgdG9wUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgMCwgU2hvdWxkU2Ft
cGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVl
KERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtl
eSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zIiksCisgICAgICAgIHRvcFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMs
IDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyIpLAorICAgICAgICB0b3BTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJv
eHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUg
KyBBU0NJSUxpdGVyYWwoIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKSwKKyAgICAgICAg
dG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgMCwgU2hvdWxkU2FtcGxlOjpObyk7Cisg
ICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlw
dGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1v
dmVkIiksCisgICAgICAgIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQsIDAsIFNo
b3VsZFNhbXBsZTo6Tm8pOworfQorICAgIAorc3RhdGljIHZvaWQgc3VibWl0VG9wTGlzdHMoY29u
c3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBXZWJQYWdlUHJveHkmIHdl
YlBhZ2VQcm94eSkKK3sKKyAgICBzdWJtaXRUb3BMaXN0KDEsIHNvcnRlZFByZXZhbGVudFJlc291
cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2Vi
UGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0
VG9wTGlzdCgzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYg
KHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwg
MTApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwLCBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgNTApCisgICAgICAgIHJldHVybjsKKyAg
ICBzdWJtaXRUb3BMaXN0KDUwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAg
CisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24u
c2l6ZSgpIDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgxMDAsIHNv
cnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKK30KKyAgICAKKy8vIFRoaXMgZnVuY3Rpb24g
aXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCit2b2lkIHN0YXRpYyBub3RpZnlQYWdlcyhjb25zdCBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvdGFsTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKQoreworICAgIFdURjo6RnVu
Y3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRy
eSk+IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIAorICAgIGF1dG8gdG9wM1N1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgMCwgMiwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRl
cik7CisgICAgCisgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2VCb2R5OworICAg
IG1lc3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzIiks
IEFQSTo6VUludDY0OjpjcmVhdGUoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSkpOwor
ICAgIG1lc3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbiIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsTnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKSk7CisgICAgbWVzc2FnZUJvZHku
c2V0KEFTQ0lJTGl0ZXJhbCgiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwgQVBJ
OjpVSW50NjQ6OmNyZWF0ZSh0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykpOworICAg
IAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbbWVzc2FnZUJvZHkgPSBXVEZNb3ZlKG1l
c3NhZ2VCb2R5KV0geworICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0
aWNzVGVsZW1ldHJ5RmluaXNoZWQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUobWVzc2FnZUJvZHkp
LnB0cigpKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKQoreworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOworICAgIAorICAgIGF1dG8gc29ydGVkUHJldmFsZW50UmVzb3VyY2VzID0g
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5KCk7CisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkgPCBtaW5pbXVt
UHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uOworICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKKyAgICBwcmV2YWxlbnRSZXNvdXJjZXNE
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJl
c291cmNlIDogc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSB7CisgICAgICAgIGlmIChwcmV2YWxl
bnRSZXNvdXJjZS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBwcmV2YWxlbnRS
ZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24udW5jaGVja2VkQXBwZW5kKHByZXZhbGVu
dFJlc291cmNlLmRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24udW5j
aGVja2VkQXBwZW5kKHByZXZhbGVudFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgYXV0byB3
ZWJQYWdlUHJveHkgPSBub25FcGhlbWVyYWxXZWJQYWdlUHJveHkoKTsKKyAgICBpZiAoIXdlYlBh
Z2VQcm94eSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlcyIpLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCAwLCBT
aG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uIiksIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbi5zaXplKCksIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIGlmIChw
cmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKKyAg
ICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVND
SUlMaXRlcmFsKCJ0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uWzBdLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBpZiAocHJldmFsZW50UmVzb3Vy
Y2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDEpCisgICAgICAgIHdlYlBhZ2VQ
cm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgibWVk
aWFuUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRl
cmFjdGlvbiIpLCBtZWRpYW4ocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgc3VibWl0VG9wTGlzdHMoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAqd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpCisgICAgICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZh
bGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbiwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSk7
Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gYWx3YXlzOworfQorICAgIAorfQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisgICAgCituYW1lc3BhY2UgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSB7
CisgICAgCit2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmKTsKK3ZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQoYm9vbCk7CisgICAgCit9OworICAgIAorfQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckZpcmUKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Zmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKHRvV1RGU3RyaW5nKGhv
c3ROYW1lKSwgdmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0xMjYs
NiArMTMxLDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFMKICAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisKIHZv
aWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUoKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDggKzQ5LDEwIEBAIGV4dGVybiAiQyIgewogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsK
ICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
ckZvck9uZURvbWFpbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlI
YW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSk7
CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
OworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICBXS19F
WFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5j
ZUhvdXJzKHVuc2lnbmVkKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4
NzYyKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk2NTAxQkQxQTEyRjEyNDM0
MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVu
ZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJNjU5QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIElu
amVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCAqLzsgfTsKIAkJNjVCODZG
MUUxMkYxMURFMzAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEg
LyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLzsgfTsKKwkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRB
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI4MjFEREIxRUVGMDVERDAwRDdBRjRB
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovOyB9OwogCQk2QkJC
QUQzODFFQzNFNTc4MDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJD
b2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZC
QkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckNvY29hLm1tICovOyB9OwogCQk2QkU5Njk5QzFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2QkU5Njk5RTFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAgKi87IH07CkBAIC0zNDc4LDYgKzM0ODAsOCBAQAogCQk2NTQ2QTgy
QTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJl
c291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYx
NzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNw
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREExRUVGMDVERDAw
RDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkJCQkFEMzcxRUMzRTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjg2MCw2ICs2ODY0LDggQEAKIAkJCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKIAkJCQk3QTlDRDhDMTFDNzc5ODQ5
MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E5
Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5t
ZXNzYWdlcy5pbiAqLywKKwkJCQk2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovLAorCQkJCTZCODIxRERCMUVFRjA1REQwMEQ3
QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLywKIAkJCQk1
MUQxMjQyNDFFNkQzQ0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5jcHAgKi8sCiAJ
CQkJNTFEMTI0MjUxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuaCAqLywK
IAkJCQk1MUU4QjY4RDFFNzEyODczMDAxQjcxMzIgLyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8s
CkBAIC04MjQ2LDYgKzgyNTIsNyBAQAogCQkJCTJEQUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBB
UElIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBB
QkE1QzIgLyogQVBJSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc3NTEyMzEx
REYwREVFMjAwOEEzNTFDIC8qIEFQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2OTA3OUUxOEYzNDBB
MjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc2OTA3OUExOEYzMUNCMjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZVVJ
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U0RDIwNzFBNDY3NzYxMDBDN0YxNTIgLyog
QVBJTGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Nyw2
ICs5ODg0LDcgQEAKIAkJCQk1MTVFNzcyQjE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMTVDNzE0MTkw
Rjg5RTQwMEVDQzUxNiAvKiBEYXRhYmFzZVByb2Nlc3NJT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1MUUzNTIwMjE4MEY1RDFFMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNzTWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjAxODBF
MDMxRDAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTdERDVCRTE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNz
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjkxODBFMDlCODAwMzlBMTQ5IC8q
IERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjE4NzYyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzMgQEAKKzIwMTctMDYtMjMgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhyZWUgbmV3IHRlc3RSdW5uZXIgZnVuY3Rpb25z
OgorICAgICAgICAtIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soKQor
ICAgICAgICAtIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCisgICAgICAgIC0gc2V0
U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKCkKKworICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2Fn
ZVRvUGFnZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NE
aWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTA2LTIzICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFNQSSB0byBXS1VS
TFNjaGVtZVRhc2sgZm9yIHJlZGlyZWN0aW9uCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjE4NzYyKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNyw2ICs4Mzcs
OCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAgICAgc2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxzID0gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0
aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgV0tQYWdlTG9hZFVSTChtX21h
aW5XZWJWaWV3LT5wYWdlKCksIGJsYW5rVVJMKCkpOwogICAgIHJ1blVudGlsKG1fZG9uZVJlc2V0
dGluZywgbV9jdXJyZW50SW52b2NhdGlvbi0+c2hvcnRUaW1lb3V0KCkpOwpAQCAtMjI3MCw2ICsy
MjcyLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWwKICAgICBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyRm9yT25lRG9tYWluKGhvc3ROYW1lLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgVGVzdENvbnRy
b2xsZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisgICAgCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsK
QEAgLTIyODAsNiArMjI4NywxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
U2hvdWxkCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIH0KIAordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
clNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKyAgICAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0
YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQogewogICAgIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNl
Y29uZHMpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2
aXNpb24gMjE4NzYyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsOCArMTYzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0
YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oV0tTdHJpbmdS
ZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0
cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVl
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
KGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudFN0b3JlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAkocmV2aXNpb24gMjE4NzYyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsNiArMTA1NiwxMSBAQCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlciIpKSB7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
CkBAIC0xMDYzLDYgKzEwNjgsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2Nh
dGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOworICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMjE4NzYyKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw2ICsyODEsMTcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2VUbwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5RmluaXNoZWQiKSkgeworICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcyA9ICh1bnNpZ25l
ZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzIikpKSk7CisgICAgICAgIHVuc2lnbmVk
IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpKSkpOwor
ICAgICAgICB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyA9ICh1bnNp
Z25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIikpKSk7CisgICAg
ICAgIAorICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxs
YmFjayh0b3RhbFByZXZhbGVudFJlc291cmNlcywgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uLCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVy
cm9yTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVy
cm9yIikpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5KEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikpOwogICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9y
TWVzc2FnZUJvZHkuZ2V0KCkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MzYsNiArNjM2LDcgQEAgZW51bSB7CiAgICAgRGlkUmVtb3ZlU3dpcGVT
bmFwc2hvdENhbGxiYWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2Fs
bGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2tJRCwKKyAg
ICBTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJRCwKICAgICBEaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFja0lELAogICAgIEZpcnN0VUlTY3JpcHRDYWxsYmFja0lE
ID0gMTAwCiB9OwpAQCAtMTM4Myw2ICsxMzg0LDMwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0RpZFNjYW5EYXRhUmUKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRTY2FuRGF0YVJlY29yZHNDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjppbnN0
YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3Vy
Y2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24s
IHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQoreworICAgIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKyAg
ICAKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJ7IFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNcIiA6ICIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgXCJ0b3RhbFByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb25cIiA6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIFwidG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnNcIiA6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRvcDNTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB9
Iik7CisgICAgCisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3Ry
aW5nKGNvbnRleHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgCisgICAgY2FsbFRlc3RSdW5uZXJDYWxs
YmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7Cit9
CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0ZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlciIpKTsKQEAgLTE0MjAsNiArMTQ0NSwxMiBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFyCiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKIH0KIAordm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpOwpAQCAtMTQzNCw2ICsxNDY1LDE0IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZENsYXMKICAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
OwogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CiB9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVk
IikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywg
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUp
OworfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVu
RGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQogewpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9u
IDIxODc2MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsMTEgKzM0OCwxNCBAQCBwdWJsaWM6CiAgICAg
Ly8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0Rp
ZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9p
ZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYg
Y2FsbGJhY2spOworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxs
YmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIHN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNv
cmRzQ2FsbGJhY2soKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFj
ayh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90YWxQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyRm9yT25lRG9tYWluKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsK
KyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMzY2LDYgKzM2OSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJl
ZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICB2
b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29s
IHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJp
bmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJl
dmlzaW9uIDIxODc2MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBA
QCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgLy8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNz
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2so
b2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFS
ZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIGluc3RhbGxTdGF0aXN0
aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4g
dmFsdWUpOwogICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3Ry
aW5nIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rp
b24oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKQEAgLTI2Niw4ICsyNjcsMTAg
QEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4g
dmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sZWFuIHZh
bHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZh
dGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODc2MikKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDE3LTA2LTIzICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAg
IFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Rl
bGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24u
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6Cisg
ICAgICAgICAgICBFbmFibGVkIGhlcmUgc2luY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBpcyBX
SzItb25seS4KKwogMjAxNy0wNi0yMyAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIGZhc3QvcmVnaW9ucy9yZWdpb24tbGVhay1qcy1pbmZvcm1hdGlv
bi13aGVuLWRpc2FibGVkLWF0LXJ1bnRpbWUuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24t
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4
dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4g
ZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFRlbGVtZXRyeSBHZW5lcmF0aW9uCitt
YWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRG
b3JGcmFtZQorVGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMg
Y2FsY3VsYXRlZCBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIEhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4KK1BBU1MgdGVzdFJl
c3VsdC50b3RhbFByZXZhbGVudFJlc291cmNlcyBpcyA0CitQQVNTIHRlc3RSZXN1bHQudG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIGlzIDEKK1BBU1MgdGVzdFJlc3Vs
dC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyBpcyA0CitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRp
b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9
IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdCBmb3IgVGVsZW1ldHJ5IEdlbmVyYXRpb248L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRo
YXQgdGVsZW1ldHJ5IGZvciBwcmV2YWxlbnQgcmVzb3VyY2VzIGlzIGNhbGN1bGF0ZWQgY29ycmVj
dGx5LiIpOworCisgICAgY29uc3QgdG9wRnJhbWVVcmwxID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC90ZW1wIjsKKyAgICBjb25zdCB0b3BGcmFtZVVybDIgPSAiaHR0cDovLzEyNy4wLjAuMjo4MDAw
L3RlbXAiOworICAgIGNvbnN0IHRvcEZyYW1lVXJsMyA9ICJodHRwOi8vMTI3LjAuMC4zOjgwMDAv
dGVtcCI7CisgICAgY29uc3QgdG9wRnJhbWVVcmw0ID0gImh0dHA6Ly8xMjcuMC4wLjQ6ODAwMC90
ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDEgPSAiaHR0cDovLzEyNy4wLjEu
MTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMiA9ICJodHRwOi8v
MTI3LjAuMS4yOjgwMDAvdGVtcCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwzID0g
Imh0dHA6Ly8xMjcuMC4xLjM6ODAwMC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJj
ZVVybDQgPSAiaHR0cDovLzEyNy4wLjEuNDo4MDAwL3RlbXAiOworCisgICAgZnVuY3Rpb24gY2hl
Y2tDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICBpZiAoIXRlc3RSdW5uZXIu
aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwxKSkgewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
cHJldmFsZW50UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAy
IGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwzKSkgeworICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJl
dmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAg
IH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJl
dmFsZW50UmVzb3VyY2VVcmw0KSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCA0IGRp
ZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuIik7CisgICAgICAg
ICAgICBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybCkgeworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJl
dmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVy
bCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDMp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVu
dFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRv
cEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwzKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQpOworCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRS
ZXNvdXJjZVVybDEsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybDEs
IHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybDEsIHRvcEZyYW1lVXJs
Myk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybDEsIHRvcEZyYW1lVXJsNCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2V0VXBTdGF0aXN0aWNzQW5kQ29udGludWUoKSB7CisgICAgICAgIG1h
a2VVcmxQcmV2YWxlbnQocHJldmFsZW50UmVzb3VyY2VVcmwxKTsKKyAgICAgICAgbWFrZVVybFBy
ZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDIpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50
KHByZXZhbGVudFJlc291cmNlVXJsMyk7CisgICAgICAgIG1ha2VVcmxQcmV2YWxlbnQocHJldmFs
ZW50UmVzb3VyY2VVcmw0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24ocHJldmFsZW50UmVzb3VyY2VVcmw0LCB0cnVlKTsKKworICAgICAg
ICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2so
Y2hlY2tDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0
aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcnVuVGVsZW1ldHJ5QW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlz
dGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1bHQ7
CisgICAgZnVuY3Rpb24gY2hlY2tUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RSZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50
UmVzb3VyY2VzIiwgIjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEiKTsKKyAgICAgICAgc2hvdWxk
QmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiNCIpOwor
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIHRlc3RSdW5uZXIu
aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhjaGVja1RlbGVtZXRyeSk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHRydWUpOworICAgICAgICBzZXRVcFN0
YXRpc3RpY3NBbmRDb250aW51ZSgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTg3NjIpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzA1LDYgKzcw
NSw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWMKIGh0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsYXNzaWZ5LWFzLXByZXZhbGVudC1i
YXNlZC1vbi1zdWJyZXNvdXJjZS11bmlxdWUtcmVkaXJlY3RzLXRvLmh0bWwgWyBQYXNzIF0KIGh0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWluLW1lbW9yeS1h
bmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTcyNDUyIGh0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0aGVyaW5nLmh0
bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sIFsgUGFzcyBdCiAKICMjIyBF
TkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4cGVj
dGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313759</attachid>
            <date>2017-06-23 16:46:55 -0700</date>
            <delta_ts>2017-06-26 11:55:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170623165103.patch</filename>
            <type>text/plain</type>
            <size>71763</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTIzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXSzJdIFN1cHBvcnQgLVtXZWJBVlBsYXllckNvbnRyb2xsZXIgc2V0TXV0ZWQ6XQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZp
c2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3Jl
LT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9i
c2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBwcmlt
YXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIx
ODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25D
b29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICBy
ZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2ICszNzMsNDAgQEAg
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHBy
ZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRl
ZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8PSAwID8gMCA6Cisg
ICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAgICAgICAgICAgc29y
dGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgICAg
ICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJl
dmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KSB7CisgICAgICAgIHNvcnRlZC5jbGVhcigpOwor
ICAgICAgICByZXR1cm4gc29ydGVkOworICAgIH0KKyAgICAKKyAgICBzdGQ6OnNvcnQoc29ydGVk
LmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgW10oY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnkmIGEsIGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7CisgICAgICAgIHJl
dHVybiBhLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPgorICAgICAg
ICBiLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgfSk7Cisg
ICAgCisgICAgcmV0dXJuIHNvcnRlZDsKK30KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlz
aW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTcgQEAgY2xhc3MgS2V5ZWRE
ZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwogY2xhc3MgVVJMOwogCitzdGF0aWMgY29uc3Qg
YXV0byBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5ID0gMzsKKyAgICAKK3N0
cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCB7IDAgfTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFj
dGlvbiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgZGF5c1NpbmNlVXNlckludGVyYWN0aW9uIHsg
MCB9OworICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgeyAwIH07Cisg
ICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAgfTsKKyAgICB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHsgMCB9OworfTsKKyAgICAKIHN0
cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiB7CkBAIC02NCw4ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJGaXJzdCk+JiYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVDYWxsYmFjayhXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcmFuZGZhdGhlckV4aXN0
aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgaGFuZGxlcik7CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOworICAgIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0VGltZVRv
TGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0TWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CkBAIC03
Nyw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkUmVj
ZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNzRm9yUmVt
b3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVGcmVzaFN0YXJ0V2l0aEVt
cHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zVG9HcmFuZGZhdGhlcik7CkBAIC05NSw2ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFdURjo6
RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hh
bmRsZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0ZW50U3RvcmVI
YW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0aGVyRXhpc3RpbmdX
ZWJzaXRlRGF0YUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZmlyZVRlbGVt
ZXRyeUhhbmRsZXI7CiAKICAgICBkb3VibGUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1w
IHsgMCB9OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB7IDAg
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5j
cHAJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDUgKzc2NywxMCBAQCBTdHJpbmcg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpiYWNrZ3JvdW5kCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgib3ZlcjcwIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
InJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkiKTsKK30KKyAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2lu
Z0tleXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5oCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdu
b3N0aWNMb2dnaW5nS2V5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDggQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbWVtb3J5VXNhZ2VUb0RpYWdu
b3N0aWNMb2dnaW5nS2V5KHVpbnQ2NF90IG1lbW9yeVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIGZvcmVncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXko
ZG91YmxlIGNwdVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGJhY2tn
cm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKKyAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIxODc2MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE3LTA2LTIzICBKb2huIFdpbGFuZGVyICA8
d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczog
QWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICAg
ICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAK
KyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcik6Cisg
ICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVu
VGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5Rmlu
aXNoZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAgICAg
VGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAg
ICAgQ29uZmlndXJlcyBhIHRpbWVyIGZvciB0ZWxlbWV0cnkgY2FwdHVyZS4gRmlyZXMgNSBzZWNv
bmRzIGFmdGVyIGxhdW5jaAorICAgICAgICAgICAgYW5kIHRoZW4gZXZlcnkgMjQgaG91cnMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgICAgICBWYXJpYWJsZSBy
ZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVt
b3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdl
cyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAt
PiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAt
PiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YSk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCk6CisgICAg
ICAgICAgICAgQ2FsbHMgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3Vs
YXRlQW5kU3VibWl0KCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om51bWJlck9mUmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om1lZGlhbik6CisgICAg
ICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OnN1Ym1pdFRvcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpzdWJtaXRUb3BMaXN0cyk6CisgICAg
ICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNy0wNi0yMyAgRGF2aWQgS2lsemVyICA8ZGRr
aWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIHYzOiBSRUdSRVNTSU9OIChyMjE4NDE5KTogMyBO
U011dGFibGVEaWN0aW9uYXJ5IGxlYWtzIGNhbGxpbmcgLVtXS1Byb2Nlc3NQb29sIF9wbHVnaW5M
b2FkQ2xpZW50UG9saWNpZXNdCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNp
b24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw2ICsxMDksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAg
ICBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNr
ZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktp
dDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dE1lbnVM
aXN0ZW5lclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNw
cAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEy
Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9MZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZp
c2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpCiAgICAgICAgIHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZSgiV2Vic2l0ZURhdGFTY2FuRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbnNGaW5pc2hlZCIsIG51bGxwdHIpOwogfQogICAgIAordm9pZCBXZWJQcm9jZXNzUHJv
eHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQoQVBJOjpPYmplY3QqIG1l
c3NhZ2VCb2R5KQoreworICAgIGZvciAoYXV0byYgcGFnZSA6IGdsb2JhbFBhZ2VNYXAoKSkKKyAg
ICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKCJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiLCBtZXNzYWdlQm9keSk7Cit9CisgICAgCiBS
ZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVu
dCYgcGFnZUNsaWVudCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYgcGFnZUNvbmZpZ3Vy
YXRpb24pCiB7CiAgICAgdWludDY0X3QgcGFnZUlEID0gZ2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIx
ODc2MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBk
ZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJz
aXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmlu
Zz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdl
cywgRnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwog
ICAgIHN0YXRpYyB2b2lkIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBzaG91bGROb3Rp
ZnlQYWdlLCBGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
c1Byb2Nlc3NlZCgpOworICAgIHN0YXRpYyB2b2lkIG5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1l
dHJ5RmluaXNoZWQoQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KTsKIAogICAgIHZvaWQgZW5hYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTEgKzEyNCwyMSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmCiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cih7aG9zdE5hbWV9LCB7IH0sIGZhbHNlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2
YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwodmFsdWUpOwpAQCAtMTUxLDYgKzE2MSw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnIKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKDYwKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2Jz
ZXJ2ZXIoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoMzYwMCk7CiAgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGZhbHNlKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChmYWxzZSk7CiAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCh0cnVlKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhckluTWVtb3J5U3RvcmUoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5k
bGVyRm9yT25lRG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAg
IHN0YXRpYyB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsK
ICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbChib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlKCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2Vj
b25kcy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ3LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE9wdGlvblNldDxXZWJLaXQ6Oldl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7Ci1zdGF0aWMgYXV0byBub3RpZnlQYWdl
cyA9IGZhbHNlOworc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCA9IGZhbHNlOwogc3RhdGljIGF1dG8gc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCkBAIC01OSw3ICs2MCwxMSBAQCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291CiAgICAgOiBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgp
KQogICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKICAgICAsIG1fc3RhdGlz
dGljc1N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCisgICAgLCBt
X3RlbGVtZXRyeU9uZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCisgICAgLCBtX3RlbGVt
ZXRyeVJlcGVhdGVkVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQogeworICAgIG1fdGVsZW1ldHJ5
T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAgIG1fdGVsZW1ldHJ5UmVwZWF0ZWRU
aW1lci5zdGFydFJlcGVhdGluZygyNF9oKTsKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKQEAgLTY4LDcgKzczLDcg
QEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogCiB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChib29sIGFsd2F5cykKIHsKLSAgICBub3RpZnlQYWdlcyA9IGFsd2F5czsKKyAg
ICBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gYWx3YXlzOwogfQogCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKQEAgLTExOSw3ICsxMjQs
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtCiAKICAgICAvLyBT
d2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEg
c3RvcmUKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9t
YWlucyA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMpLCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgp
IG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9y
VG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRh
dGFUeXBlc1RvUmVtb3ZlLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIG5vdGlm
eVBhZ2VzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKFZl
Y3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAg
ICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92
ZSwgV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBub3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldKFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNv
cHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVt
b3ZlZERhdGFSZWNvcmRzKHRvcERvbWFpbnMpOwpAQCAtMTQwLDcgKzE0NSw3IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm8KICAgICAgICAgfQogICAgICAgICByZW1v
dmVEYXRhUmVjb3JkcygpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vdGlmeVBhZ2VzKSB7Cisg
ICAgICAgIGlmIChub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKSB7CiAgICAg
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW10gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzUHJvY2Vzc2VkKCk7CiAgICAgICAgICAgICB9KTsKQEAgLTE5Myw2ICsxOTgsMTEgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZwogICAgIG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFj
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKICAgICAgICAgZ3Jh
bmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKCk7CiAgICAgfSk7CisgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUtPnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgLy8gVGhpcyBjYW5jZWxzIHRo
ZSBvbmUgc2hvdCB0aW1lciBhbmQgaXMgb25seSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nl
cy4KKyAgICAgICAgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3RvcCgpOworICAgICAgICBtX3Rl
bGVtZXRyeU9uZVNob3RUaW1lci5zdGFydE9uZVNob3QoMTAwX21zKTsKKyAgICB9KTsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVn
aXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOwogI2VuZGlmCkBAIC0yMTUsNyArMjI1LDcgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYQogICAgIAogICAgIC8vIFN3
aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBz
dG9yZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShkYXRhVHlwZXNUb1Jl
bW92ZSwgbm90aWZ5UGFnZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5z
V2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShkYXRhVHlwZXNUb1JlbW92
ZSwgbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgewogICAgICAg
ICAgICAgLy8gQnV0IGFsd2F5cyB0b3VjaCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzdG9y
ZSBvbiB0aGUgd29ya2VyIHF1ZXVlCiAgICAgICAgICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlz
cGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0b3BEb21haW5z
ID0gQ3Jvc3NUaHJlYWRDb3BpZXI8SGFzaFNldDxTdHJpbmc+Pjo6Y29weSh0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmNvcmVTdG9yZSgpLmhhbmRsZUZyZXNoU3RhcnRXaXRoRW1w
dHlPck5vU3RvcmUoV1RGTW92ZSh0b3BEb21haW5zKSk7CkBAIC0zMjksNSArMzM5LDE0IEBAIHN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IFdlYlJlc291cmMKIAogICAgIHJldHVybiBLZXll
ZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3RGF0
YS0+ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soY29yZVN0b3JlKCkuc3RhdGlzdGljc0xvY2soKSk7CisgICAgICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb3JlU3RvcmUo
KSk7CisgICAgfSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaAkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsy
OCwxMCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRl
RGF0YVJlY29yZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTk1LDYgKzk3LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHdyaXRlRW5jb2RlclRvRGlzayhXZWJDb3JlOjpLZXllZEVuY29kZXIm
LCBjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6S2V5ZWREZWNvZGVyPiBjcmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBsYWJl
bCkgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCB0ZWxlbWV0cnlUaW1lckZpcmVkKCk7CiAKICAgICBSZWY8V2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTsKICNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKQEAgLTEwNSw2ICsxMDksOCBAQCBwcml2YXRl
OgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAgU3RyaW5n
IG1fc3RhdGlzdGljc1N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKKyAgICBSdW5Mb29wOjpU
aW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5UmVwZWF0ZWRU
aW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0
YXRpYyBhdXRvIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gZmFsc2U7Cisg
ICAgCitzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
KGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHJlc291cmNlcywgc2l6
ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChyZXNvdXJjZXMuaXNFbXB0eSgpIHx8
IHJlc291cmNlcy5zaXplKCkgPCBiZWdpbiArIDEgfHwgcmVzb3VyY2VzLnNpemUoKSA8IGVuZCAr
IDEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHJl
c291cmNlc1tpXS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRpYyB1bnNpZ25l
ZCBtZWRpYW4oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdikKK3sKKyAgICBpZiAodi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh2LnNpemUoKSA9PSAxKQorICAgICAgICBy
ZXR1cm4gdlswXTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKKyAgICBhdXRvIG1p
ZGRsZSA9IHNpemUgLyAyOworICAgIGlmIChzaXplICUgMikKKyAgICAgICAgcmV0dXJuIHZbbWlk
ZGxlXTsKKyAgICByZXR1cm4gKHZbbWlkZGxlIC0gMV0gKyB2W21pZGRsZV0pIC8gMjsKK30KKyAg
ICAKK3N0YXRpYyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5PiYgdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgY29uc3QgV1RGOjpG
dW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1l
dHJ5KT4mIHN0YXRpc3RpY0dldHRlcikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkgfHwgdi5zaXpl
KCkgPCBiZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7CisgICAgcGFydC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGVuZCAtIGJlZ2luICsgMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW47
IGkgPD0gZW5kOyArK2kpCisgICAgICAgIHBhcnQuYXBwZW5kKHN0YXRpc3RpY0dldHRlcih2W2ld
KSk7CisgICAgCisgICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKK30KKyAgICAKK3N0YXRpYyBXZWJQ
YWdlUHJveHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCit7CisgICAgYXV0byBwcm9jZXNz
UG9vbHMgPSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7CisgICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1
dG8gcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHNbMF07CisgICAgaWYgKCFwcm9jZXNzUG9vbCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgZm9yIChhdXRvJiB3ZWJQcm9jZXNz
IDogcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcGFnZSA6
IHdlYlByb2Nlc3MtPnBhZ2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdlLT5zZXNzaW9uSUQo
KS5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
cmV0dXJuIHBhZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9Cisg
ICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0KHVuc2lnbmVkIG51bWJlck9mUmVzb3VyY2Vz
RnJvbVRoZVRvcCwgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVk
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnM7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJl
c291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7Cisg
ICAgICAgIHJldHVybiB0LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsK
KyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyID0gW10g
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0
LnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9u
PHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBu
dW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0Lm51bWJlck9mVGltZXNE
YXRhUmVjb3Jkc1JlbW92ZWQ7CisgICAgfTsKKyAgICAKKyAgICB1bnNpZ25lZCB0b3BQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgMCwgbnVtYmVyT2ZSZXNvdXJj
ZXNGcm9tVGhlVG9wIC0gMSk7CisgICAgdW5zaWduZWQgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0g
MSwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0dldHRlcik7CisgICAgdW5zaWduZWQgdG9w
TnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21U
aGVUb3AgLSAxLCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyKTsKKyAgICAK
KyAgICBTdHJpbmdCdWlsZGVyIHByZWFtYmxlQnVpbGRlcjsKKyAgICBwcmVhbWJsZUJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgidG9wIik7CisgICAgcHJlYW1ibGVCdWlsZGVyLmFwcGVuZE51bWJlcihu
dW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3ApOworICAgIFN0cmluZyBkZXNjcmlwdGlvblByZWFt
YmxlID0gcHJlYW1ibGVCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgd2ViUGFnZVByb3h5
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsg
QVNDSUlMaXRlcmFsKCJQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiksCisg
ICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFNob3Vs
ZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyIpLAorICAgICAgICB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyBBU0NJSUxpdGVyYWwo
IlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwKKyAgICAgICAgdG9wU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFn
ZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFt
YmxlICsgQVNDSUlMaXRlcmFsKCJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIiksCisgICAg
ICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIDAsIFNob3VsZFNhbXBsZTo6Tm8p
OworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVz
Y3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRz
UmVtb3ZlZCIpLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkLCAw
LCBTaG91bGRTYW1wbGU6Ok5vKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3Rz
KGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCit7CisgICAgc3VibWl0VG9wTGlzdCgxLCBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24s
IHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuOworICAgIHN1
Ym1pdFRvcExpc3QoMywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAorICAg
IGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUo
KSA8IDEwKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgxMCwgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDUwKQorICAgICAgICByZXR1cm47
CisgICAgc3VibWl0VG9wTGlzdCg1MCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOwor
ICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLnNpemUoKSA8IDEwMCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAw
LCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhv
dXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Cit9CisgICAgCisvLyBUaGlzIGZ1bmN0
aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgordm9pZCBzdGF0aWMgbm90aWZ5UGFnZXNUaGF0
Tm90aGluZ1dhc0RvbmUoKQoreworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdl
Qm9keTsKKyAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJl
c291cmNlcyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKDApKTsKKyAgICBtZXNzYWdlQm9keS5zZXQo
QVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24i
KSwgQVBJOjpVSW50NjQ6OmNyZWF0ZSgwKSk7CisgICAgbWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0
ZXJhbCgiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwgQVBJOjpVSW50NjQ6OmNy
ZWF0ZSgwKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFttZXNzYWdlQm9k
eSA9IFdURk1vdmUobWVzc2FnZUJvZHkpXSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90
aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0
ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlv
biBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKGNvbnN0
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291
cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7CisgICAgV1RGOjpG
dW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1l
dHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAgYXV0byB0b3AzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0
dGVyKTsKKyAgICAKKyAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWVzc2FnZUJvZHk7Cisg
ICAgbWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMi
KSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKSk7
CisgICAgbWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uIiksIEFQSTo6VUludDY0OjpjcmVhdGUodG90YWxOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pKTsKKyAgICBtZXNzYWdlQm9k
eS5zZXQoQVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpLCBB
UEk6OlVJbnQ2NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7Cisg
ICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFttZXNzYWdlQm9keSA9IFdURk1vdmUo
bWVzc2FnZUJvZHkpXSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRp
c3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShtZXNzYWdlQm9k
eSkucHRyKCkpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgCisgICAgYXV0byBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMg
PSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkoKTsKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSA8IG1pbmlt
dW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpIHsKKyAgICAgICAgbm90aWZ5UGFnZXNU
aGF0Tm90aGluZ1dhc0RvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcHJldmFsZW50UmVzb3Vy
Y2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIHByZXZhbGVudFJlc291cmNlc0RheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3Vy
Y2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKHByZXZhbGVudFJl
c291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291
cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVz
b3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNr
ZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBhdXRvIHdlYlBh
Z2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgIGlmICghd2ViUGFnZVBy
b3h5KSB7CisgICAgICAgIG5vdGlmeVBhZ2VzVGhhdE5vdGhpbmdXYXNEb25lKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzIiksIHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCksIDAsIFNob3VsZFNhbXBs
ZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUo
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5
KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LnNpemUoKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgaWYgKHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAwKQorICAgICAgICB3ZWJQ
YWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwo
InRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRl
cmFjdGlvbiIpLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb25bMF0s
IDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMSkKKyAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJtZWRpYW5QcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIiks
IG1lZGlhbihwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24pLCAwLCBT
aG91bGRTYW1wbGU6Ok5vKTsKKyAgICAKKyAgICBzdWJtaXRUb3BMaXN0cyhzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sICp3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChub3RpZnlQYWdlc1doZW5UZWxlbWV0
cnlXYXNDYXB0dXJlZCkKKyAgICAgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBwcmV2
YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpKTsKK30KKyAgICAK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCBhbHdheXMpCit7CisgICAgbm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBhbHdheXM7Cit9CisgICAgCit9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAK
K25hbWVzcGFjZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKKyAgICAKK3Zv
aWQgY2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSYpOwordm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChi
b29sKTsKKyAgICAKK307CisgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw2ICsxMTYsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
RmlyZQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4odG9XVEZTdHJpbmcoaG9zdE5hbWUpLCB2
YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxl
bWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKwogdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZh
bHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKQEAgLTEyNiw2ICsxMzEsMTEg
QEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0UwogICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wg
dmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKwogdm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgp
CiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aAkocmV2aXNpb24gMjE4NzYyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCAr
NDksMTAgQEAgZXh0ZXJuICJDIiB7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIFdLX0VY
UE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9t
YWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBXS19FWFBPUlQgdm9p
ZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsK
ICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKTsKICAgICBXS19F
WFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSk7CisgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIFdLX0VYUE9SVCB2b2lk
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5z
aWduZWQpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTg3NjIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExODksNiArMTE4OSw4IEBACiAJCTY1MDFCRDFBMTJGMTI0MzQwMEU5RjI0OCAv
KiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0
b3IuY3BwICovOyB9OwogCQk2NTlDNTUxRTEzMDAwNjQxMDAyNUMwQzIgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDZBODI5MTMwMDAxNjQwMDBDRUIxQyAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwICovOyB9OwogCQk2NUI4NkYxRTEyRjExREUz
MDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRs
ZUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oICovOyB9OworCQk2QjgyMURERDFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi87IH07CiAJCTZCQkJBRDM4MUVDM0U1
NzgwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJCQkFEMzcxRUMz
RTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW0g
Ki87IH07CiAJCTZCRTk2OTlDMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTZCRTk2OTlFMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcCAqLzsgfTsKQEAgLTM0NzgsNiArMzQ4MCw4IEBACiAJCTY1NDZBODJBMTMwMDAxNjQw
MDBDRUIxQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2Fk
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE3MTJGMTFEN0Iw
MEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkJCQUQz
NzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJFOTY5
OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODYwLDYg
KzY4NjQsOCBAQAogCQkJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAogCQkJCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAv
KiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKIAkJCQk3QTlDRDhDMjFDNzc5
QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmlu
ICovLAorCQkJCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmggKi8sCisJCQkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovLAogCQkJCTUxRDEyNDI0MUU2
RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmNwcCAqLywKIAkJCQk1MUQxMjQy
NTFFNkQzQ0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5oICovLAogCQkJCTUxRThC
NjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVUYXNrLmNwcCAqLywKQEAgLTgyNDYs
NiArODI1Miw3IEBACiAJCQkJMkRBQkE3NzYxQTgyQjQyMTAwRUYwRjFBIC8qIEFQSUhpc3RvcnlD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjQ2MUJDODgyOTMwMEFCQTVDMiAvKiBB
UElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzc1MTIzMTFERjBERUUyMDA4
QTM1MUMgLyogQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzY5MDc5RTE4RjM0MEEyMDAxREZGMDQg
LyogQVBJSW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzY5
MDc5QTE4RjMxQ0IyMDAxREZGMDQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTREMjA3MUE0Njc3NjEwMEM3RjE1MiAvKiBBUElMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODc3LDYgKzk4ODQsNyBA
QAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBEYXRhYmFzZVByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExNUM3MTQxOTBGODlFNDAwRUND
NTE2IC8qIERhdGFiYXNlUHJvY2Vzc0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTM1MjAy
MTgwRjVEMUUwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywK
KwkJCQk2QjgyMURERDFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2MDE4MEUwMzFEMDAzOUEx
NDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2OTE4MEUwOUI4MDAzOUExNDkgLyogRGF0YWJhc2VQ
cm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTg3
NjIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAor
MjAxNy0wNi0yMyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyB0aHJlZSBuZXcgdGVzdFJ1bm5lciBmdW5jdGlvbnM6CisgICAgICAg
IC0gaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjaygpCisgICAgICAgIC0g
c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKKyAgICAgICAgLSBzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoKQorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoK
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZFJ1
blRlbGVtZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0
cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTctMDYtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgU1BJIHRvIFdLVVJMU2NoZW1lVGFz
ayBmb3IgcmVkaXJlY3Rpb24KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM3LDYgKzgzNyw4IEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRJZ25vcmVzVmlld3Bv
cnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKIAogICAg
IG1fb3BlblBhbmVsRmlsZVVSTHMgPSBudWxscHRyOworICAgIAorICAgIHN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKICAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldlYlZpZXct
PnBhZ2UoKSwgYmxhbmtVUkwoKSk7CiAgICAgcnVuVW50aWwobV9kb25lUmVzZXR0aW5nLCBtX2N1
cnJlbnRJbnZvY2F0aW9uLT5zaG9ydFRpbWVvdXQoKSk7CkBAIC0yMjcwLDYgKzIyNzIsMTEgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91bAogICAgIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JP
bmVEb21haW4oaG9zdE5hbWUsIHZhbHVlKTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c3Rh
dGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpAQCAtMjI4MCw2
ICsyMjg3LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NTaG91bGQKICAg
ICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9v
bCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQorICAgIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoZG91YmxlIHNlY29uZHMpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTg3
NjIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Myw4ICsxNjMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3RhdGlzdGljc0Zp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihXS1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIo
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91
YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNl
Y29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShy
ZXZpc2lvbiAyMTg3NjIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Niw2ICsxMDU2LDExIEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpIHsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKQEAgLTEwNjMs
NiArMTA2OCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMTg3NjIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgx
LDYgKzI4MSwxNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hl
ZCIpKSB7CisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzID0gKHVuc2lnbmVkKVdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSkpKTsKKyAgICAgICAgdW5zaWduZWQgdG90YWxQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIikpKSk7CisgICAgICAgIHVu
c2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSkpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHRvdGFs
UHJldmFsZW50UmVzb3VyY2VzLCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7CiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7CiAgICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9k
eS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxODc2MikKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHsKICAgICBEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2Fs
bGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFja0lELAog
ICAgIFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFja0lELAorICAgIFN0YXRpc3Rp
Y3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELAogICAgIERpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFsc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENhbGxiYWNrSUQgPSAxMDAKIH07
CkBAIC0xMzgzLDYgKzEzODQsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkU2Nh
bkRhdGFSZQogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNjYW5EYXRh
UmVjb3Jkc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0
aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJ
RCwgY2FsbGJhY2spOworfQorICAgIAordm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVu
VGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2ln
bmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQg
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCit7CisgICAgV0tCdW5kbGVGcmFtZVJl
ZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworICAgIAorICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoInsgXCJ0b3RhbFByZXZhbGVudFJlc291cmNlc1wiIDogIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvblwiIDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG90YWxQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgXCJ0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1wiIDogIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIH0iKTsKKyAgICAK
KyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4
dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAKKyAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRp
c3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKK30KKyAgICAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyIikpOwpAQCAtMTQyMCw2ICsxNDQ1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0ZpcmVTaG91bGRQYXIKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0
aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDAsIG51bGxwdHIpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQog
ewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQiKSk7CkBAIC0xNDM0LDYgKzE0NjUsMTQgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhcwogICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CiAgICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
IH0KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRl
bGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE4NzYyKQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0OCwxMSArMzQ4LDE0IEBAIHB1YmxpYzoKICAgICAvLyBSZXNvdXJj
ZSBMb2FkIFN0YXRpc3RpY3MKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0
YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxT
dGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7
CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKEpTVmFs
dWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRz
Q2FsbGJhY2soKTsKICAgICB2b2lkIHN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFj
aygpOworICAgIHZvaWQgc3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVk
IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHZvaWQg
c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAg
IGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1Jl
ZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNjYsNiArMzY5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKGRvdWJsZSBz
ZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91
YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjE4
NzYyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIGludGVyZmFj
ZSBUZXN0UnVubmVyIHsKICAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAgICB2b2lk
IGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2Fs
bGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxs
YmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5U
ZWxlbWV0cnlDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CiAg
ICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5h
bWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihET01TdHJp
bmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjY2LDggKzI2NywxMCBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyRm9yT25lRG9tYWluKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7Cisg
ICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0
YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4gdmFs
dWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2xlYW4gdmFsdWUpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
ZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGlt
ZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4NzYyKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDYtMjMg
IEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2Ug
TG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMy
ODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdl
bmVyYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgICAg
IEVuYWJsZWQgaGVyZSBzaW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGlzIFdLMi1vbmx5Lgor
CiAyMDE3LTA2LTIzICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgZmFzdC9yZWdpb25zL3JlZ2lvbi1sZWFrLWpzLWluZm9ybWF0aW9uLXdoZW4tZGlz
YWJsZWQtYXQtcnVudGltZS5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgVGVsZW1ldHJ5IEdlbmVyYXRpb24KK21haW4gZnJhbWUg
LSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9u
bG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitU
ZXN0cyB0aGF0IHRlbGVtZXRyeSBmb3IgcHJldmFsZW50IHJlc291cmNlcyBpcyBjYWxjdWxhdGVk
IGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgSG9zdHMg
Y2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2VzLgorUEFTUyB0ZXN0UmVzdWx0LnRvdGFs
UHJldmFsZW50UmVzb3VyY2VzIGlzIDQKK1BBU1MgdGVzdFJlc3VsdC50b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gaXMgMQorUEFTUyB0ZXN0UmVzdWx0LnRvcDNTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIGlzIDQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1l
dHJ5LWdlbmVyYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgor
ICAgIDx0aXRsZT5UZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbjwvdGl0bGU+CisgICAgPHNj
cmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0ZWxlbWV0
cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkuIik7CisK
KyAgICBjb25zdCB0b3BGcmFtZVVybDEgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXAiOwor
ICAgIGNvbnN0IHRvcEZyYW1lVXJsMiA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCI7Cisg
ICAgY29uc3QgdG9wRnJhbWVVcmwzID0gImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIjsKKyAg
ICBjb25zdCB0b3BGcmFtZVVybDQgPSAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiOworICAg
IGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMSA9ICJodHRwOi8vMTI3LjAuMS4xOjgwMDAvdGVt
cCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwyID0gImh0dHA6Ly8xMjcuMC4xLjI6
ODAwMC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDMgPSAiaHR0cDovLzEy
Ny4wLjEuMzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsNCA9ICJo
dHRwOi8vMTI3LjAuMS40OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlvbiBjaGVja0NsYXNzaWZp
Y2F0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDEpKSB7CisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQg
cmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNl
IGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRS
ZXNvdXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDIgZGlkIG5vdCBn
ZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDMpKSB7CisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJIb3N0IDMgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVz
b3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlm
ICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNv
dXJjZVVybDQpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDQgZGlkIG5vdCBnZXQg
Y2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkhvc3Rz
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAgICAgIHJ1blRl
bGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBt
YWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsKSB7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNv
dXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFt
ZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMyk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2
YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2VV
cmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwy
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDMpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50
UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJs
MSwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsMSwgdG9wRnJhbWVV
cmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsMSwgdG9wRnJhbWVVcmwzKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
KHByZXZhbGVudFJlc291cmNlVXJsMSwgdG9wRnJhbWVVcmw0KTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzZXRVcFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZh
bGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDEpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHBy
ZXZhbGVudFJlc291cmNlVXJsMik7CisgICAgICAgIG1ha2VVcmxQcmV2YWxlbnQocHJldmFsZW50
UmVzb3VyY2VVcmwzKTsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJj
ZVVybDQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihwcmV2YWxlbnRSZXNvdXJjZVVybDQsIHRydWUpOworCisgICAgICAgIHRlc3RSdW5u
ZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhjaGVja0NsYXNz
aWZpY2F0aW9uQW5kQ29udGludWUpOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZWxl
bWV0cnlBbmRDb250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZVRl
bGVtZXRyeUhhbmRsZXIoKTsKKyAgICB9CisKKyAgICB2YXIgdGVzdFJlc3VsdDsKKyAgICBmdW5j
dGlvbiBjaGVja1RlbGVtZXRyeShyZXN1bHQpIHsKKyAgICAgICAgdGVzdFJlc3VsdCA9IHJlc3Vs
dDsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMi
LCAiNCIpOworICAgICAgICBzaG91bGRCZSgidGVzdFJlc3VsdC50b3RhbFByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiMSIpOworICAgICAgICBzaG91bGRCZSgidGVzdFJl
c3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsICI0Iik7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3Rh
dGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKGNoZWNrVGVsZW1ldHJ5KTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1ZSk7CisgICAgICAgIHNldFVwU3RhdGlzdGljc0Fu
ZENvbnRpbnVlKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxODc2MikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsNiArNzA1LDcgQEAgaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xhc3NpZnktYXMtcHJldmFsZW50LWJhc2VkLW9uLXN1
YnJlc291cmNlLXVuaXF1ZS1yZWRpcmVjdHMtdG8uaHRtbCBbIFBhc3MgXQogaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0
ZW50LXN0b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3Mg
RmFpbHVyZSBUaW1lb3V0IF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBPRiAoNSkg
UHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVy
ZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313857</attachid>
            <date>2017-06-26 11:55:37 -0700</date>
            <delta_ts>2017-06-26 13:01:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170626120001.patch</filename>
            <type>text/plain</type>
            <size>73314</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTI2ICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbQVRLXSBBZGQgc3VwcG9ydCBmb3IgYXJpYS1kZXRhaWxzIGFuZCBhcmlhLWVycm9ybWVz
c2FnZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBj
YWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBtX3N0b3JlLT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJl
c291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAg
IHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRv
bWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBj
bGVhckZpcnN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFu
ZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1f
ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRQYXJ0aXRpb25Db29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3Rp
YykKIHsKICAgICByZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2
ICszNzMsNDAgQEAgVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAg
ICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+IHNvcnRlZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGlj
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8
PSAwID8gMCA6CisgICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0
YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAg
ICAgICAgICAgc29ydGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSB7CisgICAgICAgICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAg
ICAgICAgICAgICBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAg
IGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlz
dGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAg
ICAgIHN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkg
PCBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KSB7CisgICAgICAgIHNvcnRl
ZC5jbGVhcigpOworICAgICAgICByZXR1cm4gc29ydGVkOworICAgIH0KKyAgICAKKyAgICBzdGQ6
OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgW10oY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIGEsIGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7
CisgICAgICAgIHJldHVybiBhLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8gPgorICAgICAgICBiLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87
CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHNvcnRlZDsKK30KIAogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTcgQEAg
Y2xhc3MgS2V5ZWREZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwogY2xhc3MgVVJMOwogCitz
dGF0aWMgY29uc3QgYXV0byBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5ID0g
MzsKKyAgICAKK3N0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCB7IDAgfTsKKyAgICBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgZGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uIHsgMCB9OworICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMgeyAwIH07CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyB7
IDAgfTsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHsgMCB9Owor
fTsKKyAgICAKIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBjbGFzcyBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7CkBAIC02NCw4ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soV1RG
OjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9SZW1vdmUsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJGaXJzdCk+JiYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVDYWxsYmFjayhX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcmFu
ZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcik7CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpOworICAgIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2
b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAg
IHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vj
b25kcyk7CkBAIC03Nyw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0
aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVGcmVz
aFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zVG9HcmFuZGZhdGhlcik7CkBAIC05NSw2ICsxMDksNyBAQCBwcml2YXRl
OgogICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVz
Rm9yRG9tYWluc0hhbmRsZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJz
aXN0ZW50U3RvcmVIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0
aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IG1fZmlyZVRlbGVtZXRyeUhhbmRsZXI7CiAKICAgICBkb3VibGUgbV9lbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wIHsgMCB9OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJl
UmVtb3ZlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNM
b2dnaW5nS2V5cy5jcHAJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDUgKzc2Nywx
MCBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpiYWNrZ3JvdW5kCiAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgib3ZlcjcwIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKQoreworICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoInJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkiKTsKK30KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFn
bm9zdGljTG9nZ2luZ0tleXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Rp
YWdub3N0aWNMb2dnaW5nS2V5cy5oCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiAr
MTcxLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbWVtb3J5
VXNhZ2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KHVpbnQ2NF90IG1lbW9yeVVzYWdlKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGZvcmVncm91bmRDUFVVc2FnZVRvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIGJhY2tncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoZG91YmxlIGNw
dVVzYWdlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE3LTA2LTI2ICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQg
U3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6
CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgICAgIEFk
ZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5
SGFuZGxlcik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZy
YXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNz
VGVsZW1ldHJ5RmluaXNoZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgor
ICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUp
OgorICAgICAgICAgICAgQ29uZmlndXJlcyBhIHRpbWVyIGZvciB0ZWxlbWV0cnkgY2FwdHVyZS4g
RmlyZXMgNSBzZWNvbmRzIGFmdGVyIGxhdW5jaAorICAgICAgICAgICAgYW5kIHRoZW4gZXZlcnkg
MjQgaG91cnMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgICAg
ICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1l
ZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBu
b3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hh
cmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBu
b3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlm
eVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJG
aXJlZCk6CisgICAgICAgICAgICAgQ2FsbHMgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om51
bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om1l
ZGlhbik6CisgICAgICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OnN1Ym1pdFRvcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpzdWJtaXRUb3BM
aXN0cyk6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNy0wNi0yNiAgS29uc3Rh
bnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
YWRkIG1pc3NpbmcgaGVhZGVyIGljbmNsdWRlcwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiAg
ICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAgICAgVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAK
IApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHJldmlzaW9uIDIxODgwOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiAr
MTY3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYkNv
bnRleHRNZW51TGlzdGVuZXJQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5jcHAKIAogICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQkocmV2aXNpb24gMjE4ODA5
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw2ICsxMjcsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5jcHAKIAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRh
aWwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkocmV2aXNpb24gMjE4ODA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTIgQEAgdm9pZCBX
ZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aQogICAgICAgICBwYWdlLnZhbHVlLT5w
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoIldlYnNpdGVEYXRhU2NhbkZvclRvcFByaXZhdGVs
eUNvbnRyb2xsZWREb21haW5zRmluaXNoZWQiLCBudWxscHRyKTsKIH0KICAgICAKK3ZvaWQgV2Vi
UHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6
T2JqZWN0KiBtZXNzYWdlQm9keSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdl
TWFwKCkpCisgICAgICAgIHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIiwgbWVzc2FnZUJvZHkpOwor
fQorICAgIAogUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdl
KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBh
Z2VDb25maWd1cmF0aW9uKQogewogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlE
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShy
ZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFZl
Y3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnMsIGJvb2wgc2hvdWxk
Tm90aWZ5UGFnZXMsIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYgY29t
cGxldGlvbkhhbmRsZXIpOwogICAgIHN0YXRpYyB2b2lkIHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW5zV2l0aFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgYm9vbCBzaG91bGROb3RpZnlQYWdlLCBGdW5jdGlvbjx2b2lkKEhhc2hTZXQ8U3RyaW5nPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRp
c3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOworICAgIHN0YXRpYyB2b2lkIG5vdGlmeVBh
Z2VTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQoQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KTsK
IAogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVT
dWRkZW5UZXJtaW5hdGlvbigpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZp
c2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTEgKzEyNCwyMSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmCiAgICAgICAgIFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcih7aG9zdE5hbWV9LCB7IH0sIGZhbHNlKTsKIH0KIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQor
eworICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZp
cmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKIH0KIAordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7
Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQog
ewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwpAQCAtMTUxLDYgKzE2MSw3
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnIKICAgICBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDYwKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoMzYwMCk7CiAg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGZhbHNlKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChmYWxzZSk7
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh0cnVlKTsKICAgICBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhckluTWVtb3J5U3RvcmUoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBh
cnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUs
IGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAg
ICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9p
ZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgc3RhdGljIHZvaWQgY2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE4ODA5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNl
bWFwaG9yZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ3LDcgKzQ4LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE9w
dGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7Ci1zdGF0
aWMgYXV0byBub3RpZnlQYWdlcyA9IGZhbHNlOworc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IGZhbHNlOwogc3RhdGljIGF1dG8gc2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCkBA
IC01OSw3ICs2MCwxMSBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291
CiAgICAgOiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNyZWF0ZSgpKQogICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpj
cmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUi
KSkKICAgICAsIG1fc3RhdGlzdGljc1N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkpCisgICAgLCBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCks
IHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmly
ZWQpCisgICAgLCBtX3RlbGVtZXRyeVJlcGVhdGVkVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQog
eworICAgIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAgIG1f
dGVsZW1ldHJ5UmVwZWF0ZWRUaW1lci5zdGFydFJlcGVhdGluZygyNF9oKTsKIH0KIAogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KCkKQEAgLTY4LDcgKzczLDcgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2Vi
UmVzbwogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIGFsd2F5cykKIHsKLSAgICBub3RpZnlQ
YWdlcyA9IGFsd2F5czsKKyAgICBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
ID0gYWx3YXlzOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1
ZSkKQEAgLTExOSw3ICsxMjQsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cmVtCiAKICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVm
YXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3By
ZXZhbGVudFJlc291cmNlRG9tYWlucyA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+
Pjo6Y29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRl
bGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNp
c3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBXVEZNb3ZlKHByZXZhbGVudFJlc291
cmNlRG9tYWlucyksIG5vdGlmeVBhZ2VzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyldKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zV2l0aERlbGV0ZWRX
ZWJzaXRlRGF0YSkgbXV0YWJsZSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vi
c2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERh
dGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21h
aW5zKSwgbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFibGUgewogICAgICAgICAgICAgLy8g
QnV0IGFsd2F5cyB0b3VjaCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzdG9yZSBvbiB0aGUg
d29ya2VyIHF1ZXVlLgogICAgICAgICAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdG9wRG9tYWlucyA9IENyb3Nz
VGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShkb21haW5zV2l0aERlbGV0ZWRXZWJz
aXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNv
cmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHModG9wRG9tYWlu
cyk7CkBAIC0xNDAsNyArMTQ1LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAgICAgICAg
IAotICAgICAgICBpZiAobm90aWZ5UGFnZXMpIHsKKyAgICAgICAgaWYgKG5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBXZWJQcm9jZXNzUHJveHk6
Om5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzZWQoKTsKICAgICAgICAg
ICAgIH0pOwpAQCAtMTkzLDYgKzE5OCwxMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVnCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnNldEdyYW5k
ZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyldKCkgewogICAgICAgICBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURh
dGEoKTsKICAgICB9KTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0Rmly
ZVRlbGVtZXRyeUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
KCkgeworICAgICAgICAvLyBUaGlzIGNhbmNlbHMgdGhlIG9uZSBzaG90IHRpbWVyIGFuZCBpcyBv
bmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICAgICBtX3RlbGVtZXRyeU9u
ZVNob3RUaW1lci5zdG9wKCk7CisgICAgICAgIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyLnN0YXJ0
T25lU2hvdCgxMDBfbXMpOworICAgIH0pOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVk
KCk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMjUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Z3JhCiAgICAgCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0
byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFi
bGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQYWdlcywgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+
JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUg
eworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5z
V2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyldIChIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dp
dGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CiAgICAgICAgICAgICAvLyBCdXQgYWx3YXlzIHRvdWNo
IHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHN0b3JlIG9uIHRoZSB3b3JrZXIgcXVldWUKICAg
ICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxIYXNo
U2V0PFN0cmluZz4+Ojpjb3B5KHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNp
dGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29y
ZVN0b3JlKCkuaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0eU9yTm9TdG9yZShXVEZNb3ZlKHRvcERv
bWFpbnMpKTsKQEAgLTMzMCw0ICszNDAsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rl
cj4gV2ViUmVzb3VyYwogICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3RGF0YS0+ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgp
KTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRp
bWVyRmlyZWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAg
bV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjb3JlU3RvcmUoKS5z
dGF0aXN0aWNzTG9jaygpKTsKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KGNvcmVTdG9yZSgpKTsKKyAgICB9KTsKK30KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24g
MjE4ODA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMCBAQAogI2luY2x1ZGUg
IkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTk1LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHdy
aXRlRW5jb2RlclRvRGlzayhXZWJDb3JlOjpLZXllZEVuY29kZXImLCBjb25zdCBTdHJpbmcmIGxh
YmVsKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBj
cmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAgICAgdm9p
ZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB0ZWxl
bWV0cnlUaW1lckZpcmVkKCk7CiAKICAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKICNpZiBIQVZFKENPUkVf
UFJFRElDVElPTikKQEAgLTEwNSw2ICsxMDksOCBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6Oldv
cmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAgU3RyaW5nIG1fc3RhdGlzdGljc1N0b3Jh
Z2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNl
IH07CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBt
X3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNM
b2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
ICAgIAorc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBm
YWxzZTsKKyAgICAKK3N0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3Vy
Y2VzLCBzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0Vt
cHR5KCkgfHwgcmVzb3VyY2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgp
IDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAg
ICBpZiAocmVzb3VyY2VzW2ldLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgICsr
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorc3RhdGlj
IHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2KQoreworICAgIGlmICh2
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHYuc2l6ZSgpID09IDEpCisg
ICAgICAgIHJldHVybiB2WzBdOworICAgIAorICAgIGF1dG8gc2l6ZSA9IHYuc2l6ZSgpOworICAg
IGF1dG8gbWlkZGxlID0gc2l6ZSAvIDI7CisgICAgaWYgKHNpemUgJSAyKQorICAgICAgICByZXR1
cm4gdlttaWRkbGVdOworICAgIHJldHVybiAodlttaWRkbGUgLSAxXSArIHZbbWlkZGxlXSkgLyAy
OworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8UHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnk+JiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiB0ZWxlbWV0cnkpPiYgc3RhdGlzdGljR2V0dGVyKQoreworICAgIGlmICh2LmlzRW1wdHkoKSB8
fCB2LnNpemUoKSA8IGJlZ2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFydDsKKyAgICBwYXJ0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoZW5kIC0gYmVnaW4gKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBiZWdpbjsgaSA8PSBlbmQ7ICsraSkKKyAgICAgICAgcGFydC5hcHBlbmQoc3RhdGlzdGljR2V0
dGVyKHZbaV0pKTsKKyAgICAKKyAgICByZXR1cm4gbWVkaWFuKHBhcnQpOworfQorICAgIAorc3Rh
dGljIFdlYlBhZ2VQcm94eSogbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCkKK3sKKyAgICBhdXRv
IHByb2Nlc3NQb29scyA9IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKKyAgICBp
ZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
CisgICAgYXV0byBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sc1swXTsKKyAgICBpZiAoIXByb2Nl
c3NQb29sKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHdl
YlByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBwYWdlIDogd2ViUHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPnNl
c3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZS
ZXNvdXJjZXNGcm9tVGhlVG9wLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNv
dXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248
dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkm
IHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsK
KyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0
ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAg
cmV0dXJuIHQuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6
RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVt
ZXRyeSk+IG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIgPSBbXSAoY29uc3Qg
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQubnVtYmVy
T2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIHRv
cFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSBudW1iZXJPZlJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCAwLCBudW1iZXJP
ZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0g
MSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQg
dG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21U
aGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNp
Z25lZCB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3Vy
Y2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIp
OworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVCdWlsZGVyOworICAgIHByZWFtYmxl
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5k
TnVtYmVyKG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7CisgICAgU3RyaW5nIGRlc2NyaXB0
aW9uUHJlYW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAKKyAgICB3ZWJQ
YWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJl
YW1ibGUgKyBBU0NJSUxpdGVyYWwoIlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24iKSwKKyAgICAgICAgdG9wUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwg
MCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNz
YWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiksCisgICAgICAgIHRvcFN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMsIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJ
TGl0ZXJhbCgiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyIpLAorICAgICAgICB0b3BT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAg
ICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0
aW9uUHJlYW1ibGUgKyBBU0NJSUxpdGVyYWwoIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8i
KSwKKyAgICAgICAgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgMCwgU2hvdWxkU2Ft
cGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVl
KERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtl
eSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJOdW1iZXJPZlRpbWVzRGF0
YVJlY29yZHNSZW1vdmVkIiksCisgICAgICAgIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1Jl
bW92ZWQsIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworfQorICAgIAorc3RhdGljIHZvaWQgc3VibWl0
VG9wTGlzdHMoY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBXZWJQ
YWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBzdWJtaXRUb3BMaXN0KDEsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRl
cmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm47
CisgICAgc3VibWl0VG9wTGlzdCgzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Cisg
ICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24uc2l6ZSgpIDwgMTApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwLCBz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgNTApCisgICAgICAg
IHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDUwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQ
cm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24uc2l6ZSgpIDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9w
TGlzdCgxMDAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKK30KKyAgICAKKy8vIFRo
aXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCit2b2lkIHN0YXRpYyBub3RpZnlQ
YWdlc1RoYXROb3RoaW5nV2FzRG9uZSgpCit7CisgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBl
IG1lc3NhZ2VCb2R5OworICAgIG1lc3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzIiksIEFQSTo6VUludDY0OjpjcmVhdGUoMCkpOworICAgIG1lc3NhZ2VC
b2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKDApKTsKKyAgICBtZXNzYWdlQm9keS5zZXQo
QVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpLCBBUEk6OlVJ
bnQ2NDo6Y3JlYXRlKDApKTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW21l
c3NhZ2VCb2R5ID0gV1RGTW92ZShtZXNzYWdlQm9keSldIHsKKyAgICAgICAgV2ViUHJvY2Vzc1By
b3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6RGljdGlvbmFy
eTo6Y3JlYXRlKG1lc3NhZ2VCb2R5KS5wdHIoKSk7CisgICAgfSk7Cit9CisgICAgCisvLyBUaGlz
IGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgordm9pZCBzdGF0aWMgbm90aWZ5UGFn
ZXMoY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0
b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKK3sKKyAg
ICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiB0ZWxlbWV0cnkpPiBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNv
bnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIHRvcDNT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIDIsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnNHZXR0ZXIpOworICAgIAorICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdl
Qm9keTsKKyAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJl
c291cmNlcyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5z
aXplKCkpKTsKKyAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZSh0b3Rh
bE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgIG1l
c3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zIiksIEFQSTo6VUludDY0OjpjcmVhdGUodG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMpKTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW21lc3NhZ2VCb2R5ID0g
V1RGTW92ZShtZXNzYWdlQm9keSldIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQ
YWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKG1l
c3NhZ2VCb2R5KS5wdHIoKSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcyA9IHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5zb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSgpOworICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6
ZSgpIDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkgeworICAgICAgICBu
b3RpZnlQYWdlc1RoYXROb3RoaW5nV2FzRG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsKKyAgICBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwcmV2
YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb247CisgICAgcHJldmFsZW50UmVz
b3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChhdXRvJiBwcmV2
YWxlbnRSZXNvdXJjZSA6IHNvcnRlZFByZXZhbGVudFJlc291cmNlcykgeworICAgICAgICBpZiAo
cHJldmFsZW50UmVzb3VyY2UuaGFzSGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJl
dmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnVuY2hlY2tlZEFwcGVuZChw
cmV2YWxlbnRSZXNvdXJjZS5kYXlzU2luY2VVc2VySW50ZXJhY3Rpb24pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLnVuY2hlY2tlZEFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQorICAgIAorICAg
IGF1dG8gd2ViUGFnZVByb3h5ID0gbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCk7CisgICAgaWYg
KCF3ZWJQYWdlUHJveHkpIHsKKyAgICAgICAgbm90aWZ5UGFnZXNUaGF0Tm90aGluZ1dhc0RvbmUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoInRvdGFsTnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXMiKSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgMCwg
U2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2Fn
ZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2Vy
SW50ZXJhY3Rpb24uc2l6ZSgpLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAKKyAgICBpZiAo
cHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDApCisg
ICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFT
Q0lJTGl0ZXJhbCgidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uIiksIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRl
cmFjdGlvblswXSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgaWYgKHByZXZhbGVudFJlc291
cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAxKQorICAgICAgICB3ZWJQYWdl
UHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoIm1l
ZGlhblByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24iKSwgbWVkaWFuKHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFj
dGlvbiksIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIHN1Ym1pdFRvcExpc3RzKHNv
cnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgKndlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKG5vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKQorICAgICAgICBub3RpZnlQYWdlcyhzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24sIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkp
OworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIGFsd2F5cykKK3sKKyAgICBu
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGFsd2F5czsKK30KKyAgICAKK30K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworICAgIAorbmFtZXNwYWNlIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkg
eworICAgIAordm9pZCBjYWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJik7Cit2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdh
c0NhcHR1cmVkKGJvb2wpOworICAgIAorfTsKKyAgICAKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlCiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZp
cmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbih0b1dURlN0cmluZyho
b3N0TmFtZSksIHZhbHVlKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorCiB2b2lkIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6
OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpAQCAtMTI2
LDYgKzEzMSwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTCiAg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIH0KIAordm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2Fw
dHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworfQorCiB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudFN0b3JlKCkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw4ICs0OSwxMCBAQCBleHRlcm4gIkMiIHsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXJGb3JPbmVEb21haW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIFdL
X0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5
SGFuZGxlcigpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUp
OwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVl
KTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2lu
Y2VIb3Vycyh1bnNpZ25lZCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIx
ODgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAKIAkJNjUwMUJEMUExMkYxMjQz
NDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1
bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8q
IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJCTY1Qjg2
RjFFMTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhB
IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi87IH07CisJCTZCODIxREREMUVFRjA1REQwMEQ3QUY0
QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCODIxRERCMUVFRjA1REQwMEQ3QUY0
QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLzsgfTsKIAkJNkJC
QkFEMzgxRUMzRTU3ODAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
QkJCQUQzNzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJDb2NvYS5tbSAqLzsgfTsKIAkJNkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuY3BwICovOyB9OwpAQCAtMzQ3OCw2ICszNDgwLDggQEAKIAkJNjU0NkE4
MkExMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VS
ZXNvdXJjZUxvYWRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZG
MTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxl
SW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlSW5z
cGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCODIxRERBMUVFRjA1REQw
MEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZCQkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTY4NjAsNiArNjg2NCw4IEBACiAJCQkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCiAJCQkJN0E5Q0Q4QzExQzc3OTg0
OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCTdB
OUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
bWVzc2FnZXMuaW4gKi8sCisJCQkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLywKKwkJCQk2QjgyMUREQjFFRUYwNUREMDBE
N0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8sCiAJCQkJ
NTFEMTI0MjQxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuY3BwICovLAog
CQkJCTUxRDEyNDI1MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmggKi8s
CiAJCQkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3BwICov
LApAQCAtODI0Niw2ICs4MjUyLDcgQEAKIAkJCQkyREFCQTc3NjFBODJCNDIxMDBFRjBGMUEgLyog
QVBJSGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCNDYxQkM4ODI5MzAw
QUJBNUMyIC8qIEFQSUhpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NzUxMjMx
MURGMERFRTIwMDhBMzUxQyAvKiBBUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjkwNzlFMThGMzQw
QTIwMDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTM3NjkwNzlBMThGMzFDQjIwMDFERkYwNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VV
SUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNEQyMDcxQTQ2Nzc2MTAwQzdGMTUyIC8q
IEFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTk4Nzcs
NiArOTg4NCw3IEBACiAJCQkJNTE1RTc3MkIxODQwMDhCOTAwMDcyMDNGIC8qIERhdGFiYXNlUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTE1QzcxNDE5
MEY4OUU0MDBFQ0M1MTYgLyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFFMzUyMDIxODBGNUQxRTAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzc01hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTZCODIxREREMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzYwMTgw
RTAzMUQwMDM5QTE0OSAvKiBEYXRhYmFzZVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE3REQ1QkUxODBEQTdEMzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vz
c1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzY5MTgwRTA5QjgwMDM5QTE0OSAv
KiBEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxODgwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMzIEBACisyMDE3LTA2LTI2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHRocmVlIG5ldyB0ZXN0UnVubmVyIGZ1bmN0aW9u
czoKKyAgICAgICAgLSBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKCkK
KyAgICAgICAgLSBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQorICAgICAgICAtIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCgpCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIp
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25v
dXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxNy0wNi0yNiAgSm9hbm1hcmllIERp
Z2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0FUS10gQWRkIHN1cHBvcnQgZm9y
IGFyaWEtZGV0YWlscyBhbmQgYXJpYS1lcnJvcm1lc3NhZ2UKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM2
LDYgKzgzNiw4IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAg
ICBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKTsKIAogICAgIG1fb3BlblBhbmVsRmlsZVVSTHMgPSBudWxscHRyOworICAgIAor
ICAgIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKICAgICBXS1BhZ2VMb2Fk
VVJMKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgYmxhbmtVUkwoKSk7CiAgICAgcnVuVW50aWwobV9k
b25lUmVzZXR0aW5nLCBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zaG9ydFRpbWVvdXQoKSk7CkBAIC0y
Mjc0LDYgKzIyNzYsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91
bAogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9u
Q29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oaG9zdE5hbWUsIHZhbHVlKTsKIH0KIAordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30K
KyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
dmFsdWUpOwpAQCAtMjI4NCw2ICsyMjkxLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0
YXRpc3RpY3NTaG91bGQKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQog
Cit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1l
dHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOwor
fQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0
d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CiAgICAgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoc2Vjb25kcyk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAyMTg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw4ICsxNjQsMTAgQEAgcHVibGljOgogICAg
IHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQg
c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQg
c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihX
S1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmly
ZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJv
b2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhl
cmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2MSw2ICsxMDYxLDEx
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpIHsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NGaXJlVGVsZW1l
dHJ5SGFuZGxlcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CiAgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKQEAgLTEwNjgsNiArMTA3MywxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkIikpIHsKKyAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7CiAgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSwxNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZVRvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlGaW5pc2hlZCIpKSB7CisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzID0g
KHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiKSkpKTsKKyAgICAgICAg
dW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVu
c2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
IikpKSk7CisgICAgICAgIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSkp
KTsKKyAgICAgICAgCisgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB0b3RhbFByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZXJyb3JNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXJyb3IiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2Fn
ZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7
CiAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQo
KSwgZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxODgw
OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHsKICAgICBEaWRSZW1v
dmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJl
Y29yZHNDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFj
a0lELAorICAgIFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELAogICAgIERpZFJl
bW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENh
bGxiYWNrSUQgPSAxMDAKIH07CkBAIC0xMzg5LDYgKzEzOTAsMzAgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRGlkU2NhbkRhdGFSZQogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3Rh
dGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5u
ZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBj
YWxsYmFjaykKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVu
VGVsZW1ldHJ5Q2FsbGJhY2tJRCwgY2FsbGJhY2spOworfQorICAgIAordm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxl
bnRSZXNvdXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCit7Cisg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoInsgXCJ0b3RhbFByZXZhbGVudFJlc291cmNlc1wiIDogIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvdGFsUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmROdW1iZXIodG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgXCJ0b3AzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luc1wiIDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodG9wM1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIH0iKTsKKyAgICAKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJv
bUpTT05TdHJpbmcoY29udGV4dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAKKyAgICBjYWxsVGVzdFJ1
bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVz
dWx0KTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyIikpOwpAQCAtMTQyNiw2ICsxNDUxLDEyIEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXIKICAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSk7CisgICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIpOworfQorICAgIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7CkBAIC0xNDQwLDYgKzE0NzEs
MTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhcwogICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7CiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKIH0KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShB
ZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJl
ZCh2YWx1ZSk7Cit9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1l
QmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAko
cmV2aXNpb24gMjE4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0OSwxMSArMzQ5LDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKICAgICB2b2lkIGluc3RhbGxTdGF0
aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsK
ICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2soSlNW
YWx1ZVJlZiBjYWxsYmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgc3RhdGlzdGljc0Rp
ZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soKTsKICAgICB2b2lkIHN0YXRpc3RpY3NEaWRTY2Fu
RGF0YVJlY29yZHNDYWxsYmFjaygpOworICAgIHZvaWQgc3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrKHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3Rh
bFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUs
IGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNT
dHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNjcsNiArMzcw
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVDb29raWVQYXJ0
aXRpb25GcmVlKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wp
OworICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2Vl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFu
ZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVy
LmlkbAkocmV2aXNpb24gMjE4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYg
KzI1Myw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICAvLyBSZXNvdXJjZSBMb2FkIFN0
YXRpc3RpY3MKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHND
YWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRT
Y2FuRGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgaW5zdGFs
bFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwg
Ym9vbGVhbiB2YWx1ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShET01TdHJpbmcgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjY3LDgg
KzI2OCwxMCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKERPTVN0cmluZyBob3N0TmFtZSwg
Ym9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIo
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFsdWUpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJv
b2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4
ODA5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTctMDYtMjYgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2Vu
ZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0
aW9uczoKKyAgICAgICAgICAgIEVuYWJsZWQgaGVyZSBzaW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIGlzIFdLMi1vbmx5LgorCiAyMDE3LTA2LTI2ICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbQVRLXSBBZGQgc3VwcG9ydCBmb3IgYXJpYS1kZXRhaWxz
IGFuZCBhcmlhLWVycm9ybWVzc2FnZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMyBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBk
aWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFRlbGVtZXRyeSBHZW5lcmF0aW9uCittYWluIGZyYW1l
IC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVP
bmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQor
VGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRl
ZCBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIEhvc3Rz
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4KK1BBU1MgdGVzdFJlc3VsdC50b3Rh
bFByZXZhbGVudFJlc291cmNlcyBpcyAwCitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIGlzIDAKK1BBU1MgdGVzdFJlc3VsdC50b3AzU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyBpcyAwCitQQVNTIEhvc3RzIGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50IHJlc291cmNlcy4KK1BBU1MgdGVzdFJlc3VsdC50b3RhbFByZXZhbGVudFJlc291
cmNlcyBpcyA0CitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIGlzIDEKK1BBU1MgdGVzdFJlc3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucyBpcyA0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxl
bWV0cnktZ2VuZXJhdGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9u
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRl
c3QgZm9yIFRlbGVtZXRyeSBHZW5lcmF0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRlbGVtZXRyeSBmb3IgcHJldmFs
ZW50IHJlc291cmNlcyBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4iKTsKKworICAgIGNvbnN0IHRv
cEZyYW1lVXJsMSA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVtcCI7CisgICAgY29uc3QgdG9w
RnJhbWVVcmwyID0gImh0dHA6Ly8xMjcuMC4wLjI6ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BG
cmFtZVVybDMgPSAiaHR0cDovLzEyNy4wLjAuMzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZy
YW1lVXJsNCA9ICJodHRwOi8vMTI3LjAuMC40OjgwMDAvdGVtcCI7CisgICAgY29uc3QgcHJldmFs
ZW50UmVzb3VyY2VVcmwxID0gImh0dHA6Ly8xMjcuMC4xLjE6ODAwMC90ZW1wIjsKKyAgICBjb25z
dCBwcmV2YWxlbnRSZXNvdXJjZVVybDIgPSAiaHR0cDovLzEyNy4wLjEuMjo4MDAwL3RlbXAiOwor
ICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMyA9ICJodHRwOi8vMTI3LjAuMS4zOjgwMDAv
dGVtcCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmw0ID0gImh0dHA6Ly8xMjcuMC4x
LjQ6ODAwMC90ZW1wIjsKKworICAgIGZ1bmN0aW9uIGNoZWNrSW5zdWZmaWNpZW50Q2xhc3NpZmlj
YXRpb25BbmRDb250aW51ZSgpIHsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKHByZXZhbGVudFJlc291cmNlVXJsMSkpIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkhvc3QgMSBkaWQgbm90IGdldCBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCBy
ZXNvdXJjZS4iKTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9IGVsc2Ug
aWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHByZXZhbGVudFJl
c291cmNlVXJsMikpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgMiBkaWQgbm90IGdl
dCBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKyAgICAgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiSG9z
dHMgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2VzLiIpOworICAgICAgICAgICAgcnVu
VGVsZW1ldHJ5QW5kQ29udGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoZWNrU3VmZmljaWVudENsYXNzaWZpY2F0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlm
ICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNv
dXJjZVVybDEpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQg
Y2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJIb3N0IDIgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3Vy
Y2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
dGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJj
ZVVybDMpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDMgZGlkIG5vdCBnZXQgY2xh
c3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDQpKSB7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJIb3N0IDQgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2Uu
Iik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRlc3RQYXNzZWQoIkhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNl
cy4iKTsKKyAgICAgICAgICAgIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNl
VXJsKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZh
bGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmws
IHRvcEZyYW1lVXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0KTsK
KworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRS
ZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BG
cmFtZVVybDMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50
UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwg
dG9wRnJhbWVVcmwzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNldFVwSW5zdWZmaWNpZW50U3RhdGlzdGljc0FuZENv
bnRpbnVlKCkgeworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJs
MSk7CisgICAgICAgIG1ha2VVcmxQcmV2YWxlbnQocHJldmFsZW50UmVzb3VyY2VVcmwyKTsKKwor
ICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2Fs
bGJhY2soY2hlY2tJbnN1ZmZpY2llbnRDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKGNo
ZWNrSW5zdWZmaWNpZW50VGVsZW1ldHJ5KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNz
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0
VXBTdWZmaWNpZW50U3RhdGlzdGljc0FuZENvbnRpbnVlKCkgeworICAgICAgICBtYWtlVXJsUHJl
dmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsMyk7CisgICAgICAgIG1ha2VVcmxQcmV2YWxlbnQo
cHJldmFsZW50UmVzb3VyY2VVcmw0KTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NIYXNIYWRVc2VySW50ZXJhY3Rpb24ocHJldmFsZW50UmVzb3VyY2VVcmw0LCB0cnVlKTsKKwor
ICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2Fs
bGJhY2soY2hlY2tTdWZmaWNpZW50Q2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAgICAg
IHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhjaGVj
a1N1ZmZpY2llbnRUZWxlbWV0cnkpOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZWxl
bWV0cnlBbmRDb250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZVRl
bGVtZXRyeUhhbmRsZXIoKTsKKyAgICB9CisKKyAgICB2YXIgdGVzdFJlc3VsdDsKKyAgICBmdW5j
dGlvbiBjaGVja0luc3VmZmljaWVudFRlbGVtZXRyeShyZXN1bHQpIHsKKyAgICAgICAgdGVzdFJl
c3VsdCA9IHJlc3VsdDsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2YWxl
bnRSZXNvdXJjZXMiLCAiMCIpOworICAgICAgICBzaG91bGRCZSgidGVzdFJlc3VsdC50b3RhbFBy
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiMCIpOworICAgICAgICBzaG91
bGRCZSgidGVzdFJlc3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsICIwIik7
CisgICAgICAgIHNldFVwU3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250aW51ZSgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGNoZWNrU3VmZmljaWVudFRlbGVtZXRyeShyZXN1bHQpIHsKKyAgICAg
ICAgdGVzdFJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90
YWxQcmV2YWxlbnRSZXNvdXJjZXMiLCAiNCIpOworICAgICAgICBzaG91bGRCZSgidGVzdFJlc3Vs
dC50b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLCAiMSIpOworICAg
ICAgICBzaG91bGRCZSgidGVzdFJlc3VsdC50b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyIsICI0Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgICAgICBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1ZSk7CisgICAgICAgIHNldFVwSW5zdWZmaWNpZW50
U3RhdGlzdGljc0FuZENvbnRpbnVlKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxODgwOSkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsNiAr
NzA1LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xhc3NpZnktYXMtcHJldmFsZW50
LWJhc2VkLW9uLXN1YnJlc291cmNlLXVuaXF1ZS1yZWRpcmVjdHMtdG8uaHRtbCBbIFBhc3MgXQog
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5
LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIg
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcu
aHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIF0KIAogIyMj
IEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhw
ZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313864</attachid>
            <date>2017-06-26 13:01:28 -0700</date>
            <delta_ts>2017-06-26 20:36:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170626130553.patch</filename>
            <type>text/plain</type>
            <size>73315</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTI2ICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbQVRLXSBBZGQgc3VwcG9ydCBmb3IgYXJpYS1kZXRhaWxzIGFuZCBhcmlhLWVycm9ybWVz
c2FnZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQsNiArNTg0LDEzIEBAIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAgICB9KTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBj
YWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBtX3N0b3JlLT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogU3RyaW5nIFJl
c291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJsKQogewogICAg
IHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxODgwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRv
bWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBj
bGVhckZpcnN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDExIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAgICBtX2dyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9maXJlVGVsZW1ldHJ5SGFu
ZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIpCisgICAgICAgIG1f
ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRQYXJ0aXRpb25Db29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3Rp
YykKIHsKICAgICByZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UKQEAgLTM2MSw2
ICszNzMsNDAgQEAgVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0bwogCiAg
ICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1ZlY3RvcjxQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+IHNvcnRlZDsKKyAgICAKKyAgICBzb3J0ZWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGlj
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA8
PSAwID8gMCA6CisgICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRpbWUoKSAtIHN0
YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJEYXkpOworICAg
ICAgICAgICAgc29ydGVkLnVuY2hlY2tlZEFwcGVuZChQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSh7CisgICAgICAgICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAg
ICAgICAgICAgICBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAg
IGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlz
dGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAg
ICAgIHN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAg
ICAgICAgfSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChzb3J0ZWQuc2l6ZSgp
IDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkgeworICAgICAgICBzb3J0
ZWQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHNvcnRlZDsKKyAgICB9CisgICAgCisgICAgc3Rk
Ojpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJl
c291cmNlVGVsZW1ldHJ5JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikg
eworICAgICAgICByZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvID4KKyAgICAgICAgYi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
OworICAgIH0pOworICAgIAorICAgIHJldHVybiBzb3J0ZWQ7Cit9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE3IEBA
IGNsYXNzIEtleWVkRGVjb2RlcjsKIGNsYXNzIEtleWVkRW5jb2RlcjsKIGNsYXNzIFVSTDsKIAor
c3RhdGljIGNvbnN0IGF1dG8gbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSA9
IDM7CisgICAgCitzdHJ1Y3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgeworICAgIHVuc2ln
bmVkIG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgeyAwIH07CisgICAgYm9vbCBoYXNI
YWRVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbiB7IDAgfTsKKyAgICB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zIHsgMCB9OworICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMg
eyAwIH07CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB7IDAgfTsK
K307CisgICAgCiBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gewpAQCAtNjQsOCArNzUsMTAgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpPiYmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdyaXRlUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2so
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0R3Jh
bmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAg
dm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2
b2lkIHNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKGRvdWJsZSBzZWNvbmRzKTsKICAg
ICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNl
Y29uZHMpOwpAQCAtNzcsNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZVRlbGVtZXRyeSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3Rh
dGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRnJl
c2hTdGFydFdpdGhFbXB0eU9yTm9TdG9yZShIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc1RvR3JhbmRmYXRoZXIpOwpAQCAtOTUsNiArMTA5LDcgQEAgcHJpdmF0
ZToKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGJvb2wgY2xlYXJGaXJzdCk+IG1fc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvckRvbWFpbnNIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3dyaXRlUGVy
c2lzdGVudFN0b3JlSGFuZGxlcjsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9ncmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGFIYW5kbGVyOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyOwogCiAgICAgZG91YmxlIG1fZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCB7IDAgfTsKICAgICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2Vy
ZVJlbW92ZWQgeyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Nyw1ICs3Njcs
MTAgQEAgU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6YmFja2dyb3VuZAogICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIm92ZXI3MCIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCkKK3sKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Iik7Cit9CisgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9E
aWFnbm9zdGljTG9nZ2luZ0tleXMuaAkocmV2aXNpb24gMjE4ODA5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYg
KzE3MSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIG1lbW9y
eVVzYWdlVG9EaWFnbm9zdGljTG9nZ2luZ0tleSh1aW50NjRfdCBtZW1vcnlVc2FnZSk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBmb3JlZ3JvdW5kQ1BVVXNhZ2VUb0RpYWdub3N0
aWNMb2dnaW5nS2V5KGRvdWJsZSBjcHVVc2FnZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBiYWNrZ3JvdW5kQ1BVVXNhZ2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KGRvdWJsZSBj
cHVVc2FnZSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MSBAQAorMjAxNy0wNi0yNiAgSm9o
biBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2Fk
IFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYw
OTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtl
OgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICAgICBB
ZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5j
cHA6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRy
eUhhbmRsZXIpOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgICAgIFRlc3QgaW5m
cmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGlj
c1RlbGVtZXRyeUZpbmlzaGVkKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToK
KyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KToKKyAgICAgICAgICAgIENvbmZpZ3VyZXMgYSB0aW1lciBmb3IgdGVsZW1ldHJ5IGNhcHR1cmUu
IEZpcmVzIDUgc2Vjb25kcyBhZnRlciBsYXVuY2gKKyAgICAgICAgICAgIGFuZCB0aGVuIGV2ZXJ5
IDI0IGhvdXJzLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAg
ICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFt
ZWQgbm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNz
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQg
bm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNo
YXJlZFJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAgICAgIFZhcmlhYmxlIHJlbmFtZWQg
bm90aWZ5UGFnZXMgLT4gbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhl
ckV4aXN0aW5nV2Vic2l0ZURhdGEpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3Rp
ZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVy
RmlyZWQpOgorICAgICAgICAgICAgIENhbGxzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpu
dW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojpt
ZWRpYW4pOgorICAgICAgICAoV2ViS2l0Ojpub25FcGhlbWVyYWxXZWJQYWdlUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpzdWJtaXRUb3BMaXN0KToKKyAgICAgICAgKFdlYktpdDo6c3VibWl0VG9w
TGlzdHMpOgorICAgICAgICAoV2ViS2l0Ojpub3RpZnlQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNl
dE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTctMDYtMjYgIEtvbnN0
YW50aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IGFkZCBtaXNzaW5nIGhlYWRlciBpY25jbHVkZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUwogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAog
ICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBV
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMTg4MDkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYg
KzE2Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9XZWJD
b250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5jcHAKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHJldmlzaW9uIDIxODgw
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsNiArMTI3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0
YWlsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDEyIEBAIHZvaWQg
V2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGkKICAgICAgICAgcGFnZS52YWx1ZS0+
cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKCJXZWJzaXRlRGF0YVNjYW5Gb3JUb3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWluc0ZpbmlzaGVkIiwgbnVsbHB0cik7CiB9CiAgICAgCit2b2lkIFdl
YlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6
Ok9iamVjdCogbWVzc2FnZUJvZHkpCit7CisgICAgZm9yIChhdXRvJiBwYWdlIDogZ2xvYmFsUGFn
ZU1hcCgpKQorICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCIsIG1lc3NhZ2VCb2R5KTsK
K30KKyAgICAKIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlV2ViUGFn
ZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJiBw
YWdlQ29uZmlndXJhdGlvbikKIHsKICAgICB1aW50NjRfdCBwYWdlSUQgPSBnZW5lcmF0ZVBhZ2VJ
RCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAko
cmV2aXNpb24gMjE4ODA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBW
ZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zLCBib29sIHNob3Vs
ZE5vdGlmeVBhZ2VzLCBGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8U3RyaW5nPiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMgdm9pZCB0b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluc1dpdGhXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIGJvb2wgc2hvdWxkTm90aWZ5UGFnZSwgRnVuY3Rpb248dm9pZChIYXNoU2V0PFN0cmluZz4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHN0YXRpYyB2b2lkIG5vdGlmeVBhZ2VTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzZWQoKTsKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlQ
YWdlU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9keSk7
CiAKICAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAgICAgdm9pZCBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMjE4ODA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDExICsxMjQsMjEg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZgogICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoe2hvc3ROYW1lfSwgeyB9LCBmYWxzZSk7CiB9CiAKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCkK
K3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5m
aXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CiB9CiAKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUp
OworfQorICAgIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkK
IHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKQEAgLTE1MSw2ICsxNjEs
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyCiAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0TWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCg2MCk7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKDM2MDApOwog
ICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChmYWxzZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoZmFsc2Up
OwogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodHJ1ZSk7CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuY2xlYXJJbk1lbW9yeVN0b3JlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkocmV2aXNpb24gMjE4ODA5KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHN0YXRpYyB2b2lkIGZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHN0YXRpYyB2b2lkIGZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihjb25zdCBTdHJpbmcmIGhvc3ROYW1l
LCBib29sIHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwog
ICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2Fw
dHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSk7CiAgICAgc3RhdGljIHZv
aWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHN0YXRpYyB2b2lkIGNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxODgwOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlT
ZW1hcGhvcmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00Nyw3ICs0OCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlc1RvUmVtb3ZlOwotc3Rh
dGljIGF1dG8gbm90aWZ5UGFnZXMgPSBmYWxzZTsKK3N0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBmYWxzZTsKIHN0YXRpYyBhdXRvIHNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdHJ1ZTsKIAogUmVmPFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQpA
QCAtNTksNyArNjAsMTEgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNv
dQogICAgIDogbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjcmVhdGUoKSkKICAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVl
IikpCiAgICAgLCBtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aChyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KQorICAgICwgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZp
cmVkKQorICAgICwgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhp
cywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkK
IHsKKyAgICBtX3RlbGVtZXRyeU9uZVNob3RUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKKyAgICBt
X3RlbGVtZXRyeVJlcGVhdGVkVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7CiB9CiAKIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6fldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSgpCkBAIC02OCw3ICs3Myw3IEBAIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6fldl
YlJlc28KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCBhbHdheXMpCiB7Ci0gICAgbm90aWZ5
UGFnZXMgPSBhbHdheXM7CisgICAgbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCA9IGFsd2F5czsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFs
dWUpCkBAIC0xMTksNyArMTI0LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlbQogCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRl
ZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5n
Pj46OmNvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpk
ZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJz
aXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92ZSwgV1RGTW92ZShwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnMpLCBub3RpZnlQYWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdl
YnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnRE
YXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8v
IEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhl
IHdvcmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBDcm9z
c1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vi
c2l0ZURhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5j
b3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHRvcERvbWFp
bnMpOwpAQCAtMTQwLDcgKzE0NSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcm8KICAgICAgICAgfQogICAgICAgICByZW1vdmVEYXRhUmVjb3JkcygpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG5vdGlmeVBhZ2VzKSB7CisgICAgICAgIGlmIChub3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW10gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5
Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CiAgICAgICAg
ICAgICB9KTsKQEAgLTE5Myw2ICsxOTgsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlZwogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5zZXRHcmFu
ZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSgpIHsKICAgICAgICAgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKCk7CiAgICAgfSk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnNldEZp
cmVUZWxlbWV0cnlDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSgpIHsKKyAgICAgICAgLy8gVGhpcyBjYW5jZWxzIHRoZSBvbmUgc2hvdCB0aW1lciBhbmQgaXMg
b25seSBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgICAgbV90ZWxlbWV0cnlP
bmVTaG90VGltZXIuc3RvcCgpOworICAgICAgICBtX3RlbGVtZXRyeU9uZVNob3RUaW1lci5zdGFy
dE9uZVNob3QoMTAwX21zKTsKKyAgICB9KTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRl
ZCgpOwogI2VuZGlmCkBAIC0yMTUsNyArMjI1LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmdyYQogICAgIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQg
dG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWluc1dpdGhXZWJzaXRlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgbm90aWZ5UGFnZXMsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKEhhc2hTZXQ8U3RyaW5n
PiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxl
IHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1dpdGhXZWJzaXRlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgbm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNX
aXRoV2Vic2l0ZURhdGEpIG11dGFibGUgewogICAgICAgICAgICAgLy8gQnV0IGFsd2F5cyB0b3Vj
aCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzdG9yZSBvbiB0aGUgd29ya2VyIHF1ZXVlCiAg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0b3BEb21haW5zID0gQ3Jvc3NUaHJlYWRDb3BpZXI8SGFz
aFNldDxTdHJpbmc+Pjo6Y29weSh0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJz
aXRlRGF0YSldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNv
cmVTdG9yZSgpLmhhbmRsZUZyZXNoU3RhcnRXaXRoRW1wdHlPck5vU3RvcmUoV1RGTW92ZSh0b3BE
b21haW5zKSk7CkBAIC0zMzAsNCArMzQwLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29k
ZXI+IFdlYlJlc291cmMKICAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEoKSksIHJhd0RhdGEtPnNpemUo
KSk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlU
aW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAg
IG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soY29yZVN0b3JlKCku
c3RhdGlzdGljc0xvY2soKSk7CisgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb3JlU3RvcmUoKSk7CisgICAgfSk7Cit9CisgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9u
IDIxODgwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKICNpbmNsdWRl
ICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFSZWNvcmQuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC05NSw2ICs5Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3
cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3QgU3RyaW5nJiBs
YWJlbCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rlcj4g
Y3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogICAgIHZv
aWQgcGxhdGZvcm1FeGNsdWRlRnJvbUJhY2t1cCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdGVs
ZW1ldHJ5VGltZXJGaXJlZCgpOwogCiAgICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAjaWYgSEFWRShDT1JF
X1BSRURJQ1RJT04pCkBAIC0xMDUsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBSZWY8V1RGOjpX
b3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0YXRpc3RpY3NTdG9y
YWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBmYWxz
ZSB9OworICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4g
bV90ZWxlbWV0cnlPbmVTaG90VGltZXI7CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeVJlcGVhdGVkVGltZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KyAgICAKK3N0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0g
ZmFsc2U7CisgICAgCitzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHJlc291
cmNlcywgc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQoreworICAgIGlmIChyZXNvdXJjZXMuaXNF
bXB0eSgpIHx8IHJlc291cmNlcy5zaXplKCkgPCBiZWdpbiArIDEgfHwgcmVzb3VyY2VzLnNpemUo
KSA8IGVuZCArIDEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAg
ICAgaWYgKHJlc291cmNlc1tpXS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICAr
K3Jlc3VsdDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK3N0YXRp
YyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdikKK3sKKyAgICBpZiAo
di5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh2LnNpemUoKSA9PSAxKQor
ICAgICAgICByZXR1cm4gdlswXTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKKyAg
ICBhdXRvIG1pZGRsZSA9IHNpemUgLyAyOworICAgIGlmIChzaXplICUgMikKKyAgICAgICAgcmV0
dXJuIHZbbWlkZGxlXTsKKyAgICByZXR1cm4gKHZbbWlkZGxlIC0gMV0gKyB2W21pZGRsZV0pIC8g
MjsKK30KKyAgICAKK3N0YXRpYyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5PiYgdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgY29u
c3QgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSYgdGVsZW1ldHJ5KT4mIHN0YXRpc3RpY0dldHRlcikKK3sKKyAgICBpZiAodi5pc0VtcHR5KCkg
fHwgdi5zaXplKCkgPCBiZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7CisgICAgcGFydC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGVuZCAtIGJlZ2luICsgMSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmVnaW47IGkgPD0gZW5kOyArK2kpCisgICAgICAgIHBhcnQuYXBwZW5kKHN0YXRpc3RpY0dl
dHRlcih2W2ldKSk7CisgICAgCisgICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKK30KKyAgICAKK3N0
YXRpYyBXZWJQYWdlUHJveHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCit7CisgICAgYXV0
byBwcm9jZXNzUG9vbHMgPSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7CisgICAg
aWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHNbMF07CisgICAgaWYgKCFwcm9j
ZXNzUG9vbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgZm9yIChhdXRvJiB3
ZWJQcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CisgICAgICAgIGZvciAoYXV0
byYgcGFnZSA6IHdlYlByb2Nlc3MtPnBhZ2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdlLT5z
ZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0KHVuc2lnbmVkIG51bWJlck9m
UmVzb3VyY2VzRnJvbVRoZVRvcCwgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCBXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBXVEY6OkZ1bmN0aW9u
PHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJl
c291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFBy
ZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7
CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0
dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAg
IHJldHVybiB0LnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgfTsKKyAgICBXVEY6
OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxl
bWV0cnkpPiBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyID0gW10gKGNvbnN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0KSB7CisgICAgICAgIHJldHVybiB0Lm51bWJl
ck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQ7CisgICAgfTsKKyAgICAKKyAgICB1bnNpZ25lZCB0
b3BQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gbnVtYmVyT2ZSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgMCwgbnVtYmVy
T2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSk7CisgICAgdW5zaWduZWQgdG9wU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAt
IDEsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVk
IHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9t
VGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0dldHRlcik7CisgICAgdW5z
aWduZWQgdG9wTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IG1lZGlhbihzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291
cmNlc0Zyb21UaGVUb3AgLSAxLCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVy
KTsKKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIHByZWFtYmxlQnVpbGRlcjsKKyAgICBwcmVhbWJs
ZUJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgidG9wIik7CisgICAgcHJlYW1ibGVCdWlsZGVyLmFwcGVu
ZE51bWJlcihudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3ApOworICAgIFN0cmluZyBkZXNjcmlw
dGlvblByZWFtYmxlID0gcHJlYW1ibGVCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgd2Vi
UGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblBy
ZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uIiksCisgICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24s
IDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpLAorICAgICAgICB0b3BTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyBBU0NJ
SUxpdGVyYWwoIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwKKyAgICAgICAgdG9w
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7Cisg
ICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlw
dGlvblByZWFtYmxlICsgQVNDSUlMaXRlcmFsKCJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IiksCisgICAgICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIDAsIFNob3VsZFNh
bXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1
ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlL
ZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArIEFTQ0lJTGl0ZXJhbCgiTnVtYmVyT2ZUaW1lc0Rh
dGFSZWNvcmRzUmVtb3ZlZCIpLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNS
ZW1vdmVkLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1p
dFRvcExpc3RzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2Vi
UGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCit7CisgICAgc3VibWl0VG9wTGlzdCgxLCBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJu
OworICAgIHN1Ym1pdFRvcExpc3QoMywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOwor
ICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLnNpemUoKSA8IDEwKQorICAgICAgICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgxMCwg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDUwKQorICAgICAg
ICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCg1MCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
LCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdl
UHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLnNpemUoKSA8IDEwMCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRv
cExpc3QoMTAwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Cit9CisgICAgCisvLyBU
aGlzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgordm9pZCBzdGF0aWMgbm90aWZ5
UGFnZXNUaGF0Tm90aGluZ1dhc0RvbmUoKQoreworICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlw
ZSBtZXNzYWdlQm9keTsKKyAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFBy
ZXZhbGVudFJlc291cmNlcyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKDApKTsKKyAgICBtZXNzYWdl
Qm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24iKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZSgwKSk7CisgICAgbWVzc2FnZUJvZHkuc2V0
KEFTQ0lJTGl0ZXJhbCgiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiKSwgQVBJOjpV
SW50NjQ6OmNyZWF0ZSgwKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtt
ZXNzYWdlQm9keSA9IFdURk1vdmUobWVzc2FnZUJvZHkpXSB7CisgICAgICAgIFdlYlByb2Nlc3NQ
cm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25h
cnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAgIAorLy8gVGhp
cyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBh
Z2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZh
bGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQg
dG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7Cisg
ICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChj
b25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAgYXV0byB0b3Az
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zR2V0dGVyKTsKKyAgICAKKyAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWVzc2Fn
ZUJvZHk7CisgICAgbWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXMiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMu
c2l6ZSgpKSk7CisgICAgbWVzc2FnZUJvZHkuc2V0KEFTQ0lJTGl0ZXJhbCgiVG90YWxQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiksIEFQSTo6VUludDY0OjpjcmVhdGUodG90
YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pKTsKKyAgICBt
ZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2lucyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFttZXNzYWdlQm9keSA9
IFdURk1vdmUobWVzc2FnZUJvZHkpXSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5
UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZSht
ZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuc29ydGVkUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkoKTsKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNp
emUoKSA8IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpIHsKKyAgICAgICAg
bm90aWZ5UGFnZXNUaGF0Tm90aGluZ1dhc0RvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNv
cnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcHJl
dmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNv
cnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoYXV0byYgcHJl
dmFsZW50UmVzb3VyY2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgaWYg
KHByZXZhbGVudFJlc291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHBy
ZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQo
cHJldmFsZW50UmVzb3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAg
ICBhdXRvIHdlYlBhZ2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgIGlm
ICghd2ViUGFnZVByb3h5KSB7CisgICAgICAgIG5vdGlmeVBhZ2VzVGhhdE5vdGhpbmdXYXNEb25l
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgd2ViUGFnZVByb3h5LT5sb2dE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3RhbE51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzIiksIHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCksIDAs
IFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uLnNpemUoKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgaWYg
KHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAwKQor
ICAgICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBB
U0NJSUxpdGVyYWwoInRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbiIpLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50
ZXJhY3Rpb25bMF0sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIGlmIChwcmV2YWxlbnRSZXNv
dXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMSkKKyAgICAgICAgd2ViUGFn
ZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJt
ZWRpYW5QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uIiksIG1lZGlhbihwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24pLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAKKyAgICBzdWJtaXRUb3BMaXN0cyhz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sICp3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChub3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCkKKyAgICAgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgp
KTsKK30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCBhbHdheXMpCit7CisgICAg
bm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBhbHdheXM7Cit9CisgICAgCit9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKyAgICAKK25hbWVzcGFjZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
IHsKKyAgICAKK3ZvaWQgY2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSYpOwordm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlX
YXNDYXB0dXJlZChib29sKTsKKyAgICAKK307CisgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyRmlyZQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4odG9XVEZTdHJpbmco
aG9zdE5hbWUpLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKwogdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKQEAgLTEy
Niw2ICsxMzEsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Uwog
ICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKwog
dm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZSgpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaAkocmV2aXNpb24gMjE4ODA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksOCArNDksMTAgQEAgZXh0ZXJuICJDIiB7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigp
OwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5k
bGVyRm9yT25lRG9tYWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBX
S19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVl
KTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1
ZSk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIFdL
X0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNp
bmNlSG91cnModW5zaWduZWQpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTg4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiArMTE4OSw4IEBACiAJCTY1MDFCRDFBMTJGMTI0
MzQwMEU5RjI0OCAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tC
dW5kbGVJbnNwZWN0b3IuY3BwICovOyB9OwogCQk2NTlDNTUxRTEzMDAwNjQxMDAyNUMwQzIgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDZBODI5MTMwMDAxNjQwMDBDRUIxQyAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwICovOyB9OwogCQk2NUI4
NkYxRTEyRjExREUzMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4
QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovOyB9OworCQk2QjgyMURERDFFRUYwNUREMDBEN0FG
NEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjgyMUREQjFFRUYwNUREMDBEN0FG
NEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi87IH07CiAJCTZC
QkJBRDM4MUVDM0U1NzgwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkJCQkFEMzcxRUMzRTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyQ29jb2EubW0gKi87IH07CiAJCTZCRTk2OTlDMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTZCRTk2OTlFMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLzsgfTsKQEAgLTM0NzgsNiArMzQ4MCw4IEBACiAJCTY1NDZB
ODJBMTMwMDAxNjQwMDBDRUIxQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdl
UmVzb3VyY2VMb2FkQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2
RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRs
ZUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZUlu
c3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjgyMUREQTFFRUYwNURE
MDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QkJCQUQzNzFFQzNFNTYzMDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02ODYwLDYgKzY4NjQsOCBAQAogCQkJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAogCQkJCTdBOUNEOEMxMUM3Nzk4
NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKIAkJCQk3
QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Lm1lc3NhZ2VzLmluICovLAorCQkJCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8sCisJCQkJNkI4MjFEREIxRUVGMDVERDAw
RDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovLAogCQkJ
CTUxRDEyNDI0MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmNwcCAqLywK
IAkJCQk1MUQxMjQyNTFFNkQzQ0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5oICov
LAogCQkJCTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVUYXNrLmNwcCAq
LywKQEAgLTgyNDYsNiArODI1Miw3IEBACiAJCQkJMkRBQkE3NzYxQTgyQjQyMTAwRUYwRjFBIC8q
IEFQSUhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjQ2MUJDODgyOTMw
MEFCQTVDMiAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzc1MTIz
MTFERjBERUUyMDA4QTM1MUMgLyogQVBJSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzY5MDc5RTE4RjM0
MEEyMDAxREZGMDQgLyogQVBJSW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkzNzY5MDc5QTE4RjMxQ0IyMDAxREZGMDQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdl
VUlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTREMjA3MUE0Njc3NjEwMEM3RjE1MiAv
KiBBUElMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODc3
LDYgKzk4ODQsNyBAQAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBEYXRhYmFzZVBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExNUM3MTQx
OTBGODlFNDAwRUNDNTE2IC8qIERhdGFiYXNlUHJvY2Vzc0lPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTM1MjAyMTgwRjVEMUUwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3NNYWMubW0gaW4g
U291cmNlcyAqLywKKwkJCQk2QjgyMURERDFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2MDE4
MEUwMzFEMDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nl
c3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2OTE4MEUwOUI4MDAzOUExNDkg
LyogRGF0YWJhc2VQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTg4MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMyBAQAorMjAxNy0wNi0yNiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyB0aHJlZSBuZXcgdGVzdFJ1bm5lciBmdW5jdGlv
bnM6CisgICAgICAgIC0gaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjaygp
CisgICAgICAgIC0gc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKKyAgICAgICAgLSBz
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoKQorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVy
LmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG9QYWdlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGlj
c0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVy
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTctMDYtMjYgIEpvYW5tYXJpZSBE
aWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtBVEtdIEFkZCBzdXBwb3J0IGZv
ciBhcmlhLWRldGFpbHMgYW5kIGFyaWEtZXJyb3JtZXNzYWdlCkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjE4ODA5KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
Niw2ICs4MzYsOCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAg
ICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxzID0gbnVsbHB0cjsKKyAgICAK
KyAgICBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgV0tQYWdlTG9h
ZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCksIGJsYW5rVVJMKCkpOwogICAgIHJ1blVudGlsKG1f
ZG9uZVJlc2V0dGluZywgbV9jdXJyZW50SW52b2NhdGlvbi0+c2hvcnRUaW1lb3V0KCkpOwpAQCAt
MjI3NCw2ICsyMjc2LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlU2hv
dWwKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKGhvc3ROYW1lLCB2YWx1ZSk7CiB9CiAKK3ZvaWQg
VGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9
CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KHZhbHVlKTsKQEAgLTIyODQsNiArMjI5MSwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRT
dGF0aXN0aWNzU2hvdWxkCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIH0K
IAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsK
K30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJl
dHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQogewogICAgIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKHNlY29uZHMpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMjE4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsOCArMTY0LDEwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4o
V0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0Zp
cmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAg
ICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChi
b29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0
YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjE4ODA5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjEsNiArMTA2MSwx
MSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlciIpKSB7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRmlyZVRlbGVt
ZXRyeUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7CkBAIC0xMDY4LDYgKzEwNzMsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBU
ZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIpKSB7CisgICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOworICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwiKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMjE4ODA5KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MSw2ICsyODEsMTcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2VUbwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5RmluaXNoZWQiKSkgeworICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcyA9
ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzIikpKSk7CisgICAgICAg
IHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9ICh1
bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
biIpKSkpOworICAgICAgICB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIikp
KSk7CisgICAgICAgIAorICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NEaWRSdW5UZWxl
bWV0cnlDYWxsYmFjayh0b3RhbFByZXZhbGVudFJlc291cmNlcywgdG90YWxQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGVycm9yTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkVycm9yIikpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3Nh
Z2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikp
OwogICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0
KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTg4
MDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzYsNiArNjM2LDcgQEAgZW51bSB7CiAgICAgRGlkUmVt
b3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZE1vZGlmeURhdGFS
ZWNvcmRzQ2FsbGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJh
Y2tJRCwKKyAgICBTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJRCwKICAgICBEaWRS
ZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFja0lELAogICAgIEZpcnN0VUlTY3JpcHRD
YWxsYmFja0lEID0gMTAwCiB9OwpAQCAtMTM4OSw2ICsxMzkwLDMwIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0RpZFNjYW5EYXRhUmUKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0
YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVu
bmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCit7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1
blRlbGVtZXRyeUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIHRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQorewor
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKKyAgICAKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ7IFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNcIiA6ICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRvdGFsUHJldmFsZW50UmVzb3VyY2Vz
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgXCJ0b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25cIiA6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTnVtYmVyKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIFwidG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNcIiA6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRvcDNT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiB9Iik7CisgICAgCisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZy
b21KU09OU3RyaW5nKGNvbnRleHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgCisgICAgY2FsbFRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2tJRCwgMSwgJnJl
c3VsdCk7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0Zp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciIpKTsKQEAgLTE0MjYsNiArMTQ1MSwxMiBAQCB2b2lk
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFyCiAgICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKIH0KIAordm9pZCBU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyIikpOworICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpOwpAQCAtMTQ0MCw2ICsxNDcx
LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZENsYXMKICAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpOwogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CiB9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdh
c0NhcHR1cmVkIikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHko
QWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQodmFsdWUpOworfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGlt
ZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQogewpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJ
KHJldmlzaW9uIDIxODgwOSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksMTEgKzM0OSwxNCBAQCBwdWJs
aWM6CiAgICAgLy8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCiAgICAgdm9pZCBpbnN0YWxsU3Rh
dGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKEpT
VmFsdWVSZWYgY2FsbGJhY2spOworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxl
bWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIHN0YXRpc3RpY3NE
aWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkU2Nh
bkRhdGFSZWNvcmRzQ2FsbGJhY2soKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29s
IHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1l
LCBib29sIHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpT
U3RyaW5nUmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50
ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMzY3LDYgKzM3
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlQ29va2llUGFy
dGl0aW9uRnJlZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
KTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdl
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwJKHJldmlzaW9uIDIxODgwOSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw2
ICsyNTMsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgLy8gUmVzb3VyY2UgTG9hZCBT
dGF0aXN0aWNzCiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRz
Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlk
U2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIGluc3Rh
bGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUs
IGJvb2xlYW4gdmFsdWUpOwogICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UoRE9NU3RyaW5nIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKQEAgLTI2Nyw4
ICsyNjgsMTAgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc3RhdGlzdGljc0Zp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihET01TdHJpbmcgaG9zdE5hbWUs
IGJvb2xlYW4gdmFsdWUpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuIHZhbHVlKTsKKyAg
ICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChi
b29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVu
RGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGlj
c0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIx
ODgwOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE3LTA2LTI2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdl
bmVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgICAgICBFbmFibGVkIGhlcmUgc2luY2UgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyBpcyBXSzItb25seS4KKwogMjAxNy0wNi0yNiAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dz
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0FUS10gQWRkIHN1cHBvcnQgZm9yIGFyaWEtZGV0YWls
cyBhbmQgYXJpYS1lcnJvcm1lc3NhZ2UKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0g
ZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbgorbWFpbiBmcmFt
ZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxl
T25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUK
K1Rlc3RzIHRoYXQgdGVsZW1ldHJ5IGZvciBwcmV2YWxlbnQgcmVzb3VyY2VzIGlzIGNhbGN1bGF0
ZWQgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBIb3N0
cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuCitQQVNTIHRlc3RSZXN1bHQudG90
YWxQcmV2YWxlbnRSZXNvdXJjZXMgaXMgMAorUEFTUyB0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiBpcyAwCitQQVNTIHRlc3RSZXN1bHQudG9wM1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgaXMgMAorUEFTUyBIb3N0cyBjbGFzc2lmaWVkIGFz
IHByZXZhbGVudCByZXNvdXJjZXMuCitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNv
dXJjZXMgaXMgNAorUEFTUyB0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiBpcyAxCitQQVNTIHRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMgaXMgNAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVs
ZW1ldHJ5LWdlbmVyYXRpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlv
bi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5U
ZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii9q
cy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZh
bGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkuIik7CisKKyAgICBjb25zdCB0
b3BGcmFtZVVybDEgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHRv
cEZyYW1lVXJsMiA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCI7CisgICAgY29uc3QgdG9w
RnJhbWVVcmwzID0gImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BG
cmFtZVVybDQgPSAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZh
bGVudFJlc291cmNlVXJsMSA9ICJodHRwOi8vMTI3LjAuMS4xOjgwMDAvdGVtcCI7CisgICAgY29u
c3QgcHJldmFsZW50UmVzb3VyY2VVcmwyID0gImh0dHA6Ly8xMjcuMC4xLjI6ODAwMC90ZW1wIjsK
KyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDMgPSAiaHR0cDovLzEyNy4wLjEuMzo4MDAw
L3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsNCA9ICJodHRwOi8vMTI3LjAu
MS40OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlvbiBjaGVja0luc3VmZmljaWVudENsYXNzaWZp
Y2F0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDEpKSB7CisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQg
cmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNl
IGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRS
ZXNvdXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDIgZGlkIG5vdCBn
ZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkhv
c3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAgICAgIHJ1
blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBjaGVja1N1ZmZpY2llbnRDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVz
b3VyY2VVcmwxKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiSG9zdCAyIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291
cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAo
IXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3Vy
Y2VVcmwzKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNs
YXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmw0KSkgeworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiSG9zdCA0IGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNl
LiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0ZXN0UGFzc2VkKCJIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJj
ZXMuIik7CisgICAgICAgICAgICBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJj
ZVVybCkgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2
YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJs
LCB0b3BGcmFtZVVybDMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7
CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50
UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9w
RnJhbWVVcmwzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQpOworCisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVu
dFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmws
IHRvcEZyYW1lVXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRVcEluc3VmZmljaWVudFN0YXRpc3RpY3NBbmRD
b250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVy
bDEpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsMik7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0Nh
bGxiYWNrKGNoZWNrSW5zdWZmaWNpZW50Q2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAg
ICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhj
aGVja0luc3VmZmljaWVudFRlbGVtZXRyeSk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGlj
c0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNl
dFVwU3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFBy
ZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDMpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50
KHByZXZhbGVudFJlc291cmNlVXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHByZXZhbGVudFJlc291cmNlVXJsNCwgdHJ1ZSk7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0Nh
bGxiYWNrKGNoZWNrU3VmZmljaWVudENsYXNzaWZpY2F0aW9uQW5kQ29udGludWUpOworICAgICAg
ICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soY2hl
Y2tTdWZmaWNpZW50VGVsZW1ldHJ5KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVs
ZW1ldHJ5QW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVU
ZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1bHQ7CisgICAgZnVu
Y3Rpb24gY2hlY2tJbnN1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RS
ZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzIiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjAiKTsKKyAgICAgICAgc2hv
dWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiMCIp
OworICAgICAgICBzZXRVcFN1ZmZpY2llbnRTdGF0aXN0aWNzQW5kQ29udGludWUoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjaGVja1N1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAg
ICAgIHRlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRv
dGFsUHJldmFsZW50UmVzb3VyY2VzIiwgIjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1
bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEiKTsKKyAg
ICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMiLCAiNCIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHRydWUpOworICAgICAgICBzZXRVcEluc3VmZmljaWVu
dFN0YXRpc3RpY3NBbmRDb250aW51ZSgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTg4MDkpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzA1LDYg
KzcwNSw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWMKIGh0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsYXNzaWZ5LWFzLXByZXZhbGVu
dC1iYXNlZC1vbi1zdWJyZXNvdXJjZS11bmlxdWUtcmVkaXJlY3RzLXRvLmh0bWwgWyBQYXNzIF0K
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWluLW1lbW9y
eS1hbmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTcyNDUy
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0aGVyaW5n
Lmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sIFsgUGFzcyBdCiAKICMj
IyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4
cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313890</attachid>
            <date>2017-06-26 20:36:38 -0700</date>
            <delta_ts>2017-06-26 20:57:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170626204104.patch</filename>
            <type>text/plain</type>
            <size>72654</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTI2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
SW1hZ2VGcmFtZUNhY2hlOjpzdGFydEFzeW5jRGVjb2RpbmdRdWV1ZSgpIHVuc2FmZWx5IHBhc3Nl
cyBTdHJpbmdzIGFjcm9zcyB0aHJlYWRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4NCw2ICs1ODQsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZVNob3VsZFBh
cgogICAgIH0pOwogfQogCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlVGVsZW1ldHJ5
SGFuZGxlcigpCit7CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0
ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fc3RvcmUtPmZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7
Cit9CisgICAgCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29u
c3QgVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2
aXNpb24gMjE4ODI1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Rh
dGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1F1ZXVlKFJlZjxXVEY6OldvcmtRdWV1ZT4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE4ODI1KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyMyw2ICsyMjMsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdy
YQogICAgIG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxlciA9IFdURk1vdmUo
aGFuZGxlcik7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRGaXJl
VGVsZW1ldHJ5Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcikKK3sKKyAg
ICBtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKK30KKyAgICAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpAQCAtMjMyLDYgKzIzNywxMyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhCiAgICAgfSk7CiB9CiAK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9maXJlVGVsZW1ldHJ5
SGFuZGxlcikKKyAgICAgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogc3Rh
dGljIGlubGluZSBib29sIHNob3VsZFBhcnRpdGlvbkNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgc3RhdGlzdGljKQogewogICAgIHJldHVybiBzdGF0aXN0aWMuaXNQcmV2YWxl
bnRSZXNvdXJjZQpAQCAtMzYxLDYgKzM3MywzNyBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvCiAKICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwogfQorICAg
IAorVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KCkgY29uc3QKK3sKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOworICAgIFZlY3RvcjxQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkOworICAgIAorICAgIGZvciAoYXV0byYg
c3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAg
aWYgKHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiA8PSAwID8gMCA6CisgICAgICAgICAgICAgICAgc3RkOjpmbG9vcigoY3VycmVudFRp
bWUoKSAtIHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSAvIHNlY29uZHNQZXJE
YXkpOworICAgICAgICAgICAgc29ydGVkLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgc3RhdGlz
dGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuaGFkVXNl
ckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwK
KyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5z
aXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2Vz
Rm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICBzdGQ6OnNv
cnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgW10oY29uc3QgUHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnkmIGEsIGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7Cisg
ICAgICAgIHJldHVybiBhLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8g
PgorICAgICAgICBiLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87Cisg
ICAgfSk7CisgICAgCisgICAgcmV0dXJuIHNvcnRlZDsKK30KIAogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTcgQEAgY2xh
c3MgS2V5ZWREZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwogY2xhc3MgVVJMOwogCitzdGF0
aWMgY29uc3QgYXV0byBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5ID0gMzsK
KyAgICAKK3N0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgdW5zaWduZWQg
bnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCB7IDAgfTsKKyAgICBib29sIGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgZGF5c1NpbmNlVXNlckludGVy
YWN0aW9uIHsgMCB9OworICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMg
eyAwIH07CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAg
fTsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHsgMCB9OworfTsK
KyAgICAKIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPiB7CkBAIC02NCw4ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soV1RGOjpG
dW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9SZW1vdmUsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJGaXJzdCk+JiYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVDYWxsYmFjayhXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcik7CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOworICAgIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lk
IHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQg
c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25k
cyk7CkBAIC03Nyw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0
aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVGcmVzaFN0
YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zVG9HcmFuZGZhdGhlcik7CkBAIC05NSw2ICsxMDksNyBAQCBwcml2YXRlOgog
ICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
RG9tYWluc0hhbmRsZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0
ZW50U3RvcmVIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1f
ZmlyZVRlbGVtZXRyeUhhbmRsZXI7CiAKICAgICBkb3VibGUgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wIHsgMCB9OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVt
b3ZlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5jcHAJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDUgKzc2NywxMCBA
QCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpiYWNrZ3JvdW5kCiAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgib3ZlcjcwIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKQoreworICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoInJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkiKTsKK30KKyAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9z
dGljTG9nZ2luZ0tleXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdu
b3N0aWNMb2dnaW5nS2V5cy5oCShyZXZpc2lvbiAyMTg4MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcx
LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbWVtb3J5VXNh
Z2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KHVpbnQ2NF90IG1lbW9yeVVzYWdlKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGZvcmVncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xv
Z2dpbmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3Ry
aW5nIGJhY2tncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVz
YWdlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6Cisg
ICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgICAgIEFkZGVk
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFu
ZGxlcik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0
cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVs
ZW1ldHJ5RmluaXNoZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAg
ICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgor
ICAgICAgICAgICAgQ29uZmlndXJlcyBhIHRpbWVyIGZvciB0ZWxlbWV0cnkgY2FwdHVyZS4gRmly
ZXMgNSBzZWNvbmRzIGFmdGVyIGxhdW5jaAorICAgICAgICAgICAgYW5kIHRoZW4gZXZlcnkgMjQg
aG91cnMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgICAgICBW
YXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBu
b3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3Rp
ZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVk
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3Rp
ZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBh
Z2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJl
ZCk6CisgICAgICAgICAgICAgQ2FsbHMgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eTo6Y2FsY3VsYXRlQW5kU3VibWl0KCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om51bWJl
ck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om1lZGlh
bik6CisgICAgICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OnN1Ym1pdFRvcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpzdWJtaXRUb3BMaXN0
cyk6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNy0wNi0yNiAgSmVyZW15IEpv
bmVzICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZGF0ZSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyIHdoZW4gV2ViUGFnZSBpcyBkZXN0cm95ZWQuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjE4ODI1KQorKysgU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29k
aW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
KyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKICAg
ICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVj
a2VyQ2xpZW50LmNwcAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24g
MjE4ODI1KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BF
LmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCShy
ZXZpc2lvbiAyMTg4MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNF
UwogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0FQSS9D
L1dLR3JhbW1hckRldGFpbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTg4MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMz
OCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpCiAgICAgICAg
IHBhZ2UudmFsdWUtPnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZSgiV2Vic2l0ZURhdGFTY2Fu
Rm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNGaW5pc2hlZCIsIG51bGxwdHIpOwogfQog
ICAgIAordm9pZCBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5
RmluaXNoZWQoQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQoreworICAgIGZvciAoYXV0byYgcGFn
ZSA6IGdsb2JhbFBhZ2VNYXAoKSkKKyAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiLCBt
ZXNzYWdlQm9keSk7Cit9CisgICAgCiBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHk6
OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWludDY0X3QgcGFnZUlEID0g
Z2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
cywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgRnVuY3Rpb248dm9pZCAoY29uc3QgVmVjdG9yPFN0
cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgc3RhdGljIHZvaWQgdG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIEZ1bmN0aW9uPHZvaWQoSGFz
aFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMgdm9pZCBu
b3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CisgICAgc3RhdGlj
IHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCog
bWVzc2FnZUJvZHkpOwogCiAgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogICAg
IHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAJKHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NCwxMSArMTI0LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmYK
ICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCku
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHtob3N0TmFtZX0sIHsgfSwgZmFsc2Up
OwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1l
dHJ5SGFuZGxlcigpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkuZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwog
fQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKHZhbHVlKTsKK30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CkBA
IC0xNTEsNiArMTYxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
cgogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNl
dE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoNjApOwogICAgIFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldEdyYW5kZmF0aGVyaW5n
VGltZSgzNjAwKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZmFsc2UpOworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKGZhbHNlKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHRydWUpOwogICAg
IFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmNsZWFySW5N
ZW1vcnlTdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIx
ODgyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBzdGF0aWMg
dm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9p
ZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oY29uc3QgU3Ry
aW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZmlyZVRlbGVtZXRy
eUhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRl
bGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOwog
ICAgIHN0YXRpYyB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICBz
dGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhv
dXJzKHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTg4
MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVkZSA8d3RmL3Ro
cmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAt
NDcsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXNU
b1JlbW92ZTsKLXN0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzID0gZmFsc2U7CitzdGF0aWMgYXV0byBu
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gZmFsc2U7CiBzdGF0aWMgYXV0
byBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHRydWU7
CiAKIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeSkKQEAgLTU5LDcgKzYwLDExIEBAIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6V2ViUmVzb3UKICAgICA6IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRpc3RpY3NRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nl
c3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdGF0aXN0aWNzU3RvcmFnZVBhdGgocmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKKyAgICAsIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVs
ZW1ldHJ5VGltZXJGaXJlZCkKKyAgICAsIG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRy
eVRpbWVyRmlyZWQpCiB7CisgICAgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3RhcnRPbmVTaG90
KDVfcyk7CisgICAgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gp
OwogfQogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUoKQpAQCAtNjgsNyArNzMsNyBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6On5XZWJSZXNvCiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgYWx3YXlzKQog
ewotICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOworICAgIG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQgPSBhbHdheXM7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbChib29sIHZhbHVlKQpAQCAtMTE5LDcgKzEyNCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQg
dG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gQ3Jvc3NUaHJlYWRDb3BpZXI8
VmVjdG9yPFN0cmluZz4+Ojpjb3B5KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIFdlYlBy
b2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUo
cHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgbm90aWZ5UGFnZXMsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViUHJvY2Vzc1By
b3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5B
bGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1JlbW92ZSwgV1RGTW92ZShwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMpLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICAvLyBCdXQgYWx3YXlzIHRvdWNoIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
IHN0b3JlIG9uIHRoZSB3b3JrZXIgcXVldWUuCiAgICAgICAgICAgICBtX3N0YXRpc3RpY3NRdWV1
ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0b3BE
b21haW5zID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+Y29yZVN0b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVj
b3Jkcyh0b3BEb21haW5zKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVtb3ZlRGF0YVJlY29y
ZHMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub3RpZnlQYWdlcykgeworICAgICAgICBpZiAo
bm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkgewogICAgICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIFdl
YlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Nl
ZCgpOwogICAgICAgICAgICAgfSk7CkBAIC0xOTMsNiArMTk4LDEwIEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWcKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS0+c2V0R3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJhY2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CiAgICAgICAgIGdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YSgpOwogICAgIH0pOworICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLT5zZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIC8vIFRoaXMgY2FuY2VscyB0aGUgb25lIHNob3Qg
dGltZXIgYW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisgICAgICAg
IG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMpOworICAgIH0pOwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMjQs
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhCiAgICAgCiAgICAg
Ly8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBk
YXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJv
eHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBl
c1RvUmVtb3ZlLCBub3RpZnlQYWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6
OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1Rv
UmVtb3ZlLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChIYXNoU2V0PFN0cmluZz4mJiB0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICAvLyBCdXQgYWx3YXlzIHRvdWNoIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
IHN0b3JlIG9uIHRoZSB3b3JrZXIgcXVldWUKICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVl
LT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERv
bWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpjb3B5KHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29yZVN0b3JlKCkuaGFuZGxlRnJlc2hTdGFydFdp
dGhFbXB0eU9yTm9TdG9yZShXVEZNb3ZlKHRvcERvbWFpbnMpKTsKQEAgLTMzMCw0ICszMzksMTQg
QEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwogICAgIHJldHVybiBL
ZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3
RGF0YS0+ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhjb3JlU3RvcmUoKS5zdGF0aXN0aWNzTG9jaygpKTsKKyAgICAgICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KGNv
cmVTdG9yZSgpKTsKKyAgICB9KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjE4ODI1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxMCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5o
IgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVJlY29yZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTk1LDYg
Kzk3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHdyaXRlRW5jb2RlclRvRGlzayhXZWJDb3JlOjpL
ZXllZEVuY29kZXImLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBjcmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3Qg
U3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3Vw
KCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB0ZWxlbWV0cnlUaW1lckZpcmVkKCk7CiAKICAgICBS
ZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTsKICNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKQEAgLTEwNSw2ICsxMDks
OCBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7
CiAgICAgU3RyaW5nIG1fc3RhdGlzdGljc1N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgUnVuTG9vcDo6VGltZXI8V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKKyAg
ICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1l
dHJ5UmVwZWF0ZWRUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorc3RhdGljIGF1dG8gbm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBmYWxzZTsKKyAgICAKK3N0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oY29uc3QgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3VyY2VzLCBzaXplX3QgYmVnaW4sIHNpemVfdCBl
bmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0VtcHR5KCkgfHwgcmVzb3VyY2VzLnNpemUoKSA8
IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
YmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBpZiAocmVzb3VyY2VzW2ldLmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgICsrcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiB2KQoreworICAgIGlmICh2LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKHYuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiB2WzBdOworICAgIAor
ICAgIGF1dG8gc2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gbWlkZGxlID0gc2l6ZSAvIDI7Cisg
ICAgaWYgKHNpemUgJSAyKQorICAgICAgICByZXR1cm4gdlttaWRkbGVdOworICAgIHJldHVybiAo
dlttaWRkbGUgLSAxXSArIHZbbWlkZGxlXSkgLyAyOworfQorICAgIAorc3RhdGljIHVuc2lnbmVk
IG1lZGlhbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiB2LCB1bnNp
Z25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNv
bnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiYgc3RhdGlzdGljR2V0
dGVyKQoreworICAgIGlmICh2LmlzRW1wdHkoKSB8fCB2LnNpemUoKSA8IGJlZ2luICsgMSB8fCB2
LnNpemUoKSA8IGVuZCArIDEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFZlY3Rvcjx1
bnNpZ25lZD4gcGFydDsKKyAgICBwYXJ0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZW5kIC0gYmVn
aW4gKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8PSBlbmQ7ICsraSkKKyAg
ICAgICAgcGFydC51bmNoZWNrZWRBcHBlbmQoc3RhdGlzdGljR2V0dGVyKHZbaV0pKTsKKyAgICAK
KyAgICByZXR1cm4gbWVkaWFuKHBhcnQpOworfQorICAgIAorc3RhdGljIFdlYlBhZ2VQcm94eSog
bm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCkKK3sKKyAgICBhdXRvIHByb2Nlc3NQb29scyA9IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKKyAgICBpZiAocHJvY2Vzc1Bvb2xzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwcm9jZXNz
UG9vbCA9IHByb2Nlc3NQb29sc1swXTsKKyAgICBpZiAoIXByb2Nlc3NQb29sKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHdlYlByb2Nlc3MgOiBwcm9jZXNz
UG9vbC0+cHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWdlIDogd2ViUHJvY2Vz
cy0+cGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPnNlc3Npb25JRCgpLmlzRXBoZW1l
cmFsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gcGFn
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyAgICAKK3N0YXRp
YyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9w
LCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94
eSYgd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQp
IHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9
OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIg
PSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0
dXJuIHQuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6
RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVt
ZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoY29uc3QgUHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQo
Y29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGlt
ZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VU
ZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQubnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRz
UmVtb3ZlZDsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVU
b3AgLSAxKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0g
bWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAs
IG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRp
bWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEs
IG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIAorICAgIFN0cmlu
Z0J1aWxkZXIgcHJlYW1ibGVCdWlsZGVyOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJ0b3AiKTsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVz
b3VyY2VzRnJvbVRoZVRvcCk7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJlYW1ibGUgPSBwcmVh
bWJsZUJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIsCisgICAgICAgIHRvcFByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBh
Z2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVh
bWJsZSArICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiwKKyAgICAgICAgdG9wU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFn
ZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFt
YmxlICsgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAorICAgICAgICB0b3BTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3
ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9u
UHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsCisgICAgICAgIHRvcFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdl
YlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2lu
Z0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25Q
cmVhbWJsZSArICJOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkIiwKKyAgICAgICAgdG9w
TnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwgU2hvdWxkU2FtcGxlOjpObyk7Cit9
CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0cyhjb25zdCBWZWN0b3I8UHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3Rv
cjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAg
IHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAor
ICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNp
emUoKSA8IDMpCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDMsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRl
cmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMCkKKyAgICAgICAgcmV0dXJu
OworICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsK
KyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbi5zaXplKCkgPCA1MCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoNTAs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMDApCisgICAg
ICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwMCwgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQ
YWdlUHJveHkpOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJw
b3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVz
b3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQoreworICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNdIHsKKyAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2VC
b2R5OworICAgICAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVu
dFJlc291cmNlcyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3VyY2Vz
KSk7CisgICAgICAgIG1lc3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFs
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICBtZXNzYWdl
Qm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIp
LCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7
CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlG
aW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAg
IH0pOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4K
K3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24pCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkg
eworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07
CisgICAgCisgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwg
dG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1lZGlh
bihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKSk7Cit9CisgICAgCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcyA9IHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5zb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpOworICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXMuc2l6ZSgpIDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkgewor
ICAgICAgICBub3RpZnlQYWdlcygwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcHJldmFs
ZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIAorICAgIGZvciAoYXV0
byYgcHJldmFsZW50UmVzb3VyY2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAg
ICAgaWYgKHByZXZhbGVudFJlc291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAg
ICAgIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5hcHBlbmQocHJl
dmFsZW50UmVzb3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlv
bi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBh
dXRvIHdlYlBhZ2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgIGlmICgh
d2ViUGFnZVByb3h5KSB7CisgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291
cmNlcyIpLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCAwLCBTaG91bGRTYW1wbGU6
Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERp
YWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgp
LCBBU0NJSUxpdGVyYWwoInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uIiksIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5z
aXplKCksIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIGlmIChwcmV2YWxlbnRSZXNv
dXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKKyAgICAgICAgd2ViUGFn
ZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0
b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uWzBdLCAw
LCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBpZiAocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uLnNpemUoKSA+IDEpCisgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgibWVkaWFuUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiIpLCBt
ZWRpYW4ocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKSwgMCwgU2hv
dWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgc3VibWl0VG9wTGlzdHMoc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCAqd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQpCisgICAgICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZhbGVudFJlc291cmNl
cywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgcHJldmFs
ZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSk7Cit9CisgICAgCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkID0gYWx3YXlzOworfQorICAgIAorfQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgCitu
YW1lc3BhY2UgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSB7CisgICAgCit2b2lk
IGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmKTsKK3ZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9v
bCk7CisgICAgCit9OworICAgIAorfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcAkocmV2aXNpb24gMjE4ODI1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNiArMTE2LDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZp
cmUKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSwgdmFs
dWUpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1l
dHJ5SGFuZGxlcigpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZp
cmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1
ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0xMjYsNiArMTMxLDExIEBA
IHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFMKICAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZh
bHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisKIHZvaWQgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQog
ewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJ
KHJldmlzaW9uIDIxODgyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5
LDEwIEBAIGV4dGVybiAiQyIgewogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBXS19FWFBP
UlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFp
bihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQT1JUIHZvaWQg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAg
ICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQ
T1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOworICAgIFdLX0VY
UE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1do
ZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgdm9pZCBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSgpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2ln
bmVkKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
UmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODI1KQorKysgU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDggLyog
V0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9y
LmNwcCAqLzsgfTsKIAkJNjU5QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIEluamVjdGVkQnVuZGxl
UGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCAqLzsgfTsKIAkJNjVCODZGMUUxMkYxMURFMzAw
QjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaCAqLzsgfTsKKwkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovOyB9OwogCQk2QkJCQUQzODFFQzNFNTc4
MDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQkJBRDM3MUVDM0U1
NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tICov
OyB9OwogCQk2QkU5Njk5QzFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2QkU5Njk5RTFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5jcHAgKi87IH07CkBAIC0zNDc4LDYgKzM0ODAsOCBAQAogCQk2NTQ2QTgyQTEzMDAwMTY0MDAw
Q0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxNzEyRjExRDdCMDBC
N0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJCQkFEMzcx
RUMzRTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2Eu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCRTk2OTlE
MUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg2MCw2ICs2
ODY0LDggQEAKIAkJCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcCAqLywKIAkJCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E5Q0Q4QzIxQzc3OUFE
NjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAq
LywKKwkJCQk2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeS5oICovLAorCQkJCTZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLywKIAkJCQk1MUQxMjQyNDFFNkQz
Q0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5jcHAgKi8sCiAJCQkJNTFEMTI0MjUx
RTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQk1MUU4QjY4
RDFFNzEyODczMDAxQjcxMzIgLyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8sCkBAIC04MjQ2LDYg
KzgyNTIsNyBAQAogCQkJCTJEQUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBBUElIaXN0b3J5Q2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBBQkE1QzIgLyogQVBJ
SGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc3NTEyMzExREYwREVFMjAwOEEz
NTFDIC8qIEFQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2OTA3OUUxOEYzNDBBMjAwMURGRjA0IC8q
IEFQSUluamVjdGVkQnVuZGxlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2OTA3
OUExOEYzMUNCMjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3Q0U0RDIwNzFBNDY3NzYxMDBDN0YxNTIgLyogQVBJTGVnYWN5Q29u
dGV4dEhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Nyw2ICs5ODg0LDcgQEAK
IAkJCQk1MTVFNzcyQjE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMTVDNzE0MTkwRjg5RTQwMEVDQzUx
NiAvKiBEYXRhYmFzZVByb2Nlc3NJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUUzNTIwMjE4
MEY1RDFFMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjAxODBFMDMxRDAwMzlBMTQ5
IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTdERDVCRTE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjkxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJv
Y2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4ODI1
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIw
MTctMDYtMjYgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZHMgdGhyZWUgbmV3IHRlc3RSdW5uZXIgZnVuY3Rpb25zOgorICAgICAgICAt
IGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soKQorICAgICAgICAtIHN0
YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCisgICAgICAgIC0gc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKCkKKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6Cisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRSdW5U
ZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NG
aXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTA2LTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJk
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE4NzgzLgpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIxODgyNSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MzYsNiArODM2LDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlv
bnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJM
cyA9IG51bGxwdHI7CisgICAgCisgICAgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKIAogICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgp
KTsKICAgICBydW5VbnRpbChtX2RvbmVSZXNldHRpbmcsIG1fY3VycmVudEludm9jYXRpb24tPnNo
b3J0VGltZW91dCgpKTsKQEAgLTIyNzQsNiArMjI3NiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpzdGF0aXN0aWNzRmlyZVNob3VsCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihob3N0TmFtZSwg
dmFsdWUpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRy
eUhhbmRsZXIoKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVs
ZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlz
dGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsK
ICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0yMjg0LDYgKzIyOTEsMTEgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZAogICAgIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlX
YXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25k
cykKIHsKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxODgyNSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDggKzE2
NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyRm9yT25lRG9tYWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAg
ICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0
U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBz
dGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxODgyNSkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDYxLDYgKzEwNjEsMTEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2Nh
dGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzRmlyZVRl
bGVtZXRyeUhhbmRsZXIiKSkgeworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpAQCAtMTA2OCw2ICsxMDczLDEzIEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSkg
eworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlz
aW9uIDIxODgyNSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDE3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG8KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsKKyAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291
cmNlcyIpKSkpOworICAgICAgICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24iKSkpKTsKKyAgICAgICAgdW5zaWduZWQgdG9wM1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucyIpKSkpOworICAgICAgICAKKyAgICAgICAgbV90ZXN0UnVubmVyLT5z
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMs
IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVW5rbm93biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBl
cnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcAkocmV2aXNpb24gMjE4ODI1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM2LDYgKzYzNiw3IEBA
IGVudW0gewogICAgIERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lELAogICAgIFN0YXRp
c3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZFNj
YW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCisgICAgU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNh
bGxiYWNrSUQsCiAgICAgRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwK
ICAgICBGaXJzdFVJU2NyaXB0Q2FsbGJhY2tJRCA9IDEwMAogfTsKQEAgLTEzODksNiArMTM5MCwz
MCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlCiAgICAgY2FsbFRl
c3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2tJRCk7
CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlD
YWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQoreworICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCBjYWxsYmFjayk7Cit9Cisg
ICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayh1
bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucykKK3sKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieyBcInRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3Rh
bFByZXZhbGVudFJlc291cmNlcyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIs
IFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRv
cDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZE51bWJlcih0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgfSIpOworICAgIAorICAgIEpTVmFsdWVSZWYgcmVz
dWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwor
ICAgIAorICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrSUQsIDEsICZyZXN1bHQpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIiKSk7CkBAIC0xNDI2
LDYgKzE0NTEsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcgog
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5k
bGVyKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5
SGFuZGxlciIpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0
cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIp
KTsKQEAgLTE0NDAsNiArMTQ3MSwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NT
aG91bGRDbGFzCiAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9w
dFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQorICAgIAordm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOworICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vj
b25kcykKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTg4MjUpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5
LDExICszNDksMTQgQEAgcHVibGljOgogICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwog
ICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKEpT
VmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0
YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGluc3RhbGxT
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAg
ICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjaygpOwogICAgIHZv
aWQgc3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgdm9pZCBzdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNv
dXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
biwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOwogICAgIHZvaWQg
c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlz
dGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlz
dGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVt
ZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShK
U1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlKTsKQEAgLTM2Nyw2ICszNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQg
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVy
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTg4MjUpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAg
IC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NE
aWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBp
bnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFj
ayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9i
amVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
RE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVh
biB2YWx1ZSk7CkBAIC0yNjcsOCArMjY4LDEwIEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAg
ICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4o
RE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NG
aXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwo
Ym9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsK
ICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTg4MjUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNi0yNiAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFk
ZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAgICAgRW5hYmxlZCBoZXJlIHNpbmNl
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTctMDYtMjYgIE1hdHQg
TGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJrZWQgbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1wYWludC10by1jYW52YXMuaHRtbCBhcyBmbGFreS4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Rl
bGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2Vu
ZXJhdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24t
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUg
LSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBUZWxl
bWV0cnkgR2VuZXJhdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZy
YW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1Rlc3RzIHRoYXQgdGVsZW1ldHJ5IGZvciBwcmV2
YWxlbnQgcmVzb3VyY2VzIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNv
dXJjZXMuCitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgaXMgMAorUEFT
UyB0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiBp
cyAwCitQQVNTIHRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgaXMg
MAorUEFTUyBIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuCitQQVNTIHRl
c3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgaXMgNAorUEFTUyB0ZXN0UmVzdWx0LnRv
dGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiBpcyAxCitQQVNTIHRlc3RS
ZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgaXMgNAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5l
cmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbjwv
dGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVz
dHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRlZCBj
b3JyZWN0bHkuIik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCB0b3BG
cmFtZVVybDEgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZy
YW1lVXJsMiA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCI7CisgICAgY29uc3QgdG9wRnJh
bWVVcmwzID0gImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BGcmFt
ZVVybDQgPSAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVu
dFJlc291cmNlVXJsMSA9ICJodHRwOi8vMTI3LjAuMS4xOjgwMDAvdGVtcCI7CisgICAgY29uc3Qg
cHJldmFsZW50UmVzb3VyY2VVcmwyID0gImh0dHA6Ly8xMjcuMC4xLjI6ODAwMC90ZW1wIjsKKyAg
ICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDMgPSAiaHR0cDovLzEyNy4wLjEuMzo4MDAwL3Rl
bXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsNCA9ICJodHRwOi8vMTI3LjAuMS40
OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlvbiBjaGVja0luc3VmZmljaWVudENsYXNzaWZpY2F0
aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDEpKSB7CisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVz
b3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlm
ICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNv
dXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDIgZGlkIG5vdCBnZXQg
Y2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkhvc3Rz
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAgICAgIHJ1blRl
bGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBj
aGVja1N1ZmZpY2llbnRDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICBpZiAo
IXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3Vy
Y2VVcmwxKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0IGNs
YXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiSG9zdCAyIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNl
LiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRl
c3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VV
cmwzKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNsYXNz
aWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmw0KSkgeworICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiSG9zdCA0IGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIp
OworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKCJIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMu
Iik7CisgICAgICAgICAgICBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVy
bCkgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxl
bnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0
b3BGcmFtZVVybDMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVz
b3VyY2VVcmwsIHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJh
bWVVcmwzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQpOworCisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJl
c291cmNlVXJsLCB0b3BGcmFtZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRv
cEZyYW1lVXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRVcEluc3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250
aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDEp
OworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsMik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxi
YWNrKGNoZWNrSW5zdWZmaWNpZW50Q2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAgICAg
IHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhjaGVj
a0luc3VmZmljaWVudFRlbGVtZXRyeSk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0Zp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNldFVw
U3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZh
bGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDMpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHBy
ZXZhbGVudFJlc291cmNlVXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKHByZXZhbGVudFJlc291cmNlVXJsNCwgdHJ1ZSk7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxi
YWNrKGNoZWNrU3VmZmljaWVudENsYXNzaWZpY2F0aW9uQW5kQ29udGludWUpOworICAgICAgICB0
ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soY2hlY2tT
dWZmaWNpZW50VGVsZW1ldHJ5KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVsZW1l
dHJ5QW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVUZWxl
bWV0cnlIYW5kbGVyKCk7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1bHQ7CisgICAgZnVuY3Rp
b24gY2hlY2tJbnN1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RSZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50
UmVzb3VyY2VzIiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjAiKTsKKyAgICAgICAgc2hvdWxk
QmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiMCIpOwor
ICAgICAgICBzZXRVcFN1ZmZpY2llbnRTdGF0aXN0aWNzQW5kQ29udGludWUoKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjaGVja1N1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAg
IHRlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFs
UHJldmFsZW50UmVzb3VyY2VzIiwgIjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQu
dG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEiKTsKKyAgICAg
ICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMi
LCAiNCIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1ZSk7Cisg
ICAgICAgIHNldFVwSW5zdWZmaWNpZW50U3RhdGlzdGljc0FuZENvbnRpbnVlKCk7CisgICAgfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9u
IDIxODgyNSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3
b3JraW5nIGNvcHkpCkBAIC03MDUsNiArNzA1LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvY2xhc3NpZnktYXMtcHJldmFsZW50LWJhc2VkLW9uLXN1YnJlc291cmNlLXVuaXF1ZS1yZWRp
cmVjdHMtdG8uaHRtbCBbIFBhc3MgXQogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNz
IF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KK2h0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0
aW9uLmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3Rl
ZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313892</attachid>
            <date>2017-06-26 20:57:06 -0700</date>
            <delta_ts>2017-06-27 09:54:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170626210132.patch</filename>
            <type>text/plain</type>
            <size>72720</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTI2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnMoKSBpcyBpbmVmZmljaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQs
NiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAg
ICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBT
aG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3JlLT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQor
ICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVS
TCYgdXJsKQogewogICAgIHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9u
IDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFp
bnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVU
ZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3Rp
Y3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMs
NiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAg
ICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRs
ZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVt
ZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9m
aXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRs
ZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25Db29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICByZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVz
b3VyY2UKQEAgLTM2MSw2ICszNzMsMzcgQEAgVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1Zl
Y3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZDsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHN0YXRp
c3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChz
dGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgdW5zaWduZWQgZGF5
c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24gPD0gMCA/IDAgOgorICAgICAgICAgICAgICAgIHN0ZDo6Zmxvb3IoKGN1cnJlbnRUaW1lKCkg
LSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikgLyBzZWNvbmRzUGVyRGF5KTsK
KyAgICAgICAgICAgIHNvcnRlZC5hcHBlbmQoeworICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5k
YXRhUmVjb3Jkc1JlbW92ZWQsCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLmhhZFVzZXJJbnRl
cmFjdGlvbiwKKyAgICAgICAgICAgICAgICBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sCisgICAg
ICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgp
LAorICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zLnNpemUoKSwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUby5zaXplKCkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmIChzb3J0ZWQuc2l6ZSgpIDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRl
bGVtZXRyeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgc3RkOjpzb3J0KHNv
cnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikgeworICAgICAg
ICByZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID4KKyAg
ICAgICAgYi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH0p
OworICAgIAorICAgIHJldHVybiBzb3J0ZWQ7Cit9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5zKQogewpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAko
cmV2aXNpb24gMjE4ODI3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxNyBAQCBjbGFzcyBL
ZXllZERlY29kZXI7CiBjbGFzcyBLZXllZEVuY29kZXI7CiBjbGFzcyBVUkw7CiAKK3N0YXRpYyBj
b25zdCBhdXRvIG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworICAg
IAorc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkIHsgMCB9OworICAgIGJvb2wgaGFzSGFkVXNlcklu
dGVyYWN0aW9uIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24geyAwIH07CisgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyB7IDAg
fTsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHsgMCB9Owor
ICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8geyAwIH07Cit9OworICAg
IAogc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7CiAKIGNsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU+IHsKQEAgLTY0LDggKzc1LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0
aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KT4mJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRXcml0ZVBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrKFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayhXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBoYW5kbGVyKTsKIAogICAgIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCk7CisgICAgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0
VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRU
aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBz
ZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsK
QEAgLTc3LDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNI
YWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rv
cjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3RpY3NG
b3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVGcmVzaFN0YXJ0
V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zVG9HcmFuZGZhdGhlcik7CkBAIC05NSw2ICsxMDksNyBAQCBwcml2YXRlOgogICAg
IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9t
YWluc0hhbmRsZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0ZW50
U3RvcmVIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZmly
ZVRlbGVtZXRyeUhhbmRsZXI7CiAKICAgICBkb3VibGUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wIHsgMCB9OwogICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3Zl
ZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5n
S2V5cy5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDUgKzc2NywxMCBAQCBT
dHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpiYWNrZ3JvdW5kCiAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgib3ZlcjcwIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKQoreworICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkiKTsKK30KKyAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5oCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDgg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgbWVtb3J5VXNhZ2VU
b0RpYWdub3N0aWNMb2dnaW5nS2V5KHVpbnQ2NF90IG1lbW9yeVVzYWdlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgU3RyaW5nIGZvcmVncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dp
bmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5n
IGJhY2tncm91bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVzYWdl
KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlLZXkoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE3LTA2LTI2ICBKb2huIFdpbGFu
ZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlz
dGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
R1RLLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAg
ICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxl
cik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVj
dHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1l
dHJ5RmluaXNoZWQpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAg
ICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAg
ICAgICAgICAgQ29uZmlndXJlcyBhIHRpbWVyIGZvciB0ZWxlbWV0cnkgY2FwdHVyZS4gRmlyZXMg
NSBzZWNvbmRzIGFmdGVyIGxhdW5jaAorICAgICAgICAgICAgYW5kIHRoZW4gZXZlcnkgMjQgaG91
cnMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgICAgICBWYXJp
YWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3Rp
ZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQ
YWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQ
YWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRXhpc3Rp
bmdXZWJzaXRlRGF0YSk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2Vz
IC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCk6
CisgICAgICAgICAgICAgQ2FsbHMgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6
Y2FsY3VsYXRlQW5kU3VibWl0KCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Om51bWJlck9m
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om1lZGlhbik6
CisgICAgICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OnN1Ym1pdFRvcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpzdWJtaXRUb3BMaXN0cyk6
CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNy0wNi0yNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zKCkgaXMgaW5lZmZpY2llbnQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBA
IGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2Vi
VGV4dENoZWNrZXJDbGllbnQuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFj
LmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCShy
ZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNF
UwogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwCiAgICAgVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm1XUEUuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUu
Y21ha2UJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNt
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3Bw
CiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAg
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nl
c3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzgsNiArMzM4LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGkK
ICAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKCJXZWJzaXRl
RGF0YVNjYW5Gb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0ZpbmlzaGVkIiwgbnVsbHB0
cik7CiB9CiAgICAgCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NU
ZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpCit7CisgICAgZm9yIChh
dXRvJiBwYWdlIDogZ2xvYmFsUGFnZU1hcCgpKQorICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlGaW5p
c2hlZCIsIG1lc3NhZ2VCb2R5KTsKK30KKyAgICAKIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nl
c3NQcm94eTo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOjpQ
YWdlQ29uZmlndXJhdGlvbj4mJiBwYWdlQ29uZmlndXJhdGlvbikKIHsKICAgICB1aW50NjRfdCBw
YWdlSUQgPSBnZW5lcmF0ZVBhZ2VJRCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjE4ODI3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zLCBib29sIHNob3VsZE5vdGlmeVBhZ2VzLCBGdW5jdGlvbjx2b2lkIChjb25zdCBI
YXNoU2V0PFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgc3RhdGljIHZvaWQg
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIEZ1bmN0aW9u
PHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0
aWMgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7Cisg
ICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6
Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCiAgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlv
bigpOwogICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCwxMSArMTI0LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OmYKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHtob3N0TmFtZX0sIHsg
fSwgZmFsc2UpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpm
aXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
dmFsdWUpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2
YWx1ZSk7CkBAIC0xNTEsNiArMTYxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6cgogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoNjApOwogICAg
IFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldEdyYW5k
ZmF0aGVyaW5nVGltZSgzNjAwKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZmFsc2UpOworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKGZhbHNlKTsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHRy
dWUpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigp
LmNsZWFySW5NZW1vcnlTdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJl
dmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAg
ICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBz
dGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4o
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZmly
ZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lk
IHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUo
KTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZp
ZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZp
c2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNDcsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXNUb1JlbW92ZTsKLXN0YXRpYyBhdXRvIG5vdGlmeVBhZ2VzID0gZmFsc2U7CitzdGF0
aWMgYXV0byBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gZmFsc2U7CiBz
dGF0aWMgYXV0byBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCA9IHRydWU7CiAKIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSkKQEAgLTU5LDcgKzYwLDExIEBAIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3UKICAgICA6IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRp
c3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdGF0aXN0aWNzU3RvcmFnZVBhdGgo
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKKyAgICAsIG1fdGVsZW1ldHJ5T25lU2hv
dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkKKyAgICAsIG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiB7CisgICAgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3Rh
cnRPbmVTaG90KDVfcyk7CisgICAgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyLnN0YXJ0UmVwZWF0
aW5nKDI0X2gpOwogfQogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQpAQCAtNjgsNyArNzMsNyBAQCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wg
YWx3YXlzKQogewotICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOworICAgIG5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBhbHdheXM7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQpAQCAtMTE5LDcgKzEyNCw3IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFp
biB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gQ3Jvc3NUaHJl
YWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KHByZXZhbGVudFJlc291cmNlRG9tYWlucyks
IHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUs
IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgbm90aWZ5UGFnZXMsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CisgICAgICAgIFdl
YlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgbm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1dCBhbHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtlciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpj
b3B5KGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29yZVN0b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJl
bW92ZWREYXRhUmVjb3Jkcyh0b3BEb21haW5zKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVt
b3ZlRGF0YVJlY29yZHMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub3RpZnlQYWdlcykgewor
ICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkgewogICAg
ICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtdICgpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NlZCgpOwogICAgICAgICAgICAgfSk7CkBAIC0xOTMsNiArMTk4LDEwIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWcKICAgICBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJh
Y2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CiAgICAgICAgIGdy
YW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSgpOwogICAgIH0pOworICAgIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLT5zZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIC8vIFRoaXMgY2FuY2VscyB0
aGUgb25lIHNob3QgdGltZXIgYW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9z
ZXMuCisgICAgICAgIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMp
OworICAgIH0pOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKQEAg
LTIxNSw3ICsyMjQsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
CiAgICAgCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1
bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldICgpIG11dGFibGUgewotICAgICAgICBX
ZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVE
YXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQYWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICBXZWJQ
cm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRh
KGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChIYXNoU2V0
PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAvLyBCdXQgYWx3YXlzIHRvdWNoIHRoZSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzIHN0b3JlIG9uIHRoZSB3b3JrZXIgcXVldWUKICAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVhZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpj
b3B5KHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29yZVN0b3JlKCkuaGFuZGxl
RnJlc2hTdGFydFdpdGhFbXB0eU9yTm9TdG9yZShXVEZNb3ZlKHRvcERvbWFpbnMpKTsKQEAgLTMz
MCw0ICszMzksMTQgQEAgc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwog
ICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4ocmF3RGF0YS0+ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQoKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgbV9zdGF0aXN0aWNzUXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjb3JlU3RvcmUoKS5zdGF0aXN0aWNzTG9jaygp
KTsKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRl
QW5kU3VibWl0KGNvcmVTdG9yZSgpKTsKKyAgICB9KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjE4ODI3KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTk1LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHdyaXRlRW5jb2RlclRvRGlz
ayhXZWJDb3JlOjpLZXllZEVuY29kZXImLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBjcmVhdGVEZWNvZGVyRnJv
bURpc2soY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1
ZGVGcm9tQmFja3VwKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB0ZWxlbWV0cnlUaW1lckZpcmVk
KCk7CiAKICAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKICNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKQEAg
LTEwNSw2ICsxMDksOCBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0
aXN0aWNzUXVldWU7CiAgICAgU3RyaW5nIG1fc3RhdGlzdGljc1N0b3JhZ2VQYXRoOwogICAgIGJv
b2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgUnVuTG9v
cDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNo
b3RUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorc3RhdGljIGF1
dG8gbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBmYWxzZTsKKyAgICAKK3N0
YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3VyY2VzLCBzaXplX3QgYmVn
aW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0VtcHR5KCkgfHwgcmVzb3Vy
Y2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgZW5kICsgMSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBpZiAocmVzb3VyY2Vz
W2ldLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgICsrcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1lZGlh
bihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2KQoreworICAgIGlmICh2LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHYuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiB2
WzBdOworICAgIAorICAgIGF1dG8gc2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gbWlkZGxlID0g
c2l6ZSAvIDI7CisgICAgaWYgKHNpemUgJSAyKQorICAgICAgICByZXR1cm4gdlttaWRkbGVdOwor
ICAgIHJldHVybiAodlttaWRkbGUgLSAxXSArIHZbbWlkZGxlXSkgLyAyOworfQorICAgIAorc3Rh
dGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnk+JiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiYg
c3RhdGlzdGljR2V0dGVyKQoreworICAgIGlmICh2LmlzRW1wdHkoKSB8fCB2LnNpemUoKSA8IGJl
Z2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFydDsKKyAgICBwYXJ0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZW5kIC0gYmVnaW4gKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8PSBl
bmQ7ICsraSkKKyAgICAgICAgcGFydC51bmNoZWNrZWRBcHBlbmQoc3RhdGlzdGljR2V0dGVyKHZb
aV0pKTsKKyAgICAKKyAgICByZXR1cm4gbWVkaWFuKHBhcnQpOworfQorICAgIAorc3RhdGljIFdl
YlBhZ2VQcm94eSogbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCkKK3sKKyAgICBhdXRvIHByb2Nl
c3NQb29scyA9IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKKyAgICBpZiAocHJv
Y2Vzc1Bvb2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
YXV0byBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sc1swXTsKKyAgICBpZiAoIXByb2Nlc3NQb29s
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHdlYlByb2Nl
c3MgOiBwcm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWdl
IDogd2ViUHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPnNlc3Npb25J
RCgpLmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICByZXR1cm4gcGFnZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJj
ZXNGcm9tVGhlVG9wLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24s
IFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248dW5zaWdu
ZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VU
ZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luczsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsK
KyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9
OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBb
XSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJu
IHQuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rp
b248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+
IG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQubnVtYmVyT2ZUaW1l
c0RhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9OworICAgIAorICAgIHVuc2lnbmVkIHRvcFByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291
cmNlc0Zyb21UaGVUb3AgLSAxKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3Ag
LSAxLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0
b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJv
bVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAg
IAorICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVCdWlsZGVyOworICAgIHByZWFtYmxlQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVy
KG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJl
YW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAKKyAgICB3ZWJQYWdlUHJv
eHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUg
KyAiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIsCisgICAgICAgIHRvcFBy
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIDAsIFNob3VsZFNhbXBsZTo6Tm8p
OworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVz
Y3JpcHRpb25QcmVhbWJsZSArICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiwKKyAgICAg
ICAgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7
CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNj
cmlwdGlvblByZWFtYmxlICsgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAorICAg
ICAgICB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6
Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCks
IGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsCisg
ICAgICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIDAsIFNob3VsZFNhbXBsZTo6
Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwg
ZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkIiwK
KyAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgMCwgU2hvdWxkU2Ft
cGxlOjpObyk7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0cyhjb25zdCBWZWN0
b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMs
IGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
b3h5KQoreworICAgIHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJv
eHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0
KDMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMCkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFByZXZhbGVudFJlc291
cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2Vi
UGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1p
dFRvcExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBp
ZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkg
PCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwMCwgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCB3ZWJQYWdlUHJveHkpOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3Ig
dGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKHVuc2lnbmVkIHRvdGFs
UHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
KQoreworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdG90YWxQcmV2YWxlbnRSZXNvdXJj
ZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNdIHsKKyAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBU
eXBlIG1lc3NhZ2VCb2R5OworICAgICAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJU
b3RhbFByZXZhbGVudFJlc291cmNlcyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzKSk7CisgICAgICAgIG1lc3NhZ2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRv
dGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpLCBBUEk6OlVJbnQ2NDo6
Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAg
ICAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucyIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zKSk7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3Rp
Y3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSku
cHRyKCkpOworICAgIH0pOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGlu
ZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVj
dG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxOdW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25l
ZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zOworICAgIH07CisgICAgCisgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLnNpemUoKSwgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sIG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKSk7Cit9CisgICAg
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1
Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAg
ICBhdXRvIHNvcnRlZFByZXZhbGVudFJlc291cmNlcyA9IHJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5zb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpOworICAgIGlmIChzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpIDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRl
bGVtZXRyeSkgeworICAgICAgICBub3RpZnlQYWdlcygwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIAor
ICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXMpIHsKKyAgICAgICAgaWYgKHByZXZhbGVudFJlc291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlv
bikKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlv
bi5hcHBlbmQocHJldmFsZW50UmVzb3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOworICAgIH0K
KyAgICAKKyAgICBhdXRvIHdlYlBhZ2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgp
OworICAgIGlmICghd2ViUGFnZVByb3h5KSB7CisgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDAp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlcyIpLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCAwLCBT
aG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uIiksIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbi5zaXplKCksIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIAorICAgIGlmIChw
cmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKKyAg
ICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVND
SUlMaXRlcmFsKCJ0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24iKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uWzBdLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICBpZiAocHJldmFsZW50UmVzb3Vy
Y2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDEpCisgICAgICAgIHdlYlBhZ2VQ
cm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgibWVk
aWFuUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRl
cmFjdGlvbiIpLCBtZWRpYW4ocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgCisgICAgc3VibWl0VG9wTGlzdHMoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAqd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpCisgICAgICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZh
bGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbiwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSk7
Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gYWx3YXlzOworfQorICAgIAorfQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisgICAgCituYW1lc3BhY2UgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSB7
CisgICAgCit2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmKTsKK3ZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQoYm9vbCk7CisgICAgCit9OworICAgIAorfQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjE4ODI3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckZpcmUKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Zmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKHRvV1RGU3RyaW5nKGhv
c3ROYW1lKSwgdmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0xMjYs
NiArMTMxLDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFMKICAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisKIHZv
aWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUoKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDggKzQ5LDEwIEBAIGV4dGVybiAiQyIgewogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsK
ICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
ckZvck9uZURvbWFpbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlI
YW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSk7
CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
OworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICBXS19F
WFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5j
ZUhvdXJzKHVuc2lnbmVkKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4
ODI3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk2NTAxQkQxQTEyRjEyNDM0
MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVu
ZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJNjU5QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIElu
amVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCAqLzsgfTsKIAkJNjVCODZG
MUUxMkYxMURFMzAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEg
LyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLzsgfTsKKwkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRB
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI4MjFEREIxRUVGMDVERDAwRDdBRjRB
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovOyB9OwogCQk2QkJC
QUQzODFFQzNFNTc4MDBBRDBBMkEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJD
b2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZC
QkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckNvY29hLm1tICovOyB9OwogCQk2QkU5Njk5QzFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2QkU5Njk5RTFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAgKi87IH07CkBAIC0zNDc4LDYgKzM0ODAsOCBAQAogCQk2NTQ2QTgy
QTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJl
c291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYx
NzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNw
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkI4MjFEREExRUVGMDVERDAw
RDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2QjgyMUREQjFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkJCQkFEMzcxRUMzRTU2MzAwQUQwQTJBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjg2MCw2ICs2ODY0LDggQEAKIAkJCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKIAkJCQk3QTlDRDhDMTFDNzc5ODQ5
MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E5
Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5t
ZXNzYWdlcy5pbiAqLywKKwkJCQk2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovLAorCQkJCTZCODIxRERCMUVFRjA1REQwMEQ3
QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLywKIAkJCQk1
MUQxMjQyNDFFNkQzQ0MzMDAyQjI4MjAgLyogV2ViVVJMU2NoZW1lSGFuZGxlci5jcHAgKi8sCiAJ
CQkJNTFEMTI0MjUxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuaCAqLywK
IAkJCQk1MUU4QjY4RDFFNzEyODczMDAxQjcxMzIgLyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8s
CkBAIC04MjQ2LDYgKzgyNTIsNyBAQAogCQkJCTJEQUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBB
UElIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBB
QkE1QzIgLyogQVBJSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc3NTEyMzEx
REYwREVFMjAwOEEzNTFDIC8qIEFQSUluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk2QjgyMUREQzFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2OTA3OUUxOEYzNDBB
MjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc2OTA3OUExOEYzMUNCMjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZVVJ
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0U0RDIwNzFBNDY3NzYxMDBDN0YxNTIgLyog
QVBJTGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtOTg3Nyw2
ICs5ODg0LDcgQEAKIAkJCQk1MTVFNzcyQjE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMTVDNzE0MTkw
Rjg5RTQwMEVDQzUxNiAvKiBEYXRhYmFzZVByb2Nlc3NJT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1MUUzNTIwMjE4MEY1RDFFMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNzTWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjAxODBF
MDMxRDAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTdERDVCRTE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNz
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyQTk3NjkxODBFMDlCODAwMzlBMTQ5IC8q
IERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjE4ODI3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzMgQEAKKzIwMTctMDYtMjYgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhyZWUgbmV3IHRlc3RSdW5uZXIgZnVuY3Rpb25z
OgorICAgICAgICAtIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soKQor
ICAgICAgICAtIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCisgICAgICAgIC0gc2V0
U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKCkKKworICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2Fn
ZVRvUGFnZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NE
aWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTA2LTI2ICBKb25hdGhhbiBCZWRh
cmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjE4NzgzLgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIxODgyNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzYsNiArODM2LDggQEAgYm9vbCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpOwogCiAgICAgbV9vcGVu
UGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CisgICAgCisgICAgc3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKTsKIAogICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgp
LCBibGFua1VSTCgpKTsKICAgICBydW5VbnRpbChtX2RvbmVSZXNldHRpbmcsIG1fY3VycmVudElu
dm9jYXRpb24tPnNob3J0VGltZW91dCgpKTsKQEAgLTIyNzQsNiArMjI3NiwxMSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVNob3VsCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFp
bihob3N0TmFtZSwgdmFsdWUpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNz
RmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSkKIHsKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0yMjg0LDYgKzIyOTEs
MTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZAogICAgIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVl
KQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1do
ZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChk
b3VibGUgc2Vjb25kcykKIHsKICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxODgyNykKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTY0LDggKzE2NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29s
IHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7
CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9u
IDIxODgyNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYxLDYgKzEwNjEsMTEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0
aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSkgeworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpAQCAtMTA2OCw2ICsxMDcz
LDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgx
LDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsK
KyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFBy
ZXZhbGVudFJlc291cmNlcyIpKSkpOworICAgICAgICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSkpKTsKKyAgICAgICAgdW5zaWduZWQg
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3Az
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpKSkpOworICAgICAgICAKKyAgICAgICAgbV90
ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodG90YWxQcmV2YWxl
bnRSZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwg
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgp
KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE4ODI3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM2
LDYgKzYzNiw3IEBAIGVudW0gewogICAgIERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lE
LAogICAgIFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgU3Rh
dGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCisgICAgU3RhdGlzdGljc0RpZFJ1
blRlbGVtZXRyeUNhbGxiYWNrSUQsCiAgICAgRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxz
Q2FsbGJhY2tJRCwKICAgICBGaXJzdFVJU2NyaXB0Q2FsbGJhY2tJRCA9IDEwMAogfTsKQEAgLTEz
ODksNiArMTM5MCwzMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRTY2FuRGF0YVJl
CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRz
Q2FsbGJhY2tJRCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRS
dW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQoreworICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCBjYWxs
YmFjayk7Cit9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQgdG90
YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykKK3sKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisgICAgCisgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieyBc
InRvdGFsUHJldmFsZW50UmVzb3VyY2VzXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNlcyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIsIFwidG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
XCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCBcInRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zXCIgOiAiKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgfSIpOworICAgIAorICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSkpOworICAgIAorICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZyZXN1bHQpOworfQorICAgIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIi
KSk7CkBAIC0xNDI2LDYgKzE0NTEsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmly
ZVNob3VsZFBhcgogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVU
ZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NG
aXJlVGVsZW1ldHJ5SGFuZGxlciIpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCIpKTsKQEAgLTE0NDAsNiArMTQ3MSwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NTaG91bGRDbGFzCiAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNz
YWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKICAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQorICAg
IAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5
V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCIpKTsKKyAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3Zh
bChkb3VibGUgc2Vjb25kcykKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTg4MjcpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDExICszNDksMTQgQEAgcHVibGljOgogICAgIC8vIFJlc291cmNlIExvYWQg
U3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jk
c0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3Rp
Y3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2
b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBj
YWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFj
aygpOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKCk7Cisg
ICAgdm9pZCBzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQ
cmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMp
OwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAg
IHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwogICAg
IHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURv
bWFpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0
aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBp
c1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3RO
YW1lLCBib29sIHZhbHVlKTsKQEAgLTM2Nyw2ICszNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzVGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3Vi
bGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vj
b25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTg4MjcpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgaW50ZXJmYWNlIFRlc3RS
dW5uZXIgewogICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFs
bFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9i
amVjdCBjYWxsYmFjayk7CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICBib29s
ZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0
TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CkBAIC0yNjcsOCArMjY4LDEwIEBAIGludGVyZmFjZSBUZXN0
UnVubmVyIHsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKKyAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhbiB2YWx1ZSk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwoYm9vbGVhbiB2YWx1ZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUg
c2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJs
ZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTg4MjcpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNi0yNiAgSm9obiBX
aWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0
YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlv
bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAgICAgRW5hYmxl
ZCBoZXJlIHNpbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTct
MDYtMjYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKEFzeW5jSW1hZ2VEZWNvZGluZyk6IEEgdGFiIHdpdGggdGhlIFdXREMga2V5bm90ZSBw
YXVzZWQgaXMga2lsbGVkIGZvciB1c2luZyBleGNlc3NpdmUgcG93ZXIgKEltYWdlIHRocmFzaGlu
ZykKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxl
bWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdl
bmVyYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21h
aW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0g
ZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0
IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1Rlc3RzIHRoYXQgdGVsZW1ldHJ5
IGZvciBwcmV2YWxlbnQgcmVzb3VyY2VzIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZh
bGVudCByZXNvdXJjZXMuCitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMg
aXMgMAorUEFTUyB0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiBpcyAwCitQQVNTIHRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnMgaXMgMAorUEFTUyBIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMu
CitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgaXMgNAorUEFTUyB0ZXN0
UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiBpcyAxCitQ
QVNTIHRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgaXMgNAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVt
ZXRyeS1nZW5lcmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBUZWxlbWV0cnkgR2Vu
ZXJhdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10
ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9yIHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2Fs
Y3VsYXRlZCBjb3JyZWN0bHkuIik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBj
b25zdCB0b3BGcmFtZVVybDEgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3RlbXAiOworICAgIGNv
bnN0IHRvcEZyYW1lVXJsMiA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCI7CisgICAgY29u
c3QgdG9wRnJhbWVVcmwzID0gImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIjsKKyAgICBjb25z
dCB0b3BGcmFtZVVybDQgPSAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiOworICAgIGNvbnN0
IHByZXZhbGVudFJlc291cmNlVXJsMSA9ICJodHRwOi8vMTI3LjAuMS4xOjgwMDAvdGVtcCI7Cisg
ICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwyID0gImh0dHA6Ly8xMjcuMC4xLjI6ODAwMC90
ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNvdXJjZVVybDMgPSAiaHR0cDovLzEyNy4wLjEu
Mzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsNCA9ICJodHRwOi8v
MTI3LjAuMS40OjgwMDAvdGVtcCI7CisKKyAgICBmdW5jdGlvbiBjaGVja0luc3VmZmljaWVudENs
YXNzaWZpY2F0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDEpKSB7CisgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2
YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAg
fSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2
YWxlbnRSZXNvdXJjZVVybDIpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDIgZGlk
IG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIkhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAg
ICAgIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjaGVja1N1ZmZpY2llbnRDbGFzc2lmaWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAg
ICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFs
ZW50UmVzb3VyY2VVcmwxKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBu
b3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiSG9zdCAyIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50
IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50
UmVzb3VyY2VVcmwzKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3Qg
Z2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmw0KSkgeworICAgICAgICAgICAg
dGVzdEZhaWxlZCgiSG9zdCA0IGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJl
c291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCBy
ZXNvdXJjZXMuIik7CisgICAgICAgICAgICBydW5UZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRS
ZXNvdXJjZVVybCkgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291
cmNlVXJsLCB0b3BGcmFtZVVybDMpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1l
VXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDEpOworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJl
dmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVy
bCwgdG9wRnJhbWVVcmwzKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQp
OworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHBy
ZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDIpOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3Vy
Y2VVcmwsIHRvcEZyYW1lVXJsMyk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJh
bWVVcmw0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRVcEluc3VmZmljaWVudFN0YXRpc3Rp
Y3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNv
dXJjZVVybDEpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJs
Mik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVj
b3Jkc0NhbGxiYWNrKGNoZWNrSW5zdWZmaWNpZW50Q2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7
CisgICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxs
YmFjayhjaGVja0luc3VmZmljaWVudFRlbGVtZXRyeSk7CisgICAgICAgIHRlc3RSdW5uZXIuc3Rh
dGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHNldFVwU3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFr
ZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDMpOworICAgICAgICBtYWtlVXJsUHJl
dmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHByZXZhbGVudFJlc291cmNlVXJsNCwgdHJ1
ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVj
b3Jkc0NhbGxiYWNrKGNoZWNrU3VmZmljaWVudENsYXNzaWZpY2F0aW9uQW5kQ29udGludWUpOwor
ICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJh
Y2soY2hlY2tTdWZmaWNpZW50VGVsZW1ldHJ5KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0
aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cnVuVGVsZW1ldHJ5QW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGlj
c0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgfQorCisgICAgdmFyIHRlc3RSZXN1bHQ7Cisg
ICAgZnVuY3Rpb24gY2hlY2tJbnN1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAg
IHRlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFs
UHJldmFsZW50UmVzb3VyY2VzIiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQu
dG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjAiKTsKKyAgICAg
ICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMi
LCAiMCIpOworICAgICAgICBzZXRVcFN1ZmZpY2llbnRTdGF0aXN0aWNzQW5kQ29udGludWUoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1N1ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7
CisgICAgICAgIHRlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVz
dWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzIiwgIjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRl
c3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEi
KTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMiLCAiNCIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
dHJ1ZSk7CisgICAgICAgIHNldFVwSW5zdWZmaWNpZW50U3RhdGlzdGljc0FuZENvbnRpbnVlKCk7
CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJ
KHJldmlzaW9uIDIxODgyNykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsNiArNzA1LDcgQEAgaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvY2xhc3NpZnktYXMtcHJldmFsZW50LWJhc2VkLW9uLXN1YnJlc291cmNlLXVu
aXF1ZS1yZWRpcmVjdHMtdG8uaHRtbCBbIFBhc3MgXQogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0
bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1l
b3V0IF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRy
eS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25z
LCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0
MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313923</attachid>
            <date>2017-06-27 09:54:05 -0700</date>
            <delta_ts>2017-06-27 14:10:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173499-20170627095834.patch</filename>
            <type>text/plain</type>
            <size>73431</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTA2LTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJh
dGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5k
bGVyKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEZpcmVUZWxlbWV0cnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KToKKyAg
ICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0ZWxlbWV0cnkuCisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQg
c3RydWN0IFdlYkNvcmU6OlByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5LgorICAgICAgICAqIHBh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSk6CisgICAg
ICAgICAgICBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oOgor
CiAyMDE3LTA2LTI2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnMoKSBpcyBpbmVmZmljaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQs
NiArNTg0LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXIKICAg
ICB9KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKQoreworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBT
aG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBtX3N0b3JlLT5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworfQor
ICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVS
TCYgdXJsKQogewogICAgIHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9u
IDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFp
bnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVU
ZWxlbWV0cnlIYW5kbGVyKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3Rp
Y3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMs
NiArMjIzLDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmEKICAg
ICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRs
ZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVt
ZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCit7CisgICAgbV9m
aXJlVGVsZW1ldHJ5SGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKQEAgLTIzMiw2ICsyMzcsMTMgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVEYQogICAgIH0pOwogfQogCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fZmlyZVRlbGVtZXRyeUhhbmRs
ZXIpCisgICAgICAgIG1fZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRQYXJ0aXRpb25Db29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIHN0YXRpc3RpYykKIHsKICAgICByZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVz
b3VyY2UKQEAgLTM2MSw2ICszNzMsMzcgQEAgVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0bwogCiAgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKIH0KKyAgICAKK1Zl
Y3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZDsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHN0YXRp
c3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChz
dGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgdW5zaWduZWQgZGF5
c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24gPD0gMCA/IDAgOgorICAgICAgICAgICAgICAgIHN0ZDo6Zmxvb3IoKGN1cnJlbnRUaW1lKCkg
LSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikgLyBzZWNvbmRzUGVyRGF5KTsK
KyAgICAgICAgICAgIHNvcnRlZC5hcHBlbmQoUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoCisg
ICAgICAgICAgICAgICAgc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAg
ICAgICBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgICAgIGRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICAgICAgc3RhdGlzdGljLnN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgIHN0
YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKQorICAgICAgICAgICAg
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5p
bXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4gVmVjdG9y
PFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PigpOworCisgICAgc3RkOjpzb3J0KHNvcnRlZC5i
ZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikgeworICAgICAgICByZXR1
cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID4KKyAgICAgICAg
Yi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH0pOworICAg
IAorICAgIHJldHVybiBzb3J0ZWQ7Cit9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5zKQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNp
b24gMjE4ODI3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwyNSBAQCBjbGFzcyBLZXllZERl
Y29kZXI7CiBjbGFzcyBLZXllZEVuY29kZXI7CiBjbGFzcyBVUkw7CiAKK3N0YXRpYyBjb25zdCBh
dXRvIG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworICAgIAorc3Ry
dWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlRp
bWVzRGF0YVJlY29yZHNSZW1vdmVkOworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uOwor
ICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKKyAgICB1bnNpZ25lZCBzdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnM7CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bzsKKyAgICBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpCisgICAgICAgIDogbnVtYmVyT2ZU
aW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCgwKSwgaGFzSGFkVXNlckludGVyYWN0aW9uKDApLCBkYXlz
U2luY2VVc2VySW50ZXJhY3Rpb24oMCksIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMoMCks
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMoMCksIHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8oMCkKKyAgICB7CisgICAgfQorICAgIFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
KHVuc2lnbmVkIHJlY29yZHNSZW1vdmVkLCBib29sIHVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQg
ZGF5c1NpbmNlLCB1bnNpZ25lZCBzdWJmcmFtZSwgdW5zaWduZWQgc3VicmVzb3VyY2UsIHVuc2ln
bmVkIHVuaXF1ZVJlZGlyZWN0cykKKyAgICAgICAgOiBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNS
ZW1vdmVkKHJlY29yZHNSZW1vdmVkKSwgaGFzSGFkVXNlckludGVyYWN0aW9uKHVzZXJJbnRlcmFj
dGlvbiksIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbihkYXlzU2luY2UpLCBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zKHN1YmZyYW1lKSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
cyhzdWJyZXNvdXJjZSksIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8odW5pcXVlUmVkaXJl
Y3RzKQorICAgIHsKKyAgICB9Cit9OworICAgIAogc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M7CiAKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHsKQEAgLTY0LDggKzgz
LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBhcnRpdGlv
bkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9v
bCBjbGVhckZpcnN0KT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXcml0ZVBlcnNp
c3RlbnRTdG9yZUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpcmVU
ZWxlbWV0cnlDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVyKTsKIAogICAg
IHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBmaXJlVGVsZW1l
dHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3Vi
bGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShk
b3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKQEAgLTc3LDYgKzk4LDcgQEAgcHVibGljOgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJp
bmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigp
OworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4g
c29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBoYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3Ry
aW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9HcmFuZGZhdGhlcik7CkBAIC05
NSw2ICsxMTcsNyBAQCBwcml2YXRlOgogICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9z
aG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXI7CiAgICAgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0ZW50U3RvcmVIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXI7CisgICAg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZmlyZVRlbGVtZXRyeUhhbmRsZXI7CiAKICAgICBkb3Vi
bGUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIHsgMCB9OwogICAgIGRvdWJsZSBtX2xh
c3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAJKHJldmlzaW9uIDIxODgyNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzY3LDUgKzc2NywxMCBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpi
YWNrZ3JvdW5kCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgib3ZlcjcwIik7CiB9CiAKK1N0cmlu
ZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlL
ZXkoKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkiKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCShyZXZpc2lvbiAyMTg4
MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBTdHJpbmcgbWVtb3J5VXNhZ2VUb0RpYWdub3N0aWNMb2dnaW5nS2V5KHVpbnQ2NF90
IG1lbW9yeVVzYWdlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGZvcmVncm91
bmRDUFVVc2FnZVRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGJhY2tncm91bmRDUFVVc2FnZVRvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXkoZG91YmxlIGNwdVVzYWdlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODgyNykK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYx
IEBACisyMDE3LTA2LTI2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIHRlbGVtZXRyeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNDk5CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMjgyNjA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAgICAgQWRkZWQg
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisgICAgICAg
ICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5j
bWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgor
ICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6
Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQpOgorICAgICAgICAgICAgVGVz
dCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZp
cmVUZWxlbWV0cnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAgICAgQ29uZmlndXJlcyBhIHRpbWVyIGZv
ciB0ZWxlbWV0cnkgY2FwdHVyZS4gRmlyZXMgNSBzZWNvbmRzIGFmdGVyIGxhdW5jaAorICAgICAg
ICAgICAgYW5kIHRoZW4gZXZlcnkgMjQgaG91cnMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCk6CisgICAgICAgICAgICBWYXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAg
ICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAg
ICAgVmFyaWFibGUgcmVuYW1lZCBub3RpZnlQYWdlcyAtPiBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgICAgICBW
YXJpYWJsZSByZW5hbWVkIG5vdGlmeVBhZ2VzIC0+IG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCk6CisgICAgICAgICAgICAgQ2FsbHMgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCkuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Om51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Om1lZGlhbik6CisgICAgICAgIChXZWJLaXQ6Om5vbkVwaGVtZXJh
bFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OnN1Ym1pdFRvcExpc3QpOgorICAgICAg
ICAoV2ViS2l0OjpzdWJtaXRUb3BMaXN0cyk6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVBhZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6
Y2FsY3VsYXRlQW5kU3VibWl0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KwogMjAxNy0wNi0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zKCkgaXMgaW5lZmZpY2llbnQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZp
c2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogICAgIFVJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hl
Y2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBA
IGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0TWVu
dUxpc3RlbmVyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
Y3BwCiAKICAgICBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAK
IApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGxhdGZvcm1XUEUuY21ha2UJKHJldmlzaW9uIDIxODgyNykKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiAr
MTI3LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0xlZ2Fj
eVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcAog
ICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDEyIEBAIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGkKICAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKCJXZWJzaXRlRGF0YVNjYW5Gb3JUb3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluc0ZpbmlzaGVkIiwgbnVsbHB0cik7CiB9CiAgICAgCit2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCog
bWVzc2FnZUJvZHkpCit7CisgICAgZm9yIChhdXRvJiBwYWdlIDogZ2xvYmFsUGFnZU1hcCgpKQor
ICAgICAgICBwYWdlLnZhbHVlLT5wb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCIsIG1lc3NhZ2VCb2R5KTsKK30KKyAgICAK
IFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xp
ZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJiBwYWdlQ29uZmln
dXJhdGlvbikKIHsKICAgICB1aW50NjRfdCBwYWdlSUQgPSBnZW5lcmF0ZVBhZ2VJRCgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24g
MjE4ODI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBl
cnNpc3RlbnREYXRhU3RvcmVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBWZWN0b3I8U3Ry
aW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zLCBib29sIHNob3VsZE5vdGlmeVBh
Z2VzLCBGdW5jdGlvbjx2b2lkIChjb25zdCBIYXNoU2V0PFN0cmluZz4mKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CiAgICAgc3RhdGljIHZvaWQgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNX
aXRoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29s
IHNob3VsZE5vdGlmeVBhZ2UsIEZ1bmN0aW9uPHZvaWQoSGFzaFNldDxTdHJpbmc+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CisgICAgc3RhdGljIHZvaWQgbm90aWZ5UGFnZVN0YXRp
c3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCiAgICAg
dm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRl
cm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIx
ODgyNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMSArMTI0LDIxIEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmYKICAgICAgICAgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNv
b2tpZXNIYW5kbGVyKHtob3N0TmFtZX0sIHsgfSwgZmFsc2UpOwogfQogCit2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7CisgICAg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZVRlbGVt
ZXRyeUhhbmRsZXIoKTsKK30KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1
ZSkKIHsKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwogfQogCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsKK30KKyAg
ICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7CiAgICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CkBAIC0xNTEsNiArMTYxLDcgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6cgogICAgIFdlYkNvcmU6OlJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldE1pbmltdW1UaW1lQmV0d2VlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoNjApOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWRPYnNlcnZlcigpLnNldEdyYW5kZmF0aGVyaW5nVGltZSgzNjAwKTsKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoZmFsc2UpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGZhbHNlKTsKICAgICBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHRydWUpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmNsZWFySW5NZW1vcnlTdG9yZSgpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxODgyNykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmaXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9u
Q29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2
YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAgICBzdGF0
aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwor
ICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJv
b2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTg4MjcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1
ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDcsNyArNDgsNyBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgT3B0aW9uU2V0
PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZTsKLXN0YXRpYyBhdXRv
IG5vdGlmeVBhZ2VzID0gZmFsc2U7CitzdGF0aWMgYXV0byBub3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkID0gZmFsc2U7CiBzdGF0aWMgYXV0byBzaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHRydWU7CiAKIFJlZjxXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKQEAgLTU5LDcg
KzYwLDExIEBAIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3UKICAgICA6
IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogICAg
ICwgbV9zdGF0aXN0aWNzU3RvcmFnZVBhdGgocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSkKKyAgICAsIG1fdGVsZW1ldHJ5T25lU2hvdFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1ldHJ5VGltZXJGaXJlZCkKKyAg
ICAsIG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiB7CisgICAg
bV90ZWxlbWV0cnlPbmVTaG90VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7CisgICAgbV90ZWxlbWV0
cnlSZXBlYXRlZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQpAQCAt
NjgsNyArNzMsNyBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiAK
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgYWx3YXlzKQogewotICAgIG5vdGlmeVBhZ2VzID0g
YWx3YXlzOworICAgIG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBhbHdh
eXM7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQpAQCAt
MTE5LDcgKzEyNCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0K
IAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdl
YnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50
UmVzb3VyY2VEb21haW5zID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5
KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vi
c2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERh
dGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21h
aW5zKSwgbm90aWZ5UGFnZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKV0oY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSkgbXV0YWJsZSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9y
ZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwg
bm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKICAgICAgICAgICAgIC8vIEJ1dCBh
bHdheXMgdG91Y2ggdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgc3RvcmUgb24gdGhlIHdvcmtl
ciBxdWV1ZS4KICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVh
ZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVE
YXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29yZVN0
b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyh0b3BEb21haW5zKTsK
QEAgLTE0MCw3ICsxNDUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChub3RpZnlQYWdlcykgeworICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCkgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90
aWZ5UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOwogICAgICAgICAgICAg
fSk7CkBAIC0xOTMsNiArMTk4LDEwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZWcKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRo
ZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0oKSB7CiAgICAgICAgIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSgp
OwogICAgIH0pOworICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5zZXRGaXJlVGVs
ZW1ldHJ5Q2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7
CisgICAgICAgIC8vIFRoaXMgY2FuY2VscyB0aGUgb25lIHNob3QgdGltZXIgYW5kIGlzIG9ubHkg
aW50ZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisgICAgICAgIG1fdGVsZW1ldHJ5T25lU2hv
dFRpbWVyLnN0YXJ0T25lU2hvdCgxMDBfbXMpOworICAgIH0pOwogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZWdpc3RlclVzZXJEZWZh
dWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKQEAgLTIxNSw3ICsyMjQsNyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhCiAgICAgCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBt
YWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldICgpIG11dGFibGUgewotICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQ
YWdlcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoSGFz
aFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OnRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBub3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldIChIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CiAgICAgICAgICAgICAvLyBCdXQg
YWx3YXlzIHRvdWNoIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHN0b3JlIG9uIHRoZSB3b3Jr
ZXIgcXVldWUKICAgICAgICAgICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRvcERvbWFpbnMgPSBDcm9zc1RocmVh
ZENvcGllcjxIYXNoU2V0PFN0cmluZz4+Ojpjb3B5KHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zV2l0aFdlYnNpdGVEYXRhKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+Y29yZVN0b3JlKCkuaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0eU9yTm9TdG9yZShX
VEZNb3ZlKHRvcERvbWFpbnMpKTsKQEAgLTMzMCw0ICszMzksMTQgQEAgc3RkOjp1bmlxdWVfcHRy
PEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwogICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29k
ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3RGF0YS0+ZGF0YSgpKSwgcmF3
RGF0YS0+c2l6ZSgpKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnRlbGVtZXRyeVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgCisgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhj
b3JlU3RvcmUoKS5zdGF0aXN0aWNzTG9jaygpKTsKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KGNvcmVTdG9yZSgpKTsKKyAgICB9
KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAkocmV2aXNpb24gMjE4ODI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMCBA
QAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVJl
Y29yZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTk1LDYgKzk3LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHdyaXRlRW5jb2RlclRvRGlzayhXZWJDb3JlOjpLZXllZEVuY29kZXImLCBjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5
ZWREZWNvZGVyPiBjcmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBsYWJlbCkgY29u
c3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCB0ZWxlbWV0cnlUaW1lckZpcmVkKCk7CiAKICAgICBSZWY8V2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKICNp
ZiBIQVZFKENPUkVfUFJFRElDVElPTikKQEAgLTEwNSw2ICsxMDksOCBAQCBwcml2YXRlOgogICAg
IFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAgU3RyaW5nIG1fc3Rh
dGlzdGljc1N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCB7IGZhbHNlIH07CisgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5UmVwZWF0ZWRUaW1lcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworICAgIAorc3RhdGljIGF1dG8gbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2Fz
Q2FwdHVyZWQgPSBmYWxzZTsKKyAgICAKK3N0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5PiYgcmVzb3VyY2VzLCBzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJl
c291cmNlcy5pc0VtcHR5KCkgfHwgcmVzb3VyY2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNv
dXJjZXMuc2l6ZSgpIDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5z
aWduZWQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICBpZiAocmVzb3VyY2VzW2ldLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAg
ICAgICAgICAgICsrcmVzdWx0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
ICAgIAorc3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2KQor
eworICAgIGlmICh2LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHYuc2l6
ZSgpID09IDEpCisgICAgICAgIHJldHVybiB2WzBdOworICAgIAorICAgIGF1dG8gc2l6ZSA9IHYu
c2l6ZSgpOworICAgIGF1dG8gbWlkZGxlID0gc2l6ZSAvIDI7CisgICAgaWYgKHNpemUgJSAyKQor
ICAgICAgICByZXR1cm4gdlttaWRkbGVdOworICAgIHJldHVybiAodlttaWRkbGUgLSAxXSArIHZb
bWlkZGxlXSkgLyAyOworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0
b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWdu
ZWQgZW5kLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiYgc3RhdGlzdGljR2V0dGVyKQoreworICAgIGlmICh2
LmlzRW1wdHkoKSB8fCB2LnNpemUoKSA8IGJlZ2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFydDsKKyAg
ICBwYXJ0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZW5kIC0gYmVnaW4gKyAxKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8PSBlbmQ7ICsraSkKKyAgICAgICAgcGFydC51bmNoZWNr
ZWRBcHBlbmQoc3RhdGlzdGljR2V0dGVyKHZbaV0pKTsKKyAgICAKKyAgICByZXR1cm4gbWVkaWFu
KHBhcnQpOworfQorICAgIAorc3RhdGljIFdlYlBhZ2VQcm94eSogbm9uRXBoZW1lcmFsV2ViUGFn
ZVByb3h5KCkKK3sKKyAgICBhdXRvIHByb2Nlc3NQb29scyA9IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKTsKKyAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29s
c1swXTsKKyAgICBpZiAoIXByb2Nlc3NQb29sKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICBmb3IgKGF1dG8mIHdlYlByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWdlIDogd2ViUHJvY2Vzcy0+cGFnZXMoKSkgeworICAg
ICAgICAgICAgaWYgKHBhZ2UtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExp
c3QodW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wLCBjb25zdCBWZWN0b3I8UHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQor
eworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBb
XSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJu
IHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6RnVuY3Rp
b248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQo
Y29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnkmIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92
ZWRHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHQpIHsKKyAg
ICAgICAgcmV0dXJuIHQubnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Owor
ICAgIAorICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxKTsKKyAgICB1bnNp
Z25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2Vz
RnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAg
IHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZS
ZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dl
dHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1l
ZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBu
dW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1v
dmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNEYXRh
UmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVC
dWlsZGVyOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKKyAgICBw
cmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7
CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJlYW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbiIsCisgICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zIiwKKyAgICAgICAgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2lucywgMCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIlN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnMiLAorICAgICAgICB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsCisgICAgICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8sIDAsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkIiwKKyAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0RhdGFS
ZWNvcmRzUmVtb3ZlZCwgMCwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisgICAgCitzdGF0aWMgdm9p
ZCBzdWJtaXRUb3BMaXN0cyhjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+
JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIHN1Ym1pdFRvcExpc3QoMSwg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDMpCisgICAgICAg
IHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVBy
b3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbi5zaXplKCkgPCAxMCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExp
c3QoMTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkK
KyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJl
c291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwg
d2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBz
dWJtaXRUb3BMaXN0KDEwMCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworfQorICAg
IAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGlj
IG5vdGlmeVBhZ2VzKHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0
b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQoreworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNdIHsKKyAg
ICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2VCb2R5OworICAgICAgICBtZXNz
YWdlQm9keS5zZXQoQVNDSUlMaXRlcmFsKCJUb3RhbFByZXZhbGVudFJlc291cmNlcyIpLCBBUEk6
OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzKSk7CisgICAgICAgIG1lc3Nh
Z2VCb2R5LnNldChBU0NJSUxpdGVyYWwoIlRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbiIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICBtZXNzYWdlQm9keS5zZXQoQVNDSUlMaXRl
cmFsKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIpLCBBUEk6OlVJbnQ2NDo6Y3Jl
YXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7CisgICAgICAgIFdlYlByb2Nl
c3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rp
b25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAgIAorLy8g
VGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlm
eVBhZ2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7
CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtd
IChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4g
dC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAgbm90aWZ5
UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgdG90YWxOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zR2V0dGVyKSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRlZFByZXZhbGVudFJlc291cmNl
cyA9IHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5zb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeSgpOworICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpIDwgbWlu
aW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkgeworICAgICAgICBub3RpZnlQYWdl
cygwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb247CisgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVudFJlc291cmNl
cy5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcHJldmFsZW50UmVzb3VyY2VzRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uOworICAgIAorICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3Vy
Y2UgOiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKHByZXZhbGVudFJl
c291cmNlLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291
cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5hcHBlbmQocHJldmFsZW50UmVzb3VyY2UuZGF5
c1NpbmNlVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQo
cHJldmFsZW50UmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBhdXRvIHdlYlBhZ2VQcm94eSA9
IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgIGlmICghd2ViUGFnZVByb3h5KSB7Cisg
ICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIEFT
Q0lJTGl0ZXJhbCgidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlcyIpLCBzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCAwLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdl
UHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBBU0NJSUxpdGVyYWwoInRv
dGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiksIHByZXZh
bGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCksIDAsIFNob3VsZFNh
bXBsZTo6Tm8pOworICAgIAorICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2Vy
SW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKKyAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgQVNDSUlMaXRlcmFsKCJ0b3BQcmV2YWxlbnRSZXNvdXJj
ZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSwgcHJldmFsZW50
UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uWzBdLCAwLCBTaG91bGRTYW1wbGU6Ok5v
KTsKKyAgICBpZiAocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNp
emUoKSA+IDEpCisgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5S2V5KCksIEFTQ0lJTGl0ZXJhbCgibWVkaWFuUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiIpLCBtZWRpYW4ocHJldmFsZW50UmVz
b3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKSwgMCwgU2hvdWxkU2FtcGxlOjpObyk7Cisg
ICAgCisgICAgc3VibWl0VG9wTGlzdHMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAqd2ViUGFnZVByb3h5KTsK
KyAgICAKKyAgICBpZiAobm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpCisgICAg
ICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uLnNpemUoKSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkID0gYWx3YXlzOworfQorICAgIAorfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgCituYW1lc3BhY2UgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSB7CisgICAgCit2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1p
dChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmKTsKK3ZvaWQgc2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCk7CisgICAgCit9OworICAg
IAorfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjE4ODI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDExIEBA
IHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmUKICAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
Rm9yT25lRG9tYWluKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSwgdmFsdWUpOwogfQogCit2b2lkIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpCit7Cisg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVy
KCk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh2YWx1ZSk7CkBAIC0xMjYsNiArMTMxLDExIEBAIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldFMKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwo
dmFsdWUpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlX
YXNDYXB0dXJlZCh2YWx1ZSk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlckNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxODgyNykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBAIGV4dGVybiAiQyIg
ewogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7
CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihXS1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CiAgICAgV0tfRVhQT1JUIHZvaWQg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0
dXJlZChib29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIFdLX0VY
UE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKICAgICBXS19FWFBP
UlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODI3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzEx
ODksOCBAQAogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZG
MTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJNjU5
QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENs
aWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2Fk
Q2xpZW50LmNwcCAqLzsgfTsKIAkJNjVCODZGMUUxMkYxMURFMzAwQjdERDhBIC8qIFdLQnVuZGxl
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2QjgyMUREQzFFRUYw
NUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkI4MjFEREExRUVGMDVE
RDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAqLzsgfTsK
KwkJNkI4MjFEREQxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwICovOyB9OwogCQk2QkJCQUQzODFFQzNFNTc4MDBBRDBBMkEgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCQkJBRDM3MUVDM0U1NjMwMEFEMEEyQSAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tICovOyB9OwogCQk2QkU5Njk5QzFF
NDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5OUIxRTQzQjNG
RjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2QkU5Njk5RTFFNDNCNDFE
MDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkU5Njk5RDFFNDNCNDFEMDA4
Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi87IH07CkBAIC0z
NDc4LDYgKzM0ODAsOCBAQAogCQk2NTQ2QTgyQTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5k
bGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxODEy
RjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QjgyMUREQjFFRUYw
NUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJCQkFEMzcxRUMzRTU2MzAwQUQwQTJBIC8q
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5Njk5QjFFNDNCM0ZG
MDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAv
KiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg2MCw2ICs2ODY0LDggQEAKIAkJCQk3QTlD
RDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cCAqLywKIAkJCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLywKKwkJCQk2QjgyMUREQTFF
RUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICov
LAorCQkJCTZCODIxRERCMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcCAqLywKIAkJCQk1MUQxMjQyNDFFNkQzQ0MzMDAyQjI4MjAgLyogV2Vi
VVJMU2NoZW1lSGFuZGxlci5jcHAgKi8sCiAJCQkJNTFEMTI0MjUxRTZEM0NDMzAwMkIyODIwIC8q
IFdlYlVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQk1MUU4QjY4RDFFNzEyODczMDAxQjcxMzIg
LyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8sCkBAIC04MjQ2LDYgKzgyNTIsNyBAQAogCQkJCTJE
QUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBBUElIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBBQkE1QzIgLyogQVBJSGl0VGVzdFJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzc3NTEyMzExREYwREVFMjAwOEEzNTFDIC8qIEFQSUluamVjdGVk
QnVuZGxlRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QjgyMUREQzFFRUYwNURE
MDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzc2OTA3OUUxOEYzNDBBMjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVuZGxl
Rm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2OTA3OUExOEYzMUNCMjAwMURGRjA0
IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0U0RDIwNzFBNDY3NzYxMDBDN0YxNTIgLyogQVBJTGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtOTg3Nyw2ICs5ODg0LDcgQEAKIAkJCQk1MTVFNzcyQjE4NDAw
OEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMTVDNzE0MTkwRjg5RTQwMEVDQzUxNiAvKiBEYXRhYmFzZVByb2Nl
c3NJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUUzNTIwMjE4MEY1RDFFMDBFNTNCRTkgLyog
RGF0YWJhc2VQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNkI4MjFEREQxRUVGMDVE
RDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTEyQTk3NjAxODBFMDMxRDAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTdERDVCRTE4MERBN0Qz
MDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTEyQTk3NjkxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4ODI3KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDYtMjYgIEpvaG4gV2ls
YW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzOiBBZGQgdGVsZW1ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzM0OTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyODI2MDk0Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhy
ZWUgbmV3IHRlc3RSdW5uZXIgZnVuY3Rpb25zOgorICAgICAgICAtIGluc3RhbGxTdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soKQorICAgICAgICAtIHN0YXRpc3RpY3NGaXJlVGVsZW1l
dHJ5SGFuZGxlcigpCisgICAgICAgIC0gc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVt
ZXRyeVdhc0NhcHR1cmVkKCkKKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayk6
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxl
cik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnN0YXRp
c3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgor
CiAyMDE3LTA2LTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjE4NzgzLgpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MzYsNiArODM2LDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAog
ICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CisgICAg
CisgICAgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAogICAgIFdLUGFnZUxv
YWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgpKTsKICAgICBydW5VbnRpbCht
X2RvbmVSZXNldHRpbmcsIG1fY3VycmVudEludm9jYXRpb24tPnNob3J0VGltZW91dCgpKTsKQEAg
LTIyNzQsNiArMjI3NiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVNo
b3VsCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihob3N0TmFtZSwgdmFsdWUpOwogfQogCit2b2lk
IFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQoreworICAg
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwor
fQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCh2YWx1ZSk7CkBAIC0yMjg0LDYgKzIyOTEsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0
U3RhdGlzdGljc1Nob3VsZAogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiB9
CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxl
bWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCh2YWx1ZSk7
Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKICAgICBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChzZWNvbmRzKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHJldmlzaW9uIDIxODgyNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDggKzE2NCwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9p
ZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9p
ZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWlu
KFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NG
aXJlVGVsZW1ldHJ5SGFuZGxlcigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7Cisg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
Ym9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRh
dGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYxLDYgKzEwNjEs
MTEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIiKSkg
eworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0ZpcmVUZWxl
bWV0cnlIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3Rp
Y3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAg
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwpAQCAtMTA2OCw2ICsxMDczLDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
VGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQiKSkgeworICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAg
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDIxODgyNykKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRp
ZFJlY2VpdmVNZXNzYWdlVG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMg
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlcyIpKSkpOworICAgICAg
ICB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAo
dW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24iKSkpKTsKKyAgICAgICAgdW5zaWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyIp
KSkpOworICAgICAgICAKKyAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVs
ZW1ldHJ5Q2FsbGJhY2sodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFcnJvciIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNz
YWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIp
KTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdl
dCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE4
ODI3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM2LDYgKzYzNiw3IEBAIGVudW0gewogICAgIERpZFJl
bW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRh
UmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxi
YWNrSUQsCisgICAgU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsCiAgICAgRGlk
UmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwKICAgICBGaXJzdFVJU2NyaXB0
Q2FsbGJhY2tJRCA9IDEwMAogfTsKQEAgLTEzODksNiArMTM5MCwzMCBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhT
dGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2tJRCk7CiB9CiAKK3ZvaWQgVGVzdFJ1
bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVm
IGNhbGxiYWNrKQoreworICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRS
dW5UZWxlbWV0cnlDYWxsYmFja0lELCBjYWxsYmFjayk7Cit9CisgICAgCit2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayh1bnNpZ25lZCB0b3RhbFByZXZh
bGVudFJlc291cmNlcywgdW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykKK3sK
KyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CisgICAgCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgieyBcInRvdGFsUHJldmFsZW50UmVzb3VyY2VzXCIgOiAi
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNl
cyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIFwidG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZE51bWJlcih0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBcInRvcDNTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zXCIgOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0b3Az
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgfSIpOworICAgIAorICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VG
cm9tSlNPTlN0cmluZyhjb250ZXh0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIAorICAgIGNhbGxUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZy
ZXN1bHQpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NG
aXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIiKSk7CkBAIC0xNDI2LDYgKzE0NTEsMTIgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcgogICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlciIpKTsKKyAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKTsKQEAgLTE0NDAsNiArMTQ3
MSwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzCiAgICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKTsKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOwogfQorICAgIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlX
YXNDYXB0dXJlZCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOworICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKHZhbHVlKTsKK30KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRp
bWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CShyZXZpc2lvbiAyMTg4MjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDExICszNDksMTQgQEAgcHVi
bGljOgogICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0
YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2sp
OwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVs
ZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
RGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZFNj
YW5EYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgdm9pZCBzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2sodW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIHRv
dGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcigpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9v
bCB2YWx1ZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShK
U1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKQEAgLTM2Nyw2ICsz
NzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZUNvb2tpZVBh
cnRpdGlvbkZyZWUoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2Fw
dHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3
ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dy
YW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCShyZXZpc2lvbiAyMTg4MjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
NiArMjUzLDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIC8vIFJlc291cmNlIExvYWQg
U3RhdGlzdGljcwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jk
c0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0Rp
ZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CisgICAgdm9pZCBpbnN0
YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1l
LCBib29sZWFuIHZhbHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CkBAIC0yNjcs
OCArMjY4LDEwIEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHN0YXRpc3RpY3NG
aXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oRE9NU3RyaW5nIGhvc3ROYW1l
LCBib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxl
cigpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhbiB2YWx1ZSk7Cisg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
Ym9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVl
bkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTg4MjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAxNy0wNi0yNiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEFkZCB0ZWxlbWV0cnkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzQ5OQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzI4MjYwOTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1n
ZW5lcmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICAgICAgRW5hYmxlZCBoZXJlIHNpbmNlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTctMDYtMjYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKEFzeW5jSW1hZ2VEZWNvZGluZyk6IEEg
dGFiIHdpdGggdGhlIFdXREMga2V5bm90ZSBwYXVzZWQgaXMga2lsbGVkIGZvciB1c2luZyBleGNl
c3NpdmUgcG93ZXIgKEltYWdlIHRocmFzaGluZykKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi1leHBlY3RlZC50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbgorbWFp
biBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlk
SGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9y
RnJhbWUKK1Rlc3RzIHRoYXQgdGVsZW1ldHJ5IGZvciBwcmV2YWxlbnQgcmVzb3VyY2VzIGlzIGNh
bGN1bGF0ZWQgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBIb3N0cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuCitQQVNTIHRlc3RSZXN1
bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXMgaXMgMAorUEFTUyB0ZXN0UmVzdWx0LnRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiBpcyAwCitQQVNTIHRlc3RSZXN1bHQu
dG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgaXMgMAorUEFTUyBIb3N0cyBjbGFzc2lm
aWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuCitQQVNTIHRlc3RSZXN1bHQudG90YWxQcmV2YWxl
bnRSZXNvdXJjZXMgaXMgNAorUEFTUyB0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbiBpcyAxCitQQVNTIHRlc3RSZXN1bHQudG9wM1N1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnMgaXMgNAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2Vu
ZXJhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0
aXRsZT5UZXN0IGZvciBUZWxlbWV0cnkgR2VuZXJhdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBz
cmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0ZWxlbWV0cnkgZm9y
IHByZXZhbGVudCByZXNvdXJjZXMgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkuIik7CisgICAganNU
ZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCB0b3BGcmFtZVVybDEgPSAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3RlbXAiOworICAgIGNvbnN0IHRvcEZyYW1lVXJsMiA9ICJodHRwOi8vMTI3
LjAuMC4yOjgwMDAvdGVtcCI7CisgICAgY29uc3QgdG9wRnJhbWVVcmwzID0gImh0dHA6Ly8xMjcu
MC4wLjM6ODAwMC90ZW1wIjsKKyAgICBjb25zdCB0b3BGcmFtZVVybDQgPSAiaHR0cDovLzEyNy4w
LjAuNDo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZhbGVudFJlc291cmNlVXJsMSA9ICJodHRw
Oi8vMTI3LjAuMS4xOjgwMDAvdGVtcCI7CisgICAgY29uc3QgcHJldmFsZW50UmVzb3VyY2VVcmwy
ID0gImh0dHA6Ly8xMjcuMC4xLjI6ODAwMC90ZW1wIjsKKyAgICBjb25zdCBwcmV2YWxlbnRSZXNv
dXJjZVVybDMgPSAiaHR0cDovLzEyNy4wLjEuMzo4MDAwL3RlbXAiOworICAgIGNvbnN0IHByZXZh
bGVudFJlc291cmNlVXJsNCA9ICJodHRwOi8vMTI3LjAuMS40OjgwMDAvdGVtcCI7CisKKyAgICBm
dW5jdGlvbiBjaGVja0luc3VmZmljaWVudENsYXNzaWZpY2F0aW9uQW5kQ29udGludWUoKSB7Cisg
ICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2
YWxlbnRSZXNvdXJjZVVybDEpKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IDEgZGlk
IG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShwcmV2YWxlbnRSZXNvdXJjZVVybDIpKSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJIb3N0IDIgZGlkIG5vdCBnZXQgY2xhc3NpZmllZCBhcyBwcmV2YWxl
bnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkhvc3RzIGNsYXNzaWZpZWQgYXMgcHJldmFs
ZW50IHJlc291cmNlcy4iKTsKKyAgICAgICAgICAgIHJ1blRlbGVtZXRyeUFuZENvbnRpbnVlKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1N1ZmZpY2llbnRDbGFzc2lm
aWNhdGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwxKSkgeworICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiSG9zdCAxIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50
IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50
UmVzb3VyY2VVcmwyKSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCAyIGRpZCBub3Qg
Z2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVzb3VyY2VVcmwzKSkgeworICAgICAgICAgICAg
dGVzdEZhaWxlZCgiSG9zdCAzIGRpZCBub3QgZ2V0IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJl
c291cmNlLiIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UocHJldmFsZW50UmVz
b3VyY2VVcmw0KSkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCA0IGRpZCBub3QgZ2V0
IGNsYXNzaWZpZWQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJIb3N0
cyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZXMuIik7CisgICAgICAgICAgICBydW5U
ZWxlbWV0cnlBbmRDb250aW51ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
bWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybCkgeworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJldmFsZW50UmVz
b3VyY2VVcmwsIHRvcEZyYW1lVXJsMSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJh
bWVVcmwyKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDMpOworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJl
dmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsNCk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVudFJlc291cmNl
VXJsLCB0b3BGcmFtZVVybDEpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJs
Mik7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhwcmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmwzKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByZXZhbGVu
dFJlc291cmNlVXJsLCB0b3BGcmFtZVVybDQpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmV2YWxlbnRSZXNvdXJjZVVy
bCwgdG9wRnJhbWVVcmwxKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByZXZhbGVudFJlc291cmNlVXJsLCB0b3BGcmFtZVVy
bDIpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4ocHJldmFsZW50UmVzb3VyY2VVcmwsIHRvcEZyYW1lVXJsMyk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihw
cmV2YWxlbnRSZXNvdXJjZVVybCwgdG9wRnJhbWVVcmw0KTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzZXRVcEluc3VmZmljaWVudFN0YXRpc3RpY3NBbmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFr
ZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJjZVVybDEpOworICAgICAgICBtYWtlVXJsUHJl
dmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsMik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0
YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrSW5zdWZmaWNpZW50
Q2xhc3NpZmljYXRpb25BbmRDb250aW51ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0
YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhjaGVja0luc3VmZmljaWVudFRlbGVtZXRy
eSk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNldFVwU3VmZmljaWVudFN0YXRpc3RpY3NB
bmRDb250aW51ZSgpIHsKKyAgICAgICAgbWFrZVVybFByZXZhbGVudChwcmV2YWxlbnRSZXNvdXJj
ZVVybDMpOworICAgICAgICBtYWtlVXJsUHJldmFsZW50KHByZXZhbGVudFJlc291cmNlVXJsNCk7
CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
KHByZXZhbGVudFJlc291cmNlVXJsNCwgdHJ1ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0
YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrU3VmZmljaWVudENs
YXNzaWZpY2F0aW9uQW5kQ29udGludWUpOworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soY2hlY2tTdWZmaWNpZW50VGVsZW1ldHJ5KTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVsZW1ldHJ5QW5kQ29udGludWUoKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAg
fQorCisgICAgdmFyIHRlc3RSZXN1bHQ7CisgICAgZnVuY3Rpb24gY2hlY2tJbnN1ZmZpY2llbnRU
ZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgICAg
IHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzIiwgIjAiKTsKKyAg
ICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG9wM1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiMCIpOworICAgICAgICBzZXRVcFN1ZmZpY2ll
bnRTdGF0aXN0aWNzQW5kQ29udGludWUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1N1
ZmZpY2llbnRUZWxlbWV0cnkocmVzdWx0KSB7CisgICAgICAgIHRlc3RSZXN1bHQgPSByZXN1bHQ7
CisgICAgICAgIHNob3VsZEJlKCJ0ZXN0UmVzdWx0LnRvdGFsUHJldmFsZW50UmVzb3VyY2VzIiwg
IjQiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1bHQudG90YWxQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uIiwgIjEiKTsKKyAgICAgICAgc2hvdWxkQmUoInRlc3RSZXN1
bHQudG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLCAiNCIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQodHJ1ZSk7CisgICAgICAgIHNldFVwSW5zdWZmaWNp
ZW50U3RhdGlzdGljc0FuZENvbnRpbnVlKCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxODgyNykKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDUs
NiArNzA1LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xhc3NpZnktYXMtcHJldmFs
ZW50LWJhc2VkLW9uLXN1YnJlc291cmNlLXVuaXF1ZS1yZWRpcmVjdHMtdG8uaHRtbCBbIFBhc3Mg
XQogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVt
b3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0
NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJp
bmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIF0KIAog
IyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUg
ZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
      

    </bug>

</bugzilla>