<?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>187835</bug_id>
          
          <creation_ts>2018-07-19 17:39:16 -0700</creation_ts>
          <short_desc>Resource Load Statistics: Enable basic functionality in experimental debug mode</short_desc>
          <delta_ts>2018-07-20 20:11:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1443621</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-19 17:39:16 -0700</bug_when>
    <thetext>We should make the experimental debug mode feature work, at least to a basic level. This means:
- Debug logging on the INFO level.
- Permanently treat 3rdpartytestwebkit.org as a prevalent resource.
- Support manual setting of a custom permanently prevalent resource through user defaults on Cocoa platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443622</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-19 17:39:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/42408590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443627</commentid>
    <comment_count>2</comment_count>
      <attachid>345411</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-19 18:02:55 -0700</bug_when>
    <thetext>Created attachment 345411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443783</commentid>
    <comment_count>3</comment_count>
      <attachid>345452</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 09:46:41 -0700</bug_when>
    <thetext>Created attachment 345452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443784</commentid>
    <comment_count>4</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 09:47:09 -0700</bug_when>
    <thetext>An attempt to fix the non-Cocoa builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443855</commentid>
    <comment_count>5</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 11:27:08 -0700</bug_when>
    <thetext>Failing Window tests are unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443896</commentid>
    <comment_count>6</comment_count>
      <attachid>345452</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 13:09:55 -0700</bug_when>
    <thetext>Comment on attachment 345452
Patch

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

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:54
&gt; +static auto debugStaticPrevalentResource { &quot;3rdpartytestwebkit.org&quot; };

I&apos;d prefer static const char* instead of static auto in this case, to be safe. Also, the variable name should probably include &quot;Host&quot;.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:323
&gt; +bool ResourceLoadStatisticsMemoryStore::debugModeOverride(ResourceLoadStatistics&amp; resourceStatistic)

The method name is not clear here.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;

Should this be &amp;&amp; instead of ||, I am unclear here.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:988
&gt; +static void debugLogDomainsInBatches(const String&amp; message, const Vector&lt;String&gt;&amp; domains)

Should the first parameter be a const char* ?
Also, wouldn&apos;t &quot;action&quot; be a better name for this parameter?

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1001
&gt; +    batch.reserveCapacity(maxNumberOfDomainsInOneLogStatement);

reserveInitialCapacity() since this is a brand new vector.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1003
&gt; +    auto totalNumberOfBatches = domains.size() / maxNumberOfDomainsInOneLogStatement + (domains.size() % maxNumberOfDomainsInOneLogStatement &gt; 0 ? 1 : 0);

unsigned numberOfBatches = std::ceil(domains.size() / static_cast&lt;float&gt;(maxNumberOfDomainsInOneLogStatement)); ?

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1008
&gt; +            batch.clear();

[PERF] batch.shrink(0); to clear the items but maintain the capacity.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; +            batchNumber++;

nit: ++batchNumber;

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1013
&gt; +    if (batch.size() &gt; 0)

!batch.isEmpty()

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:116
&gt; +    bool resourceLoadStatisticsDebugMode() const { return m_debugModeEnabled; };

bool isDebugModeEnabled() const;

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:148
&gt; +    bool debugModeOverride(WebCore::ResourceLoadStatistics&amp;);

confusing naming.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();

Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:188
&gt; +    String m_debugManualPrevalentResource { };

{ } is not needed.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:95
&gt; +    m_debugModeEnabled = m_memoryStore.resourceLoadStatisticsDebugMode();

Do we need a m_debugModeEnabled data member? Could we always get its value from the memory store?

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.h:55
&gt; +    void setResourceLoadStatisticsDebugMode(bool enable) { m_debugModeEnabled = enable; };

Confusing naming. Suggesting setIsDebugModeEnabled(bool);

&gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:187
&gt; +void WebResourceLoadStatisticsStore::setPrevalentResourceDebugOverride(const WebCore::URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

Confusing naming.

&gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:191
&gt; +    postTask([this, url, completionHandler = WTFMove(completionHandler)]() mutable {

you&apos;re passing a URL to another thread here without isolatedCopy...

&gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:193
&gt; +            m_memoryStore-&gt;setPrevalentResourceDebugOverride(url.host().toString());

So we do not need to use ResourceLoadStatistics::primaryDomain() here?

&gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h:136
&gt; +    void setPrevalentResourceDebugOverride(const WebCore::URL&amp; host, CompletionHandler&lt;void()&gt;&amp;&amp;);

const WebCore::URL&amp; vs host

Make up your mind :)

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1517
&gt;      if (m_resourceLoadStatistics)

You fail to call the completion handler in the else case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443902</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 13:48:08 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; Comment on attachment 345452 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:54
&gt; &gt; +static auto debugStaticPrevalentResource { &quot;3rdpartytestwebkit.org&quot; };
&gt; 
&gt; I&apos;d prefer static const char* instead of static auto in this case, to be
&gt; safe. Also, the variable name should probably include &quot;Host&quot;.

Got it.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:323
&gt; &gt; +bool ResourceLoadStatisticsMemoryStore::debugModeOverride(ResourceLoadStatistics&amp; resourceStatistic)
&gt; 
&gt; The method name is not clear here.

I agree.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; 
&gt; Should this be &amp;&amp; instead of ||, I am unclear here.

It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:988
&gt; &gt; +static void debugLogDomainsInBatches(const String&amp; message, const Vector&lt;String&gt;&amp; domains)
&gt; 
&gt; Should the first parameter be a const char* ?

I could.

&gt; Also, wouldn&apos;t &quot;action&quot; be a better name for this parameter?

Maybe. I can change it.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1001
&gt; &gt; +    batch.reserveCapacity(maxNumberOfDomainsInOneLogStatement);
&gt; 
&gt; reserveInitialCapacity() since this is a brand new vector.

My mistake.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1003
&gt; &gt; +    auto totalNumberOfBatches = domains.size() / maxNumberOfDomainsInOneLogStatement + (domains.size() % maxNumberOfDomainsInOneLogStatement &gt; 0 ? 1 : 0);
&gt; 
&gt; unsigned numberOfBatches = std::ceil(domains.size() /
&gt; static_cast&lt;float&gt;(maxNumberOfDomainsInOneLogStatement)); ?

Nice.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1008
&gt; &gt; +            batch.clear();
&gt; 
&gt; [PERF] batch.shrink(0); to clear the items but maintain the capacity.

Go it.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt; +            batchNumber++;
&gt; 
&gt; nit: ++batchNumber;

Got it. Is this for style reasons?

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1013
&gt; &gt; +    if (batch.size() &gt; 0)
&gt; 
&gt; !batch.isEmpty()

Got it.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:116
&gt; &gt; +    bool resourceLoadStatisticsDebugMode() const { return m_debugModeEnabled; };
&gt; 
&gt; bool isDebugModeEnabled() const;
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:148
&gt; &gt; +    bool debugModeOverride(WebCore::ResourceLoadStatistics&amp;);
&gt; 
&gt; confusing naming.

Yup. Will fix.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; 
&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot;
&gt; and is not marked as const.

I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():

void ResourceLoadStatisticsMemoryStore::clear()
{
    ...
    auto primaryDomainsToBlock = setDebugModePrevalentResources();
    updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
}

Any thoughts on how we make this nicer?

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:188
&gt; &gt; +    String m_debugManualPrevalentResource { };
&gt; 
&gt; { } is not needed.

Got it.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.cpp:95
&gt; &gt; +    m_debugModeEnabled = m_memoryStore.resourceLoadStatisticsDebugMode();
&gt; 
&gt; Do we need a m_debugModeEnabled data member? Could we always get its value
&gt; from the memory store?

Maybe. Let me have a look. It would be nice since we would avoid any out-of-sync situations.

&gt; &gt; Source/WebKit/UIProcess/ResourceLoadStatisticsPersistentStorage.h:55
&gt; &gt; +    void setResourceLoadStatisticsDebugMode(bool enable) { m_debugModeEnabled = enable; };
&gt; 
&gt; Confusing naming. Suggesting setIsDebugModeEnabled(bool);

Got it.

&gt; &gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:187
&gt; &gt; +void WebResourceLoadStatisticsStore::setPrevalentResourceDebugOverride(const WebCore::URL&amp; url, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
&gt; 
&gt; Confusing naming.

Yup.

&gt; &gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:191
&gt; &gt; +    postTask([this, url, completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; you&apos;re passing a URL to another thread here without isolatedCopy...

Got it.

&gt; &gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp:193
&gt; &gt; +            m_memoryStore-&gt;setPrevalentResourceDebugOverride(url.host().toString());
&gt; 
&gt; So we do not need to use ResourceLoadStatistics::primaryDomain() here?

Since it&apos;s a developer facing thing, I just reckoned they&apos;ll figure it out.

&gt; &gt; Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h:136
&gt; &gt; +    void setPrevalentResourceDebugOverride(const WebCore::URL&amp; host, CompletionHandler&lt;void()&gt;&amp;&amp;);
&gt; 
&gt; const WebCore::URL&amp; vs host
&gt; 
&gt; Make up your mind :)

Will do.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1517
&gt; &gt;      if (m_resourceLoadStatistics)
&gt; 
&gt; You fail to call the completion handler in the else case.

Oups. Will fix.

Thanks, Chris!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443903</commentid>
    <comment_count>8</comment_count>
      <attachid>345452</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 13:54:06 -0700</bug_when>
    <thetext>Comment on attachment 345452
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt;&gt; 
&gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; 
&gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?

Ok, just making sure.

&gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt;&gt;&gt; +            batchNumber++;
&gt;&gt; 
&gt;&gt; nit: ++batchNumber;
&gt; 
&gt; Got it. Is this for style reasons?

Yes, webkit style. For some types it could also be more efficient but not here since it is is a builtin.

&gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt;&gt; 
&gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; 
&gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; 
&gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; {
&gt;     ...
&gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; }
&gt; 
&gt; Any thoughts on how we make this nicer?

Hard for me to come up with names since I am not 100% sure that these things actually do :) Let me take a shot though:
Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443905</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 13:56:50 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #8)
&gt; Comment on attachment 345452 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; &gt;&gt; 
&gt; &gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; &gt; 
&gt; &gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?
&gt; 
&gt; Ok, just making sure.
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt;&gt;&gt; +            batchNumber++;
&gt; &gt;&gt; 
&gt; &gt;&gt; nit: ++batchNumber;
&gt; &gt; 
&gt; &gt; Got it. Is this for style reasons?
&gt; 
&gt; Yes, webkit style. For some types it could also be more efficient but not
&gt; here since it is is a builtin.
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; &gt;&gt; 
&gt; &gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; &gt; 
&gt; &gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; &gt; 
&gt; &gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; &gt; {
&gt; &gt;     ...
&gt; &gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt; &gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Any thoughts on how we make this nicer?
&gt; 
&gt; Hard for me to come up with names since I am not 100% sure that these things
&gt; actually do :) Let me take a shot though:
&gt; Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?

Oops, typo:

Vector&lt;String&gt; prevalentResourcesSetByDebugMode() const;
or
Vector&lt;String&gt; prevalentResourcesSetForDebugMode() const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443911</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 14:06:58 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Chris Dumez from comment #8)
&gt; &gt; Comment on attachment 345452 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt; &gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; &gt; &gt; 
&gt; &gt; &gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?
&gt; &gt; 
&gt; &gt; Ok, just making sure.
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt; &gt;&gt;&gt; +            batchNumber++;
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; nit: ++batchNumber;
&gt; &gt; &gt; 
&gt; &gt; &gt; Got it. Is this for style reasons?
&gt; &gt; 
&gt; &gt; Yes, webkit style. For some types it could also be more efficient but not
&gt; &gt; here since it is is a builtin.
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt; &gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; &gt; &gt; 
&gt; &gt; &gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; &gt; &gt; 
&gt; &gt; &gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; &gt; &gt; {
&gt; &gt; &gt;     ...
&gt; &gt; &gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt; &gt; &gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; &gt; &gt; }
&gt; &gt; &gt; 
&gt; &gt; &gt; Any thoughts on how we make this nicer?
&gt; &gt; 
&gt; &gt; Hard for me to come up with names since I am not 100% sure that these things
&gt; &gt; actually do :) Let me take a shot though:
&gt; &gt; Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?
&gt; 
&gt; Oops, typo:
&gt; 
&gt; Vector&lt;String&gt; prevalentResourcesSetByDebugMode() const;
&gt; or
&gt; Vector&lt;String&gt; prevalentResourcesSetForDebugMode() const;

But it can&apos;t be const since it&apos;s setting members of the store. Let me explain what it&apos;s doing.

setDebugModePrevalentResources() is a function that, if debug mode is enabled, sets 3rdpartytestwebkit.org and any custom domain added through setPrevalentResourceDebugOverride() as prevalent. It is used to make sure that what ever you do, those two domains remain prevalent in debug mode. If you clear all history, the clear() function is called and setDebugModePrevalentResources() immediately sets the two domains to prevalent again.

The reason why I return a vector is to not have to iterate through the store again to find the one or two newly set prevalent resources. But maybe I can conditionalize it on debug mode and only then iterate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443912</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 14:09:59 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #10)
&gt; (In reply to Chris Dumez from comment #9)
&gt; &gt; (In reply to Chris Dumez from comment #8)
&gt; &gt; &gt; Comment on attachment 345452 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt; &gt; &gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?
&gt; &gt; &gt; 
&gt; &gt; &gt; Ok, just making sure.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt; &gt; &gt;&gt;&gt; +            batchNumber++;
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; nit: ++batchNumber;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Got it. Is this for style reasons?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, webkit style. For some types it could also be more efficient but not
&gt; &gt; &gt; here since it is is a builtin.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt; &gt; &gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; &gt; &gt; &gt; {
&gt; &gt; &gt; &gt;     ...
&gt; &gt; &gt; &gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt; &gt; &gt; &gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Any thoughts on how we make this nicer?
&gt; &gt; &gt; 
&gt; &gt; &gt; Hard for me to come up with names since I am not 100% sure that these things
&gt; &gt; &gt; actually do :) Let me take a shot though:
&gt; &gt; &gt; Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?
&gt; &gt; 
&gt; &gt; Oops, typo:
&gt; &gt; 
&gt; &gt; Vector&lt;String&gt; prevalentResourcesSetByDebugMode() const;
&gt; &gt; or
&gt; &gt; Vector&lt;String&gt; prevalentResourcesSetForDebugMode() const;
&gt; 
&gt; But it can&apos;t be const since it&apos;s setting members of the store. Let me
&gt; explain what it&apos;s doing.
&gt; 
&gt; setDebugModePrevalentResources() is a function that, if debug mode is
&gt; enabled, sets 3rdpartytestwebkit.org and any custom domain added through
&gt; setPrevalentResourceDebugOverride() as prevalent. It is used to make sure
&gt; that what ever you do, those two domains remain prevalent in debug mode. If
&gt; you clear all history, the clear() function is called and
&gt; setDebugModePrevalentResources() immediately sets the two domains to
&gt; prevalent again.
&gt; 
&gt; The reason why I return a vector is to not have to iterate through the store
&gt; again to find the one or two newly set prevalent resources. But maybe I can
&gt; conditionalize it on debug mode and only then iterate?

Ok, another attempt then:
void setPrevalentResourcesForDebugMode(Vector&lt;String&gt;&amp; prevalentResources);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443916</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 14:12:37 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; (In reply to John Wilander from comment #10)
&gt; &gt; (In reply to Chris Dumez from comment #9)
&gt; &gt; &gt; (In reply to Chris Dumez from comment #8)
&gt; &gt; &gt; &gt; Comment on attachment 345452 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt; &gt; &gt; &gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Ok, just making sure.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt; &gt; &gt; &gt;&gt;&gt; +            batchNumber++;
&gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt;&gt; nit: ++batchNumber;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Got it. Is this for style reasons?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, webkit style. For some types it could also be more efficient but not
&gt; &gt; &gt; &gt; here since it is is a builtin.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt; &gt; &gt; &gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; &gt; &gt; &gt; &gt; {
&gt; &gt; &gt; &gt; &gt;     ...
&gt; &gt; &gt; &gt; &gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt; &gt; &gt; &gt; &gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; &gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Any thoughts on how we make this nicer?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Hard for me to come up with names since I am not 100% sure that these things
&gt; &gt; &gt; &gt; actually do :) Let me take a shot though:
&gt; &gt; &gt; &gt; Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?
&gt; &gt; &gt; 
&gt; &gt; &gt; Oops, typo:
&gt; &gt; &gt; 
&gt; &gt; &gt; Vector&lt;String&gt; prevalentResourcesSetByDebugMode() const;
&gt; &gt; &gt; or
&gt; &gt; &gt; Vector&lt;String&gt; prevalentResourcesSetForDebugMode() const;
&gt; &gt; 
&gt; &gt; But it can&apos;t be const since it&apos;s setting members of the store. Let me
&gt; &gt; explain what it&apos;s doing.
&gt; &gt; 
&gt; &gt; setDebugModePrevalentResources() is a function that, if debug mode is
&gt; &gt; enabled, sets 3rdpartytestwebkit.org and any custom domain added through
&gt; &gt; setPrevalentResourceDebugOverride() as prevalent. It is used to make sure
&gt; &gt; that what ever you do, those two domains remain prevalent in debug mode. If
&gt; &gt; you clear all history, the clear() function is called and
&gt; &gt; setDebugModePrevalentResources() immediately sets the two domains to
&gt; &gt; prevalent again.
&gt; &gt; 
&gt; &gt; The reason why I return a vector is to not have to iterate through the store
&gt; &gt; again to find the one or two newly set prevalent resources. But maybe I can
&gt; &gt; conditionalize it on debug mode and only then iterate?
&gt; 
&gt; Ok, another attempt then:
&gt; void setPrevalentResourcesForDebugMode(Vector&lt;String&gt;&amp; prevalentResources);

Yeah, I considered that one early on but it&apos;s confusing in its own way since it looks like your setting something to that vector. Maybe I can rename the vector something-something-result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443920</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 14:16:07 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #12)
&gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; (In reply to John Wilander from comment #10)
&gt; &gt; &gt; (In reply to Chris Dumez from comment #9)
&gt; &gt; &gt; &gt; (In reply to Chris Dumez from comment #8)
&gt; &gt; &gt; &gt; &gt; Comment on attachment 345452 [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=345452&amp;action=review
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:549
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; +    m_debugLoggingEnabled = m_debugLoggingEnabled || enable;
&gt; &gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Should this be &amp;&amp; instead of ||, I am unclear here.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; It should be || because I don&apos;t what a setResourceLoadStatisticsDebugMode(false) to turn off debug logging if debug logging has been turned on through other means such as User Defaults. Should I add a comment?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Ok, just making sure.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1009
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; +            batchNumber++;
&gt; &gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt; nit: ++batchNumber;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Got it. Is this for style reasons?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Yes, webkit style. For some types it could also be more efficient but not
&gt; &gt; &gt; &gt; &gt; here since it is is a builtin.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:149
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; +    Vector&lt;String&gt; setDebugModePrevalentResources();
&gt; &gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Super confusing to have something that returns a Vector, starts with &quot;set&quot; and is not marked as const.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; I know. :( This was me trying to fix the existing call to updateCookiePartitioningForDomains() in clear():
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; void ResourceLoadStatisticsMemoryStore::clear()
&gt; &gt; &gt; &gt; &gt; &gt; {
&gt; &gt; &gt; &gt; &gt; &gt;     ...
&gt; &gt; &gt; &gt; &gt; &gt;     auto primaryDomainsToBlock = setDebugModePrevalentResources();
&gt; &gt; &gt; &gt; &gt; &gt;     updateCookiePartitioningForDomains({ }, primaryDomainsToBlock, { }, ShouldClearFirst::Yes, []() { });
&gt; &gt; &gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Any thoughts on how we make this nicer?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Hard for me to come up with names since I am not 100% sure that these things
&gt; &gt; &gt; &gt; &gt; actually do :) Let me take a shot though:
&gt; &gt; &gt; &gt; &gt; Vector&lt;String&gt; prevalentResourceSetByDebugMode() const; ?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Oops, typo:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Vector&lt;String&gt; prevalentResourcesSetByDebugMode() const;
&gt; &gt; &gt; &gt; or
&gt; &gt; &gt; &gt; Vector&lt;String&gt; prevalentResourcesSetForDebugMode() const;
&gt; &gt; &gt; 
&gt; &gt; &gt; But it can&apos;t be const since it&apos;s setting members of the store. Let me
&gt; &gt; &gt; explain what it&apos;s doing.
&gt; &gt; &gt; 
&gt; &gt; &gt; setDebugModePrevalentResources() is a function that, if debug mode is
&gt; &gt; &gt; enabled, sets 3rdpartytestwebkit.org and any custom domain added through
&gt; &gt; &gt; setPrevalentResourceDebugOverride() as prevalent. It is used to make sure
&gt; &gt; &gt; that what ever you do, those two domains remain prevalent in debug mode. If
&gt; &gt; &gt; you clear all history, the clear() function is called and
&gt; &gt; &gt; setDebugModePrevalentResources() immediately sets the two domains to
&gt; &gt; &gt; prevalent again.
&gt; &gt; &gt; 
&gt; &gt; &gt; The reason why I return a vector is to not have to iterate through the store
&gt; &gt; &gt; again to find the one or two newly set prevalent resources. But maybe I can
&gt; &gt; &gt; conditionalize it on debug mode and only then iterate?
&gt; &gt; 
&gt; &gt; Ok, another attempt then:
&gt; &gt; void setPrevalentResourcesForDebugMode(Vector&lt;String&gt;&amp; prevalentResources);
&gt; 
&gt; Yeah, I considered that one early on but it&apos;s confusing in its own way since
&gt; it looks like your setting something to that vector. Maybe I can rename the
&gt; vector something-something-result.

Vector&lt;String&gt; ensurePrevalentResourcesForDebugMode();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443957</commentid>
    <comment_count>14</comment_count>
      <attachid>345489</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 16:48:48 -0700</bug_when>
    <thetext>Created attachment 345489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443958</commentid>
    <comment_count>15</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 16:49:11 -0700</bug_when>
    <thetext>I hope I got all the things fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443962</commentid>
    <comment_count>16</comment_count>
      <attachid>345489</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-20 16:55:22 -0700</bug_when>
    <thetext>Comment on attachment 345489
Patch

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

r=me

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:323
&gt; +bool ResourceLoadStatisticsMemoryStore::isDebugModeOverride(ResourceLoadStatistics&amp; resourceStatistic)

Still unclear IMO. maybe isPrevalentDueToDebugMode() ?

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:999
&gt; +    batch.reserveCapacity(maxNumberOfDomainsInOneLogStatement);

reserveInitialCapacity

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:1007
&gt; +            batchNumber++;

++batchNumber

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.cpp:-968
&gt; -#if !RELEASE_LOG_DISABLED

Shouldn&apos;t we keep this?

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:116
&gt; +    bool resourceLoadStatisticsDebugMode() const { return m_debugModeEnabled; };

isDebugModeEnabled()

boolean getters without a prefix are very unclear.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:117
&gt; +    void setPrevalentResourceForDebugMode(const String&amp;);

I would keep the parameter name for clarity here.

&gt; Source/WebKit/UIProcess/ResourceLoadStatisticsMemoryStore.h:188
&gt; +    String m_debugManualPrevalentResource { };

Unnecessary { }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443974</commentid>
    <comment_count>17</comment_count>
      <attachid>345493</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 17:17:27 -0700</bug_when>
    <thetext>Created attachment 345493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443975</commentid>
    <comment_count>18</comment_count>
      <attachid>345493</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-07-20 17:19:11 -0700</bug_when>
    <thetext>Comment on attachment 345493
Patch

Thanks, Chris! Fixed the remaining issues except for the extra #if !RELEASE_LOG_DISABLED. It makes the function unused on non-Cocoa platforms and I check in the function where the log statements are anyway.

I&apos;ll wait for the bots to go green before putting on the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444005</commentid>
    <comment_count>19</comment_count>
      <attachid>345493</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-20 20:10:59 -0700</bug_when>
    <thetext>Comment on attachment 345493
Patch

Clearing flags on attachment: 345493

Committed r234080: &lt;https://trac.webkit.org/changeset/234080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444006</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-20 20:11:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345411</attachid>
            <date>2018-07-19 18:02:55 -0700</date>
            <delta_ts>2018-07-20 09:46:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187835-20180719180254.patch</filename>
            <type>text/plain</type>
            <size>46497</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNmYjhlNmNhOGI3MDA5MWM3
OWYzMDk5NjhmNjkwMzg0ZWQ3ODc5MzcuLjFjOWE3YmRjMzA4NjUwYzZiM2FhMGJkYjk5NDY1N2Q4
MGMwNjA0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTgtMDctMTkgIEpvaG4gV2ls
YW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzOiBFbmFibGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBpbiBleHBlcmltZW50YWwgZGVidWcg
bW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3
ODM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MjQwODU5MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBleHBl
cmltZW50YWwgSVRQIERlYnVnIE1vZGUgZmVhdHVyZSB3b3JrLCBhdCBsZWFzdAorICAgICAgICB0
byBhIGJhc2ljIGxldmVsLiBUaGlzIG1lYW5zOgorICAgICAgICAtIERlYnVnIGxvZ2dpbmcgb24g
dGhlIElORk8gbGV2ZWwuCisgICAgICAgIC0gUGVybWFuZW50bHkgdHJlYXQgM3JkcGFydHl0ZXN0
d2Via2l0Lm9yZyBhcyBhIHByZXZhbGVudCByZXNvdXJjZS4KKyAgICAgICAgLSBTdXBwb3J0IG1h
bnVhbCBzZXR0aW5nIG9mIGEgY3VzdG9tIHBlcm1hbmVudGx5IHByZXZhbGVudCByZXNvdXJjZSB0
aHJvdWdoIHVzZXIKKyAgICAgICAgICBkZWZhdWx0cyBvbiBDb2NvYSBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAg
ICAgKFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVX
aXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSk6CisgICAg
ICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5l
ZWRlZCk6CisgICAgICAgICAgICBVc2VkIHRvIHBpY2sgdXAgY3VzdG9tIHNldCBwcmV2YWxlbnQg
cmVzb3VyY2Ugb24gQ29jb2EgcGxhdGZvcm1zIChmb3IgZGVidWcgbW9kZSkuCisgICAgICAgICog
VUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGVidWdNb2RlT3Zl
cnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgTm93IHNr
aXBzIHByb2Nlc3Npbmcgb2YgZGVidWcgbW9kZSBwcmV2YWxlbnQgcmVzb3VyY2VzIHNvIHRoYXQg
dGhleQorICAgICAgICAgICAgc3RheSBwcmV2YWxlbnQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGVidWdNb2RlUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIG1ha2UgM3JkcGFydHl0
ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3RvbSBkb21haW4KKyAgICAgICAgICAgIHNldCB0aHJv
dWdoIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2VEZWJ1Z092ZXJyaWRlKCkKKyAgICAgICAgICAgIGJlIHByZXZhbGVudCByZXNvdXJjZXMuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKToKKyAgICAgICAgICAgIFNldHMgYSBjdXN0b20gZG9tYWluIHRvIGFsd2F5cyBiZSB0cmVh
dGVkIGFzIHByZXZhbGVudCBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKToKKyAgICAgICAgICAgIE5vdyBtYWtl
cyBzdXJlIDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYW5kIGFueSBjdXN0b20gZG9tYWluIHNldCB0
aHJvdWdoCisgICAgICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSgpCisgICAgICAgICAgICBhcmUgcHJldmFs
ZW50IHJlc291cmNlcyBldmVuIGFmdGVyIGEgY2xlYXIgb2YgdGhlIHN0b3JlLgorICAgICAgICAo
V2ViS2l0OjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMpOgorICAgICAgICAgICAgV2UgbWF5IGhh
dmUgdG9vIG1hbnkgZG9tYWluIG5hbWVzIHRvIGZpdCBpbiBhIHNpbmdsZSBsb2cgc3RhdGVtZW50
LgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBsb2dzIHRoZW0gaW4gYmF0Y2hlcyBvZiA1MCwg
aWYgd2UgaGF2ZSBtb3JlIHRoYW4gNTAuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKToKKyAgICAgICAg
ICAgIE5vdyBtYWtlcyB1c2Ugb2YgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCkgaW4gZGVidWcg
bW9kZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSBjb25zdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAgICAgIE5vdyBw
aWNrcyB1cCBkZWJ1ZyBtb2RlIGZyb20gdGhlIG1lbW9yeSBzdG9yZSBzbyB0aGF0CisgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnBvcHVsYXRlTWVt
b3J5U3RvcmVGcm9tRGlzaygpCisgICAgICAgICAgICBkb2Vzbid0IGFzc2VydCB0aGF0IHRoZSBt
ZW1vcnkgc3RvcmUgaXMgZW1wdHkgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpwb3B1bGF0ZU1lbW9yeVN0b3Jl
RnJvbURpc2spOgorICAgICAgICAgICAgTm93IGFjY2VwdHMgYSBub24tZW1wdHkgbWVtb3J5IHN0
b3JlIGluIGRlYnVnIG1vZGUuIFRoaXMgaXMgdG8gc3VwcG9ydCBhCisgICAgICAgICAgICBwcmUt
cG9wdWxhdGVkIHN0b3JlIHdpdGggM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3Rv
bSBkb21haW4gYWxyZWFkeQorICAgICAgICAgICAgc2V0IGFzIHByZXZhbGVudC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE4LTA3
LTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBTUEkgdG8gZGVmZXIgcnVubmluZyBhc3luYyBzY3JpcHQgdW50aWwgYWZ0ZXIgZG9jdW1lbnQg
bG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggYTU0ZWNiYzI2NmRhYjBhOGJhZjIzYzc0NTVlYmVlNDRj
MTMwMjMyMC4uMzQ5NmVjODMxOTJhOGQ0YzYzZjhhZGZmY2E3OGQ1YTQ1Y2RjZmYxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCkBAIC02OSw2ICs2OSwzMSBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tXZWJzaXRlRGF0YVN0b3JlUmVmCiAgICAg
V2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShlbmFibGUpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVXaXRoQ29tcGxldGlvbkhhbmRsZXIoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUsIHZvaWQqIGNvbnRleHQsIFdLV2Vi
c2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBhdXRvKiBzdG9yZSA9IFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPndl
YnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9y
ZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBzdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShlbmFibGUsIFtjb250ZXh0LCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICB9KTsKK30KKwordm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3Qs
IHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5j
dGlvbiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvKiBzdG9yZSA9IFdlYktpdDo6dG9J
bXBsKGRhdGFTdG9yZVJlZiktPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCk7CisgICAgaWYgKCFzdG9yZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzdG9yZS0+c2V0UHJldmFs
ZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpVUkwoKSwgV2Vi
S2l0Ojp0b0ltcGwoaG9zdCktPnN0cmluZygpKSwgW2NvbnRleHQsIGNvbXBsZXRpb25IYW5kbGVy
XSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgIH0pOworfQogdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgZG91YmxlIHNlY29uZHMsIHZv
aWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2VlbkZ1bmN0aW9u
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHN0b3JlID0gV2ViS2l0Ojp0b0ltcGwo
ZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgKaW5kZXggNWI3NDYyMGJkYmM5MjBmYmVmODJhOGVlMmJmZmEwMzNhYTA4YzU2
ZC4uODA0ZTYzYWJmZDkzNDlkMjMxMzAxYzMzMzU5OWQzZDkyMzE0YzA0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgK
QEAgLTQwLDYgKzQwLDkgQEAgV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNp
dGVEYXRhU3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkKIFdLX0VYUE9SVCBib29s
IFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7Cit0eXBlZGVmIHZvaWQgKCpX
S1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24pKHZvaWQqIGZ1bmN0
aW9uQ29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlV2l0aENvbXBsZXRpb25IYW5kbGVyKFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlLCB2b2lkKiBjb250ZXh0LCBXS1dl
YnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlvbkhhbmRs
ZXIpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNp
dGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlvbkhhbmRsZXIp
OyAgICAKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2Vl
bkZ1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBk
YXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzLCB2b2lkKiBjb250
ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzTGFzdFNlZW5GdW5jdGlvbiBjb21wbGV0
aW9uSGFuZGxlcik7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2VGdW5jdGlvbikodm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KaW5kZXggZTZiMTQ1OTQ4YmQ3
OWMyODdiZjJlZDk0MWZkNWQxMTM5N2NlNTNlMS4uMzA4Nzk5MWE1ZjFjODQyZGIxZGY5YTA1NjA2
MmUxOTE4ZGQ4YjRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29j
b2EubW0KQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTEsNiArNTIsOSBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCgpCiAKICAgICAgICAgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z0xvZ2dpbmdFbmFibGVkIl0pOwogICAgICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJv
b2xGb3JLZXk6QCJFeHBlcmltZW50YWxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIl0p
OworICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VE
ZWJ1Z092ZXJyaWRlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICBzZXRT
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIkV4cGVyaW1lbnRhbFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5h
YmxlZCJdKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDlmMGM3
ZjBiNjRkYTQxMTA5MzkxMmIxNmI2Zjc4M2YxMWFlYzJhNTIuLjIyYTkwYzNlYjdhYzVkMDk4YmVj
ZjI4MGE4YmFlMjI2NDIwZTA4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApAQCAtNTEs
NiArNTEsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0lu
UmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwogY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRp
c3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKIGNvbnN0ZXhwciB1bnNpZ25lZCBvcGVy
YXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07CiBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5j
ZSB7IDMgfTsKK3N0YXRpYyBhdXRvIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyAiM3Jk
cGFydHl0ZXN0d2Via2l0Lm9yZyIgfTsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogc3Rh
dGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMp
CkBAIC0zMTksMTMgKzMyMCwyNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbgogICAgIH0KIH0K
IAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRlYnVnTW9kZU92ZXJy
aWRlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIGlm
ICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IHNob3VsZEFsd2F5c01hcmtQcmV2YWxlbnQgPSAocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVs
RG9tYWluID09IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0aXN0
aWMuaGlnaExldmVsRG9tYWluID09IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgJiYg
IXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2U7CisgICAgaWYgKHNob3VsZEFs
d2F5c01hcmtQcmV2YWxlbnQpCisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKworICAgIHJldHVybiBz
aG91bGRBbHdheXNNYXJrUHJldmFsZW50OworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7CiAgICAgICAgIGZv
ciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1
ZXMoKSkgewotICAgICAgICAgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSkgeworICAgICAgICAgICAgaWYgKCFkZWJ1Z01vZGVPdmVycmlkZShyZXNvdXJj
ZVN0YXRpc3RpYykgJiYgIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNl
KSB7CiAgICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2
YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwogICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFBy
ZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8gUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdzsKICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3Rp
YywgY3VycmVudFByZXZhbGVuY2UpOwpAQCAtNTA3LDEzICs1MjAsNTIgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0
YShDb21wbGV0aW8KICAgICB9KTsKIH0KIAorVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXREZWJ1Z01vZGVQcmV2YWxlbnRSZXNvdXJjZXMoKQorewor
ICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
VmVjdG9yPFN0cmluZz4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21haW5z
VG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byYgc3RhdGljU2Vz
b3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIHNldFByZXZhbGVudFJlc291cmNl
KHN0YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsK
KyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGljUHJl
dmFsZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihtX2RlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZhbGVu
dFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9j
azsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Cisg
ICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHx8IGVuYWJs
ZTsKKworICAgIHNldERlYnVnTW9kZVByZXZhbGVudFJlc291cmNlcygpOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJJVFAgRGVidWcgTW9kZSAle3B1YmxpY31zLiIsIChlbmFibGUgPyAiZW5hYmxl
ZCIgOiAiZGlzYWJsZWQiKSk7CisjZW5kaWYKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShjb25zdCBT
dHJpbmcmIGRvbWFpbikKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOwor
ICAgIGF1dG8mIHJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKwogI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJJVFAgRGVidWcgTW9kZSAle3B1Ymxp
Y31zLiIsIChtX2RlYnVnTW9kZUVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Cisg
ICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0
ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQ
IERlYnVnIE1vZGUuIiwgZG9tYWluLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiB9CiAKQEAgLTg5
MSw3ICs5NDMsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xl
YXIoKQogICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKIAogICAgIHJlbW92ZUFsbFN0b3Jh
Z2VBY2Nlc3MoKTsKLSAgICB1cGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JEb21haW5zKHsgfSwg
eyB9LCB7IH0sIFNob3VsZENsZWFyRmlyc3Q6OlllcywgW10oKSB7IH0pOworCisgICAgYXV0byBw
cmltYXJ5RG9tYWluc1RvQmxvY2sgPSBzZXREZWJ1Z01vZGVQcmV2YWxlbnRSZXNvdXJjZXMoKTsK
KyAgICB1cGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JEb21haW5zKHsgfSwgcHJpbWFyeURvbWFp
bnNUb0Jsb2NrLCB7IH0sIFNob3VsZENsZWFyRmlyc3Q6OlllcywgW10oKSB7IH0pOwogfQogCiBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6d2FzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBj
dXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdApAQCAt
OTM1LDYgKzk4OSwzNCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdAogICAgIHJldHVybiBzdGF0
aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zLmNvbnRhaW5zKGZpcnN0UGFy
dHlQcmltYXJ5RG9tYWluKTsKIH0KIAorc3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRj
aGVzKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMp
Cit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQgPSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChkb21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0
YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3I6ICV7cHVibGljfXMuIiwgbWVzc2FnZS51dGY4KCkuZGF0YSgpLCBkb21haW5zVG9T
dHJpbmcoZG9tYWlucykudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgVmVjdG9yPFN0cmluZz4gYmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2ZUNhcGFjaXR5
KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKKyAgICBhdXRvIGJhdGNoTnVt
YmVyID0gMTsKKyAgICBhdXRvIHRvdGFsTnVtYmVyT2ZCYXRjaGVzID0gZG9tYWlucy5zaXplKCkg
LyBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCArIChkb21haW5zLnNpemUoKSAl
IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50ID4gMCA/IDEgOiAwKTsKKworICAg
IGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2guc2l6ZSgp
ID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7
cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQg
b2YgJWx1KTogJXtwdWJsaWN9cy4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCksIGJhdGNoTnVtYmVy
LCB0b3RhbE51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGJhdGNoLmNsZWFyKCk7CisgICAgICAgICAgICBiYXRjaE51bWJl
cisrOworICAgICAgICB9CisgICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOworICAgIH0KKyAg
ICBpZiAoYmF0Y2guc2l6ZSgpID4gMCkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1YmxpY31kIG9mICVsdSk6ICV7cHVibGljfXMuIiwg
bWVzc2FnZS51dGY4KCkuZGF0YSgpLCBiYXRjaE51bWJlciwgdG90YWxOdW1iZXJPZkJhdGNoZXMs
IGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7Cit9CisKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVQYXJ0aXRpb25pbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtOTY4LDExICsxMDUwLDExIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVQYXJ0aXRpb25pbmcoQ29t
cGxldGlvbkhhbmRsCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgaWYgKG1fZGVidWdM
b2dnaW5nRW5hYmxlZCkgewogICAgICAgICBpZiAoIWRvbWFpbnNUb1BhcnRpdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvIHBhcnRpdGlvbiBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zVG9QYXJ0aXRpb24pLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJwYXJ0
aXRpb24iLCBkb21haW5zVG9QYXJ0aXRpb24pOwogICAgICAgICBpZiAoIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYmxvY2sgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcoZG9tYWluc1RvQmxvY2spLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9j
ayIsIGRvbWFpbnNUb0Jsb2NrKTsKICAgICAgICAgaWYgKCFkb21haW5zVG9OZWl0aGVyUGFydGl0
aW9uTm9yQmxvY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBuZWl0aGVyIHBhcnRpdGlvbiBub3Ig
YmxvY2sgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBk
b21haW5zVG9TdHJpbmcoZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygibmVpdGhlciBw
YXJ0aXRpb24gbm9yIGJsb2NrIiwgZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKTsK
ICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAppbmRleCA0YTA4YjdiNTZiMzE1
MzRjNTQ1YzgzN2VhNzBlN2Q3OGIzNjk3NWM0Li5hMWZmMWVhNGRkMTI1ODY4ZDA5NGRiNmUyNGIz
ZGI2OTQxMzdhZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaApAQCAtMTEzLDYgKzExMyw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChTZWNvbmRzKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKICAg
ICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CisgICAgYm9v
bCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1
Z01vZGVFbmFibGVkOyB9OworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN0
cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFy
eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN0cmlu
ZyYmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJik7CkBAIC0xNDMs
NiArMTQ1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVy
bmFsKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1By
b21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAg
ICB2b2lkIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBib29sIGRlYnVnTW9kZU92ZXJyaWRlKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBzZXRE
ZWJ1Z01vZGVQcmV2YWxlbnRSZXNvdXJjZXMoKTsKICAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJ
Zk5lZWRlZCgpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJik7CkBAIC0xODEs
NiArMTg1LDcgQEAgcHJpdmF0ZToKICAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdU
aW1lc3RhbXA7CiAgICAgYm9vbCBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgbV9kZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlIHsgfTsKICAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21w
dHNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQg
eyBmYWxzZSB9OwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJl
bW92ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAppbmRleCAyOWFjYWUw
MTRmMmIwM2U4NmI0MzNiZDRkOGFkZWJiMTYzMGQ3YjE3Li40YTQ1YWYwNzZiNmNmZjMzOTc5N2U2
ZDNlMTIxMDRhZWM5NDBhM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5j
cHAKQEAgLTkwLDYgKzkwLDkgQEAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIG1fbWVtb3J5U3RvcmUuc2V0UGVyc2lzdGVudFN0
b3JhZ2UoKnRoaXMpOworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBoZXJlIHNpbmNlIHBv
cHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzaygpCisgICAgLy8gZXhwZWN0cyB0aGUgbWVtb3J5IHN0
b3JlIHRvIGJlIGVtcHR5IGV4Y2VwdCBpbiBkZWJ1ZyBtb2RlLgorICAgIG1fZGVidWdNb2RlRW5h
YmxlZCA9IG1fbWVtb3J5U3RvcmUucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpOwog
CiAgICAgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCk7CiAgICAgc3RhcnRNb25pdG9yaW5n
RGlzaygpOwpAQCAtMjM1LDcgKzIzOCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlOjpwb3B1bGF0ZU1lbW9yeVN0b3JlRnJvbURpc2soKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlz
RW1wdHkoKSwgIlRoaXMgaXMgdGhlIGluaXRpYWwgaW1wb3J0IHNvIHRoZSBzdG9yZSBzaG91bGQg
YmUgZW1wdHkiKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fbWVtb3J5U3RvcmUuaXNFbXB0
eSgpIHx8IG1fZGVidWdNb2RlRW5hYmxlZCwgIlRoaXMgaXMgdGhlIGluaXRpYWwgaW1wb3J0IHNv
IHRoZSBzdG9yZSBzaG91bGQgYmUgZW1wdHkiKTsKICAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0
aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7CiAKICAgICBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5
bmNUaW1lID0gcmVhZFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCmluZGV4
IDEyYWE5YjhhZWMyZmQ1MDAxZjFkMmNjNmFhMzNkYmIyNzI4ZWU2YmUuLjM1ODZhOTRkNDA5NmY4
NWExNGExZDc0YmM5N2UzYTQwM2Q0ZmM4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5oCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEZvcmNlSW1t
ZWRpYXRlV3JpdGUgeyBObywgWWVzLCB9OwogICAgIHZvaWQgc2NoZWR1bGVPcldyaXRlTWVtb3J5
U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSk7CiAKKyAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpIHsgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5h
YmxlOyB9OworCiBwcml2YXRlOgogICAgIFN0cmluZyBzdG9yYWdlRGlyZWN0b3J5UGF0aCgpIGNv
bnN0OwogICAgIFN0cmluZyByZXNvdXJjZUxvZ0ZpbGVQYXRoKCkgY29uc3Q7CkBAIC03Miw2ICs3
NCw3IEBAIHByaXZhdGU6CiAgICAgV2FsbFRpbWUgbV9sYXN0U3RhdGlzdGljc0ZpbGVTeW5jVGlt
ZTsKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFN0YXRpc3RpY3NXcml0ZVRpbWU7CiAgICAgYm9v
bCBtX2hhc1BlbmRpbmdXcml0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJs
ZWQgeyBmYWxzZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggYjA5YWU0YTI2
YzkyYzljYWU3Yjc5OGUxNjRjYTdmNzM1MmEzZDU3OC4uN2I4OTliMjFkZDczNTA5M2EyNTZjZDM4
NjBiNmJjYmNhYzAyM2YxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0xNjksMTMgKzE2OSwz
MSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95
UGVyc2lzdGVudFN0b3JlKCkKICAgICBzZW1hcGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHko
KSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUpCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29s
IHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHBvc3RUYXNrKFt0aGlzLCB2
YWx1ZV0geworICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fcGVy
c2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKICAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUo
Y29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAor
ICAgIHBvc3RUYXNrKFt0aGlzLCB1cmwsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQor
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKHVybC5ob3N0KCkudG9TdHJpbmcoKSk7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCmluZGV4IDVkYzhkOWQyZjY3MTQ5ZmZlOTViNzE2MzMzMzZkODc1OGVjNTNlMDUuLjcx
OWQ0ODQ2MDhhYzMwY2ZjZGU0ZjE4YmRjYTFhOWFlYmQ2NDg4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
CkBAIC0xMzIsOCArMTMyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldFBhcmFtZXRlcnNU
b0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIHZvaWQg
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLQorICAgIHZvaWQgc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKGNv
bnN0IFdlYkNvcmU6OlVSTCYgaG9zdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICAKICAgICB2b2lkIHNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKSB7IG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25z
dCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmlu
ZGV4IDdmMzdlNzg3NzA0YTFmMzc0MmI4ZjdjYzdmYjYwNDZlN2JiMzI3MDEuLjFhMGZiN2E5MjE2
YWZhNjBhODhiOGZlNGE0N2ViMDVkNzBjNTlmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xNTA3
LDEwICsxNTA3LDE1IEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZSgpIGNvbnN0CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQpCit7CisgICAgc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGVkLCBbXSgpIHsgfSk7Cit9CisKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShi
b29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVkOwog
ICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpCi0gICAgICAgIG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGVkKTsK
KyAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKGVuYWJsZWQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjplbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQW5kU2V0
VGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNr
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCmluZGV4IDAyZGUxOGVmNjlkMDllMDM5ZTg4ZmVkOTQ0ZTlhNjJiNGRmYmRj
NzkuLjM2MjVmYTI2MTYzYjg3NmUzODYxNGZjYjUyOGE3MGU5ZjJlNTczYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmgKQEAgLTEwOSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoKSBjb25zdDsKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUoYm9vbCk7CisgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB1aW50NjRfdCBjYWNo
ZVN0b3JhZ2VQZXJPcmlnaW5RdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1
cmF0aW9uLmNhY2hlU3RvcmFnZVBlck9yaWdpblF1b3RhOyB9CiAgICAgdm9pZCBzZXRDYWNoZVN0
b3JhZ2VQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyBtX3Jlc29sdmVkQ29uZmlndXJh
dGlvbi5jYWNoZVN0b3JhZ2VQZXJPcmlnaW5RdW90YSA9IHF1b3RhOyB9CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDg3NjYwOWRiYmMyZjNiMzFi
MGU0MDZjN2VmN2U2MWNhMGI3MWU3My4uOTY0ODMzYjhkOThhNDM0MGRjODkxN2M4MGI4MjkzZTgw
ZjcwMmY1ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM0IEBACisyMDE4LTA3LTE5ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJA
YXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogRW5hYmxlIGJh
c2ljIGZ1bmN0aW9uYWxpdHkgaW4gZXhwZXJpbWVudGFsIGRlYnVnIG1vZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzgzNQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNDI0MDg1OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgZXhwZXJpbWVudGFsIElUUCBEZWJ1
ZyBNb2RlIGZlYXR1cmUgd29yaywgYXQgbGVhc3QKKyAgICAgICAgdG8gYSBiYXNpYyBsZXZlbC4g
QWxsIG9mIHRoZSBjaGFuZ2VzIHRvIFRlc3RSdW5uZXIgYXJlIHRvIHN1cHBvcnQgdGhlCisgICAg
ICAgIGxheW91dCB0ZXN0cyBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2Up
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERlYnVnTW9kZUNh
bGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlRGVidWdPdmVycmlkZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlQ2FsbGJhY2spOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092
ZXJyaWRlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUpOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFs
ZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmg6CisKIDIwMTgtMDctMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFNQSSB0byBkZWZlciBydW5uaW5nIGFzeW5jIHNj
cmlwdCB1bnRpbCBhZnRlciBkb2N1bWVudCBsb2FkCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbApp
bmRleCBjMDljYmFlMGNlMzA2NGI4ZmQ2ODkwNmU0NjlkNTFjMjIyZjFlMTYyLi40Y2NlNGUxZWE4
Zjc2MTE2OTc2MzI3OGI1NWQ2NDUyYWQ5NGUzNDFlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKQEAgLTI3Miw2ICsyNzIsOCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBp
bnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxi
YWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJh
Y2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVs
ZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2
b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUoRE9NU3RyaW5n
IGhvc3ROYW1lLCBvYmplY3QgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc0xhc3RTZWVuKERPTVN0cmluZyBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMsIG9iamVjdCBj
b21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlLCBvYmplY3QgY29tcGxldGlvbkhh
bmRsZXIpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShET01T
dHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUsIG9iamVjdCBjb21wbGV0aW9uSGFuZGxlcik7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCmluZGV4IDU5ZjFhNmI0ZjhhYzhjYzY5NGFmNzQxNmMwMGE5MmRjZDNi
N2NmNjEuLmNhNTEwZDBkYjI3MjVmMDdkNzJlZWNhMjc4MjI1MWExMDZjZWU4NWUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCkBAIC0zMTUsNiArMzE1LDE2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpIHsKKyAg
ICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzQ2FsbERpZFNldERlYnVnTW9kZUNhbGxiYWNr
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VE
ZWJ1Z092ZXJyaWRlIikpIHsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzQ2FsbERp
ZFNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZUNhbGxiYWNrKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJDYWxsRGlkU2V0TGFzdFNlZW4iKSkgewogICAgICAgICBtX3Rlc3RSdW5u
ZXItPnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcAppbmRleCAzNzRlYzc5ZjRmMzY3MTIzNzZmMzhlOWEyZjRkNjdhYTExYmJiMGRh
Li5iZjU4ZjJmODQ0ZjVhZmY3ZDYxYzljYWQwNWE3NmI4YWVhYzJkODBlIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAg
LTczNiw2ICs3MzYsOCBAQCBlbnVtIHsKICAgICBXaWxsRW5kU3dpcGVDYWxsYmFja0lELAogICAg
IERpZEVuZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJh
Y2tJRCwKKyAgICBTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwKKyAgICBTZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlQ2FsbGJhY2tJRCwKICAgICBTZXRT
dGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELAogICAgIFNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZUNhbGxiYWNrSUQsCiAgICAgU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZUNhbGxiYWNrSUQsCkBAIC0xMzMxLDYgKzEzMzMsMzUgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxs
RGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKCkKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxi
YWNrKERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKTsKKyAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisKK30KKwordm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERl
YnVnTW9kZUNhbGxiYWNrKCkKK3sKKyAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRp
c3RpY3NEZWJ1Z01vZGVDYWxsYmFja0lEKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKEpTU3RyaW5nUmVmIGhvc3ROYW1l
LCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGVDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlIikpOworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGVDYWxsYmFjaygp
Cit7CisgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2VEZWJ1Z092ZXJyaWRlQ2FsbGJhY2tJRCk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcywg
SlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxs
YmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7
CkBAIC0xMzYzLDcgKzEzOTQsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0TGFzdFNlZW5DYWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0
aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lEKTsKIH0KIAotCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCmluZGV4IDRkYWQwZjBkZjA2ODg1ZDJkZjY4YzhkZDg4NDIzYWVmYTU5
M2M0YmIuLmI1Y2JhMDc5ZWM5MzJlMjljY2UyMTQxNTk5N2U3YjBjYTYzMTY3ZjkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBA
IC0zODIsNiArMzgyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3RpY3NTZXRTaG91bGRQ
YXJ0aXRpb25Db29raWVzRm9ySG9zdChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwg
SlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbERpZFNldFBhcnRp
dGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
U3VibWl0VGVsZW1ldHJ5KCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wg
dmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgc3RhdGlzdGlj
c0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1
ZVJlZiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbERpZFNldFBy
ZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZUNhbGxiYWNrKCk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1Zh
bHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDYWxsRGlkU2V0
TGFzdFNlZW5DYWxsYmFjaygpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5k
ZXggZTBhODUzNDcxZmQxYjdiZjYwNTg4MzcyOGMxODI0YTdkMGQ1NWM0Mi4uOTAzMmVmMjM3OGIw
NjhkNzliNTA1NmFlODkzY2FlZGE4NGQyODc4NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAKQEAgLTI2NDUsNyArMjY0NSwyNSBAQCBzdGF0aWMgdm9pZCByZXNv
dXJjZVN0YXRpc3RpY3NCb29sZWFuUmVzdWx0Q2FsbGJhY2soYm9vbCByZXN1bHQsIHZvaWQqIHVz
ZXJEYXRhKQogICAgIGNvbnRleHQtPmRvbmUgPSB0cnVlOwogICAgIGNvbnRleHQtPnRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KLSAgICAKKwordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0
U3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlKQoreworICAgIGF1dG8qIGRhdGFTdG9yZSA9
IFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUocGxhdGZvcm1Db250ZXh0KCkpOworICAgIFJl
c291cmNlU3RhdGlzdGljc0NhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlV2l0aENvbXBs
ZXRpb25IYW5kbGVyKGRhdGFTdG9yZSwgdmFsdWUsICZjb250ZXh0LCByZXNvdXJjZVN0YXRpc3Rp
Y3NWb2lkUmVzdWx0Q2FsbGJhY2spOworICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1l
b3V0KTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5kaWRTZXRTdGF0aXN0aWNzRGVidWdNb2Rl
KCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZURlYnVnT3ZlcnJpZGUoV0tTdHJpbmdSZWYgaG9zdE5hbWUpCit7CisgICAgYXV0byogZGF0
YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgUmVzb3VyY2VTdGF0aXN0aWNzQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwor
ICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZURlYnVnT3ZlcnJpZGUoZGF0YVN0b3JlLCBob3N0TmFtZSwgJmNvbnRleHQsIHJlc291
cmNlU3RhdGlzdGljc1ZvaWRSZXN1bHRDYWxsYmFjayk7CisgICAgcnVuVW50aWwoY29udGV4dC5k
b25lLCBub1RpbWVvdXQpOworICAgIG1fY3VycmVudEludm9jYXRpb24tPmRpZFNldFByZXZhbGVu
dFJlc291cmNlRGVidWdPdmVycmlkZSgpOworfQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRT
dGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdCwgZG91YmxlIHNlY29uZHMpCiB7CiAg
ICAgYXV0byogZGF0YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShwbGF0Zm9y
bUNvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXgg
NTE5YmZiN2RhMDA5NzkzNmExMTkyZTliODM4NmFmODVmYzUwMjAxZC4uMTE0ZDBiNjk0NjI4NWVk
OGEwMzIzODRjNmJjNTY2Y2M2MjI3ZTg5NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2hv
dWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRE
b3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMgPSB2YWx1ZTsgfQogCisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShXS1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBz
ZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVmVyeVBy
ZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggNjhiYjA3ZTQxNDk2N2Iz
NzdkZDcwZjdjNjYzNzNkYTk0MzlkYzY1MC4uZDI0NjVlMzRhMjM2M2YzNWI4OTMxOGQyNGQ5Yjll
ZDNhM2MxZmFjNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAK
QEAgLTEwMzYsNiArMTAzNiwyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7CisgICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwor
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVy
cmlkZSIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUo
aG9zdE5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
TGFzdFNlZW4iKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKICAgICAgICAgCkBAIC0xNTI3LDYgKzE1NDEsMTgg
QEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNGb3JI
b3N0KCkKICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOwogfQogCit2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2Rl
KCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVn
TW9kZSIpKTsKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworfQorCit2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJj
ZURlYnVnT3ZlcnJpZGUoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQ
cmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUiKSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKK30KKwogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0TGFzdFNlZW4oKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRMYXN0U2VlbiIpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAppbmRl
eCAwMDVmMzdkNTk5OWU0NDc1OTc5NjFmNThkZjdhYzgzYmUzMWVkMTBmLi5jOTI5Y2NiNjc3ZjZh
ZTAyNWUyYjBjZWQ3ZDMzNjE4MTZhZDc5ZmY4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5oCkBAIC03NCw2ICs3NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENsZWFy
U3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoKTsKICAgICB2b2lkIGRpZFJlc2V0
U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlKCk7CiAgICAgdm9pZCBkaWRTZXRQYXJ0aXRpb25P
ckJsb2NrQ29va2llc0Zvckhvc3QoKTsKKyAgICB2b2lkIGRpZFNldFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoKTsKKyAgICB2b2lkIGRpZFNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSgpOwog
ICAgIHZvaWQgZGlkU2V0TGFzdFNlZW4oKTsKICAgICB2b2lkIGRpZFNldFByZXZhbGVudFJlc291
cmNlKCk7CiAgICAgdm9pZCBkaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5
NTg3NThjNGMzM2I0NDFkZWZiZDU5MzcwZDA1NDZmOTVjMTM2NzhhLi4yOTk0MDE5YmRmYzM4Yjc5
YzRhNjNlMTRmNWJiMmMwZGJhMDRiZWYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDct
MTkgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBFbmFibGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBpbiBleHBlcmlt
ZW50YWwgZGVidWcgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg3ODM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MjQwODU5MD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1h
a2VzIHRoZSBleHBlcmltZW50YWwgSVRQIERlYnVnIE1vZGUgZmVhdHVyZSB3b3JrLCBhdCBsZWFz
dAorICAgICAgICB0byBhIGJhc2ljIGxldmVsLgorCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1
Zy1tb2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3NldC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUuaHRtbDogQWRk
ZWQuCisKIDIwMTgtMDctMTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IHRoZSBwYXJzaW5nIG9mIGNvbG9ycyBpbiBhdHRyaWJ1dGVkIHN0cmlu
ZyB0ZXN0cywgYW5kIG1ha2UgaXQgcG9zc2libGUgdG8gZHVtcCB0aGUgdHlwaW5nIGF0dHJpYnV0
ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9lbmFibGUtZGVidWctbW9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZW5hYmxlLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY1MjE5ZGQzYjExZjJhMzRjNDU3NTM0MGU3MzhkYWRjZmEwY2NmY2MKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvZW5hYmxlLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rl
c3QgZm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgcGVybWFuZW50bHkgdHJlYXRz
IDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYXMgYSBwcmV2YWxlbnQgcmVzb3VyY2UuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGh0dHA6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQu
b3JnIGdvdCBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlIGluIGRlYnVnIG1vZGUuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1
Zy1tb2RlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvZW5hYmxlLWRlYnVnLW1vZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2IxMjc2ZGY1MWIzZTY0MmNj
NDRmOTk0NDgxMDUzOGY3OTVlY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLmh0bWwKQEAg
LTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4K
KyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4K
KyAgICBkZXNjcmlwdGlvbigiVGVzdCBmb3IgZW5hYmxpbmcgZGVidWcgbW9kZSBhbmQgdGhhdCBp
dCBwZXJtYW5lbnRseSB0cmVhdHMgM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBhcyBhIHByZXZhbGVu
dCByZXNvdXJjZS4iKTsKKyAgICBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIGNvbnN0IHRo
aXJkUGFydHlPcmlnaW4gPSAiaHR0cDovLzNyZHBhcnR5dGVzdHdlYmtpdC5vcmciOworCisgICAg
ZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUsIGNvbXBsZXRpb25IYW5kbGVyKSB7Cisg
ICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGUp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGVuYWJsZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q29va2llU3Rv
cmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgaWYgKCFlbmFibGUpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93Lmlu
dGVybmFscykgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJlKHRydWUsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
dGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0aGlyZFBhcnR5
T3JpZ2luICsgIiBhbHJlYWR5IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0RlYnVnTW9kZSh0cnVlLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgZGlkbid0IGdldCBzZXQgYXMgcHJldmFsZW50IHJlc291
cmNlLiIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGVzdFBh
c3NlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBnb3Qgc2V0IGFzIHByZXZhbGVudCByZXNvdXJjZSBp
biBkZWJ1ZyBtb2RlLiIpOworICAgICAgICAgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2Us
IGZpbmlzaEpTVGVzdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2Ut
aW4tZGVidWctbW9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWct
bW9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmRjMDczZGE0N2NiYTQ4NjA3NzIzZDRmZGI2
M2NiYTE1NmQ4N2U2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1k
ZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0IGZvciBlbmFibGlu
ZyBkZWJ1ZyBtb2RlIGFuZCB0aGF0IGl0IGFsbG93cyBzZXR0aW5nIGEgY3VzdG9tIGRvbWFpbiBh
cyBhIHByZXZhbGVudCByZXNvdXJjZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgaHR0cDovL2xvY2FsaG9zdDo4MDAwIGdvdCBzZXQgYXMgYSBjdXN0b20gcHJldmFsZW50
IHJlc291cmNlIGluIGRlYnVnIG1vZGUuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3NldC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRl
YnVnLW1vZGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjI0ZjliYWE0Yzk0ZWIyZjU4OGIxMTQ1YWEzMDZkNDQyODA4ODgyNQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWwKQEAgLTAs
MCArMSw0MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAg
ICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAg
ICBkZXNjcmlwdGlvbigiVGVzdCBmb3IgZW5hYmxpbmcgZGVidWcgbW9kZSBhbmQgdGhhdCBpdCBh
bGxvd3Mgc2V0dGluZyBhIGN1c3RvbSBkb21haW4gYXMgYSBwcmV2YWxlbnQgcmVzb3VyY2UuIik7
CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCB0aGlyZFBhcnR5T3JpZ2lu
ID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7CisKKyAgICBmdW5jdGlvbiBzZXRFbmFibGVGZWF0
dXJlKGVuYWJsZSwgY29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgaW50ZXJuYWxzLnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoZW5hYmxl
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZChlbmFibGUpOworICAgICAgICBpZiAoIWVuYWJsZSkKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoY29tcGxldGlvbkhhbmRsZXIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0KKworICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHNl
dEVuYWJsZUZlYXR1cmUodHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAodGVzdFJ1
bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh0aGlyZFBhcnR5T3JpZ2luKSkKKyAg
ICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRoaXJkUGFydHlPcmlnaW4gKyAiIGFscmVhZHkgc2V0
IGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKworICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzRGVidWdNb2RlKHRydWUsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSh0aGly
ZFBhcnR5T3JpZ2luLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0
UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlPcmlnaW4pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBk
aWRuJ3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQodGhpcmRQYXJ0eU9y
aWdpbiArICIgZ290IHNldCBhcyBhIGN1c3RvbSBwcmV2YWxlbnQgcmVzb3VyY2UgaW4gZGVidWcg
bW9kZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0RW5hYmxlRmVhdHVyZShmYWxzZSwgZmlu
aXNoSlNUZXN0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345452</attachid>
            <date>2018-07-20 09:46:41 -0700</date>
            <delta_ts>2018-07-20 16:48:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187835-20180720094640.patch</filename>
            <type>text/plain</type>
            <size>47047</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNmYjhlNmNhOGI3MDA5MWM3
OWYzMDk5NjhmNjkwMzg0ZWQ3ODc5MzcuLjBmMjE1NGFlZTM1NjZiMDVhYjBkYzM4MmVjODk1NzA2
N2VlZTdhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTgtMDctMjAgIEpvaG4gV2ls
YW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzOiBFbmFibGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBpbiBleHBlcmltZW50YWwgZGVidWcg
bW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3
ODM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MjQwODU5MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBleHBl
cmltZW50YWwgSVRQIERlYnVnIE1vZGUgZmVhdHVyZSB3b3JrLCBhdCBsZWFzdAorICAgICAgICB0
byBhIGJhc2ljIGxldmVsLiBUaGlzIG1lYW5zOgorICAgICAgICAtIERlYnVnIGxvZ2dpbmcgb24g
dGhlIElORk8gbGV2ZWwuCisgICAgICAgIC0gUGVybWFuZW50bHkgdHJlYXQgM3JkcGFydHl0ZXN0
d2Via2l0Lm9yZyBhcyBhIHByZXZhbGVudCByZXNvdXJjZS4KKyAgICAgICAgLSBTdXBwb3J0IG1h
bnVhbCBzZXR0aW5nIG9mIGEgY3VzdG9tIHBlcm1hbmVudGx5IHByZXZhbGVudCByZXNvdXJjZSB0
aHJvdWdoIHVzZXIKKyAgICAgICAgICBkZWZhdWx0cyBvbiBDb2NvYSBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAg
ICAgKFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVX
aXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSk6CisgICAg
ICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5l
ZWRlZCk6CisgICAgICAgICAgICBVc2VkIHRvIHBpY2sgdXAgY3VzdG9tIHNldCBwcmV2YWxlbnQg
cmVzb3VyY2Ugb24gQ29jb2EgcGxhdGZvcm1zIChmb3IgZGVidWcgbW9kZSkuCisgICAgICAgICog
VUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGVidWdNb2RlT3Zl
cnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgTm93IHNr
aXBzIHByb2Nlc3Npbmcgb2YgZGVidWcgbW9kZSBwcmV2YWxlbnQgcmVzb3VyY2VzIHNvIHRoYXQg
dGhleQorICAgICAgICAgICAgc3RheSBwcmV2YWxlbnQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGVidWdNb2RlUHJldmFsZW50UmVzb3Vy
Y2VzKToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIG1ha2UgM3JkcGFydHl0
ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3RvbSBkb21haW4KKyAgICAgICAgICAgIHNldCB0aHJv
dWdoIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2VEZWJ1Z092ZXJyaWRlKCkKKyAgICAgICAgICAgIGJlIHByZXZhbGVudCByZXNvdXJjZXMuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKToKKyAgICAgICAgICAgIFNldHMgYSBjdXN0b20gZG9tYWluIHRvIGFsd2F5cyBiZSB0cmVh
dGVkIGFzIHByZXZhbGVudCBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKToKKyAgICAgICAgICAgIE5vdyBtYWtl
cyBzdXJlIDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYW5kIGFueSBjdXN0b20gZG9tYWluIHNldCB0
aHJvdWdoCisgICAgICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSgpCisgICAgICAgICAgICBhcmUgcHJldmFs
ZW50IHJlc291cmNlcyBldmVuIGFmdGVyIGEgY2xlYXIgb2YgdGhlIHN0b3JlLgorICAgICAgICAo
V2ViS2l0OjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMpOgorICAgICAgICAgICAgV2UgbWF5IGhh
dmUgdG9vIG1hbnkgZG9tYWluIG5hbWVzIHRvIGZpdCBpbiBhIHNpbmdsZSBsb2cgc3RhdGVtZW50
LgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBsb2dzIHRoZW0gaW4gYmF0Y2hlcyBvZiA1MCwg
aWYgd2UgaGF2ZSBtb3JlIHRoYW4gNTAuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKToKKyAgICAgICAg
ICAgIE5vdyBtYWtlcyB1c2Ugb2YgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCkgaW4gZGVidWcg
bW9kZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSBjb25zdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAgICAgIE5vdyBw
aWNrcyB1cCBkZWJ1ZyBtb2RlIGZyb20gdGhlIG1lbW9yeSBzdG9yZSBzbyB0aGF0CisgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnBvcHVsYXRlTWVt
b3J5U3RvcmVGcm9tRGlzaygpCisgICAgICAgICAgICBkb2Vzbid0IGFzc2VydCB0aGF0IHRoZSBt
ZW1vcnkgc3RvcmUgaXMgZW1wdHkgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpwb3B1bGF0ZU1lbW9yeVN0b3Jl
RnJvbURpc2spOgorICAgICAgICAgICAgTm93IGFjY2VwdHMgYSBub24tZW1wdHkgbWVtb3J5IHN0
b3JlIGluIGRlYnVnIG1vZGUuIFRoaXMgaXMgdG8gc3VwcG9ydCBhCisgICAgICAgICAgICBwcmUt
cG9wdWxhdGVkIHN0b3JlIHdpdGggM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3Rv
bSBkb21haW4gYWxyZWFkeQorICAgICAgICAgICAgc2V0IGFzIHByZXZhbGVudC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE4LTA3
LTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBTUEkgdG8gZGVmZXIgcnVubmluZyBhc3luYyBzY3JpcHQgdW50aWwgYWZ0ZXIgZG9jdW1lbnQg
bG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggYTU0ZWNiYzI2NmRhYjBhOGJhZjIzYzc0NTVlYmVlNDRj
MTMwMjMyMC4uMzQ5NmVjODMxOTJhOGQ0YzYzZjhhZGZmY2E3OGQ1YTQ1Y2RjZmYxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCkBAIC02OSw2ICs2OSwzMSBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tXZWJzaXRlRGF0YVN0b3JlUmVmCiAgICAg
V2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShlbmFibGUpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVXaXRoQ29tcGxldGlvbkhhbmRsZXIoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUsIHZvaWQqIGNvbnRleHQsIFdLV2Vi
c2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBhdXRvKiBzdG9yZSA9IFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPndl
YnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9y
ZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBzdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShlbmFibGUsIFtjb250ZXh0LCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICB9KTsKK30KKwordm9pZCBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJy
aWRlKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3Qs
IHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5j
dGlvbiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvKiBzdG9yZSA9IFdlYktpdDo6dG9J
bXBsKGRhdGFTdG9yZVJlZiktPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCk7CisgICAgaWYgKCFzdG9yZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzdG9yZS0+c2V0UHJldmFs
ZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpVUkwoKSwgV2Vi
S2l0Ojp0b0ltcGwoaG9zdCktPnN0cmluZygpKSwgW2NvbnRleHQsIGNvbXBsZXRpb25IYW5kbGVy
XSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgIH0pOworfQogdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgZG91YmxlIHNlY29uZHMsIHZv
aWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2VlbkZ1bmN0aW9u
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHN0b3JlID0gV2ViS2l0Ojp0b0ltcGwo
ZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgKaW5kZXggNWI3NDYyMGJkYmM5MjBmYmVmODJhOGVlMmJmZmEwMzNhYTA4YzU2
ZC4uODA0ZTYzYWJmZDkzNDlkMjMxMzAxYzMzMzU5OWQzZDkyMzE0YzA0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgK
QEAgLTQwLDYgKzQwLDkgQEAgV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNp
dGVEYXRhU3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkKIFdLX0VYUE9SVCBib29s
IFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7Cit0eXBlZGVmIHZvaWQgKCpX
S1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24pKHZvaWQqIGZ1bmN0
aW9uQ29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlV2l0aENvbXBsZXRpb25IYW5kbGVyKFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlLCB2b2lkKiBjb250ZXh0LCBXS1dl
YnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlvbkhhbmRs
ZXIpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNp
dGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlvbkhhbmRsZXIp
OyAgICAKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2Vl
bkZ1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBk
YXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzLCB2b2lkKiBjb250
ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzTGFzdFNlZW5GdW5jdGlvbiBjb21wbGV0
aW9uSGFuZGxlcik7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2VGdW5jdGlvbikodm9pZCogZnVuY3Rpb25Db250ZXh0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KaW5kZXggZTZiMTQ1OTQ4YmQ3
OWMyODdiZjJlZDk0MWZkNWQxMTM5N2NlNTNlMS4uMzA4Nzk5MWE1ZjFjODQyZGIxZGY5YTA1NjA2
MmUxOTE4ZGQ4YjRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29j
b2EubW0KQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTEsNiArNTIsOSBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCgpCiAKICAgICAgICAgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z0xvZ2dpbmdFbmFibGVkIl0pOwogICAgICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJv
b2xGb3JLZXk6QCJFeHBlcmltZW50YWxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlIl0p
OworICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VE
ZWJ1Z092ZXJyaWRlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICBzZXRT
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gYm9vbEZvcktleTpAIkV4cGVyaW1lbnRhbFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5h
YmxlZCJdKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDlmMGM3
ZjBiNjRkYTQxMTA5MzkxMmIxNmI2Zjc4M2YxMWFlYzJhNTIuLmQwOWM0MjM4NTQzNDM1MmI3MThi
NzI5NTlmYzY3ZDBmZDZlNWYxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApAQCAtNTEs
NiArNTEsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0lu
UmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwogY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRp
c3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKIGNvbnN0ZXhwciB1bnNpZ25lZCBvcGVy
YXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07CiBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5j
ZSB7IDMgfTsKK3N0YXRpYyBhdXRvIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyAiM3Jk
cGFydHl0ZXN0d2Via2l0Lm9yZyIgfTsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogc3Rh
dGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMp
CkBAIC0zMTksMTMgKzMyMCwyNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbgogICAgIH0KIH0K
IAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRlYnVnTW9kZU92ZXJy
aWRlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIGlm
ICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IHNob3VsZEFsd2F5c01hcmtQcmV2YWxlbnQgPSAocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVs
RG9tYWluID09IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0aXN0
aWMuaGlnaExldmVsRG9tYWluID09IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgJiYg
IXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2U7CisgICAgaWYgKHNob3VsZEFs
d2F5c01hcmtQcmV2YWxlbnQpCisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKworICAgIHJldHVybiBz
aG91bGRBbHdheXNNYXJrUHJldmFsZW50OworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7CiAgICAgICAgIGZv
ciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1
ZXMoKSkgewotICAgICAgICAgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSkgeworICAgICAgICAgICAgaWYgKCFkZWJ1Z01vZGVPdmVycmlkZShyZXNvdXJj
ZVN0YXRpc3RpYykgJiYgIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNl
KSB7CiAgICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2
YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwogICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFBy
ZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8gUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdzsKICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3Rp
YywgY3VycmVudFByZXZhbGVuY2UpOwpAQCAtNTA3LDEzICs1MjAsNDggQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0
YShDb21wbGV0aW8KICAgICB9KTsKIH0KIAorVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXREZWJ1Z01vZGVQcmV2YWxlbnRSZXNvdXJjZXMoKQorewor
ICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
VmVjdG9yPFN0cmluZz4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21haW5z
VG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byYgc3RhdGljU2Vz
b3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIHNldFByZXZhbGVudFJlc291cmNl
KHN0YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsK
KyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGljUHJl
dmFsZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihtX2RlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZhbGVu
dFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9j
azsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Cisg
ICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHx8IGVuYWJs
ZTsKKworICAgIHNldERlYnVnTW9kZVByZXZhbGVudFJlc291cmNlcygpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1
Z092ZXJyaWRlKGNvbnN0IFN0cmluZyYgZG9tYWluKQoreworICAgIGlmICghbV9kZWJ1Z01vZGVF
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBkb21haW47CisgICAgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50
UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gp
OworCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRiht
X2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIklUUCBE
ZWJ1ZyBNb2RlICV7cHVibGljfXMuIiwgKG1fZGVidWdNb2RlRW5hYmxlZCA/ICJlbmFibGVkIiA6
ICJkaXNhYmxlZCIpKTsKKyAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRo
ZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkb21haW4udXRmOCgpLmRhdGEoKSk7CiAj
ZW5kaWYKIH0KIApAQCAtODkxLDcgKzkzOSw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpjbGVhcigpCiAgICAgbV9vcGVyYXRpbmdEYXRlcy5jbGVhcigpOwogCiAg
ICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcygpOwotICAgIHVwZGF0ZUNvb2tpZVBhcnRpdGlvbmlu
Z0ZvckRvbWFpbnMoeyB9LCB7IH0sIHsgfSwgU2hvdWxkQ2xlYXJGaXJzdDo6WWVzLCBbXSgpIHsg
fSk7CisKKyAgICBhdXRvIHByaW1hcnlEb21haW5zVG9CbG9jayA9IHNldERlYnVnTW9kZVByZXZh
bGVudFJlc291cmNlcygpOworICAgIHVwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZ0ZvckRvbWFpbnMo
eyB9LCBwcmltYXJ5RG9tYWluc1RvQmxvY2ssIHsgfSwgU2hvdWxkQ2xlYXJGaXJzdDo6WWVzLCBb
XSgpIHsgfSk7CiB9CiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp3
YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHVw
ZGF0ZWQpIGNvbnN0CkBAIC05MzUsNiArOTg1LDM5IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
CiAgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMu
Y29udGFpbnMoZmlyc3RQYXJ0eVByaW1hcnlEb21haW4pOwogfQogCitzdGF0aWMgdm9pZCBkZWJ1
Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWlucykKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdGF0
aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCA9IDUwOwor
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRv
bWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJv
dXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtw
dWJsaWN9cy4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCksIGRvbWFpbnNUb1N0cmluZyhkb21haW5z
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWZWN0
b3I8U3RyaW5nPiBiYXRjaDsKKyAgICBiYXRjaC5yZXNlcnZlQ2FwYWNpdHkobWF4TnVtYmVyT2ZE
b21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpOworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAg
IGF1dG8gdG90YWxOdW1iZXJPZkJhdGNoZXMgPSBkb21haW5zLnNpemUoKSAvIG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50ICsgKGRvbWFpbnMuc2l6ZSgpICUgbWF4TnVtYmVyT2ZE
b21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPiAwID8gMSA6IDApOworCisgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVy
T2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lO
Rk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29r
aWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAlbHUpOiAle3B1
YmxpY31zLiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSwgYmF0Y2hOdW1iZXIsIHRvdGFsTnVtYmVy
T2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgYmF0Y2guY2xlYXIoKTsKKyAgICAgICAgICAgIGJhdGNoTnVtYmVyKys7CisgICAgICAg
IH0KKyAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmIChiYXRjaC5z
aXplKCkgPiAwKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJWx1KTogJXtwdWJsaWN9cy4iLCBtZXNzYWdlLnV0Zjgo
KS5kYXRhKCksIGJhdGNoTnVtYmVyLCB0b3RhbE51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3Ry
aW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1lc3Nh
Z2UpOworICAgIFVOVVNFRF9QQVJBTShkb21haW5zKTsKKyNlbmRpZgorfQorCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTk2NSwxNiArMTA0OCwxNCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKENv
bXBsZXRpb25IYW5kbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECiAgICAgaWYgKG1fZGVidWdMb2dnaW5nRW5hYmxlZCkgewogICAgICAgICBpZiAo
IWRvbWFpbnNUb1BhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19J
TkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHBhcnRpdGlvbiBjb29r
aWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0
cmluZyhkb21haW5zVG9QYXJ0aXRpb24pLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVi
dWdMb2dEb21haW5zSW5CYXRjaGVzKCJwYXJ0aXRpb24iLCBkb21haW5zVG9QYXJ0aXRpb24pOwog
ICAgICAgICBpZiAoIWRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYmxvY2sg
Y29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5z
VG9TdHJpbmcoZG9tYWluc1RvQmxvY2spLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVi
dWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsKICAgICAgICAg
aWYgKCFkb21haW5zVG9OZWl0aGVyUGFydGl0aW9uTm9yQmxvY2suaXNFbXB0eSgpKQotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byBuZWl0aGVyIHBhcnRpdGlvbiBub3IgYmxvY2sgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBj
b250ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcoZG9tYWluc1RvTmVpdGhl
clBhcnRpdGlvbk5vckJsb2NrKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRlYnVnTG9n
RG9tYWluc0luQmF0Y2hlcygibmVpdGhlciBwYXJ0aXRpb24gbm9yIGJsb2NrIiwgZG9tYWluc1Rv
TmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpcywgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5z
VG9QYXJ0aXRpb24gPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvUGFydGl0aW9uKSwgZG9tYWlu
c1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBkb21haW5zVG9OZWl0
aGVyUGFydGl0aW9uTm9yQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvTmVpdGhlclBh
cnRpdGlvbk5vckJsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50
RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyKGRvbWFpbnNUb1BhcnRpdGlv
biwgZG9tYWluc1RvQmxvY2ssIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgU2hv
dWxkQ2xlYXJGaXJzdDo6Tm8sIFt0aGlzLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlLmgKaW5kZXggNGEwOGI3YjU2YjMxNTM0YzU0NWM4MzdlYTcwZTdkNzhi
MzY5NzVjNC4uYTFmZjFlYTRkZDEyNTg2OGQwOTRkYjZlMjRiM2RiNjk0MTM3YWYyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlLmgKQEAgLTExMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKKyAg
ICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShjb25zdCBTdHJpbmcmKTsK
IAogICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7
CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlE
b21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwpAQCAtMTQzLDYgKzE0NSw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5
KCk7CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFt
ZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBtYXJrQXNQcmV2YWxl
bnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7CisgICAgYm9vbCBkZWJ1Z01vZGVPdmVycmlkZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJik7CisgICAgVmVjdG9yPFN0cmluZz4gc2V0RGVidWdNb2RlUHJldmFsZW50UmVz
b3VyY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKICAgICBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYpOwpAQCAtMTgxLDYgKzE4NSw3IEBAIHByaXZhdGU6
CiAgICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOwogICAgIGJvb2wg
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGVidWdNb2RlRW5h
YmxlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSB7IH07CiAgICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKICAgICBNb25v
dG9uaWNUaW1lIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAKaW5kZXggMjlhY2FlMDE0ZjJiMDNlODZiNDMzYmQ0ZDhh
ZGViYjE2MzBkN2IxNy4uNGE0NWFmMDc2YjZjZmYzMzk3OTdlNmQzZTEyMTA0YWVjOTQwYTNkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCkBAIC05MCw2ICs5MCw5IEBA
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBtX21lbW9yeVN0b3JlLnNldFBlcnNpc3RlbnRTdG9yYWdlKCp0aGlzKTsKKyAgICAv
LyBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSBzaW5jZSBwb3B1bGF0ZU1lbW9yeVN0b3JlRnJv
bURpc2soKQorICAgIC8vIGV4cGVjdHMgdGhlIG1lbW9yeSBzdG9yZSB0byBiZSBlbXB0eSBleGNl
cHQgaW4gZGVidWcgbW9kZS4KKyAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBtX21lbW9yeVN0b3Jl
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKTsKIAogICAgIHBvcHVsYXRlTWVtb3J5
U3RvcmVGcm9tRGlzaygpOwogICAgIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsKQEAgLTIzNSw3ICsy
MzgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9w
dWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9tZW1vcnlTdG9yZS5pc0VtcHR5KCksICJUaGlzIGlzIHRo
ZSBpbml0aWFsIGltcG9ydCBzbyB0aGUgc3RvcmUgc2hvdWxkIGJlIGVtcHR5Iik7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlzRW1wdHkoKSB8fCBtX2RlYnVnTW9kZUVu
YWJsZWQsICJUaGlzIGlzIHRoZSBpbml0aWFsIGltcG9ydCBzbyB0aGUgc3RvcmUgc2hvdWxkIGJl
IGVtcHR5Iik7CiAgICAgbV9tZW1vcnlTdG9yZS5tZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoKmRl
Y29kZXIpOwogCiAgICAgbV9sYXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSA9IHJlYWRUaW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaAppbmRleCAxMmFhOWI4YWVjMmZkNTAwMWYx
ZDJjYzZhYTMzZGJiMjcyOGVlNmJlLi4zNTg2YTk0ZDQwOTZmODVhMTRhMWQ3NGJjOTdlM2E0MDNk
NGZjOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaApAQCAtNTIsNiArNTIs
OCBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBGb3JjZUltbWVkaWF0ZVdyaXRlIHsgTm8sIFll
cywgfTsKICAgICB2b2lkIHNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKEZvcmNlSW1tZWRpYXRl
V3JpdGUpOwogCisgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJv
b2wgZW5hYmxlKSB7IG1fZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsgfTsKKwogcHJpdmF0ZToK
ICAgICBTdHJpbmcgc3RvcmFnZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgcmVz
b3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0OwpAQCAtNzIsNiArNzQsNyBAQCBwcml2YXRlOgogICAg
IFdhbGxUaW1lIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWU7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX2xhc3RTdGF0aXN0aWNzV3JpdGVUaW1lOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nV3JpdGUg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFsc2UgfTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IGIwOWFlNGEyNmM5MmM5Y2FlN2I3OThlMTY0Y2E3
ZjczNTJhM2Q1NzguLjdiODk5YjIxZGQ3MzUwOTNhMjU2Y2QzODYwYjZiY2JjYWMwMjNmMWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMTY5LDEzICsxNjksMzEgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCiAg
ICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogfQogCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShib29sIHZhbHVlKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAKLSAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKKyAgICBwb3N0VGFz
ayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAg
ICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSh2YWx1ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSh2YWx1ZSk7
CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKGNvbnN0IFdlYkNvcmU6OlVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBwb3N0VGFzayhbdGhpcywg
dXJsLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSh1cmwuaG9zdCgpLnRvU3Ry
aW5nKCkpOworICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgICAgICB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRleCA1ZGM4ZDlk
MmY2NzE0OWZmZTk1YjcxNjMzMzM2ZDg3NThlYzUzZTA1Li43MTlkNDg0NjA4YWMzMGNmY2RlNGYx
OGJkY2ExYTlhZWJkNjQ4ODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtMTMyLDggKzEzMiw5IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUoYm9vbCk7Ci0KKyAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoYm9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZShjb25zdCBXZWJDb3JlOjpVUkwmIGhv
c3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgCiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4m
JiBjYWxsYmFjaykgeyBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKTsgfQogICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgY2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVBy
aW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA3ZjM3ZTc4NzcwNGExZjM3
NDJiOGY3Y2M3ZmI2MDQ2ZTdiYjMyNzAxLi4xYTBmYjdhOTIxNmFmYTYwYTg4YjhmZTRhNDdlYjA1
ZDcwYzU5ZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTUwNywxMCArMTUwNywxNSBAQCBib29s
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25z
dAogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQoreworICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoZW5hYmxlZCwgW10oKSB7IH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZW5hYmxlZDsKICAgICBpZiAobV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKQotICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgICAgIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGVk
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0FuZFNldFRlc3RpbmdDYWxsYmFjayhGdW5j
dGlvbjx2b2lkIChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAw
MmRlMThlZjY5ZDA5ZTAzOWU4OGZlZDk0NGU5YTYyYjRkZmJkYzc5Li4zNjI1ZmEyNjE2M2I4NzZl
Mzg2MTRmY2I1MjhhNzBlOWYyZTU3M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDksNiArMTA5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9v
bCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIHZv
aWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdWludDY0X3QgY2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVv
dGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5jYWNoZVN0b3JhZ2VQ
ZXJPcmlnaW5RdW90YTsgfQogICAgIHZvaWQgc2V0Q2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEo
dWludDY0X3QgcXVvdGEpIHsgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uY2FjaGVTdG9yYWdlUGVy
T3JpZ2luUXVvdGEgPSBxdW90YTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGQ4NzY2MDlkYmJjMmYzYjMxYjBlNDA2YzdlZjdlNjFjYTBiNzFl
NzMuLmQ5MWRkMDRiMDQxMjk3ZmY3ZjZkNWFhOTdkMGJiMTMxNGYzZDcxM2QgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAor
MjAxOC0wNy0yMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEVuYWJsZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGlu
IGV4cGVyaW1lbnRhbCBkZWJ1ZyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODc4MzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQyNDA4NTkw
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggbWFrZXMgdGhlIGV4cGVyaW1lbnRhbCBJVFAgRGVidWcgTW9kZSBmZWF0dXJlIHdvcmss
IGF0IGxlYXN0CisgICAgICAgIHRvIGEgYmFzaWMgbGV2ZWwuIEFsbCBvZiB0aGUgY2hhbmdlcyB0
byBUZXN0UnVubmVyIGFyZSB0byBzdXBwb3J0IHRoZQorICAgICAgICBsYXlvdXQgdGVzdHMgZm9y
IHRoZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjayk6CisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJp
ZGUpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZh
bGVudFJlc291cmNlRGVidWdPdmVycmlkZUNhbGxiYWNrKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAg
ICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVy
cmlkZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oOgorCiAy
MDE4LTA3LTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBTUEkgdG8gZGVmZXIgcnVubmluZyBhc3luYyBzY3JpcHQgdW50aWwgYWZ0ZXIgZG9j
dW1lbnQgbG9hZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXggYzA5Y2JhZTBjZTMwNjRi
OGZkNjg5MDZlNDY5ZDUxYzIyMmYxZTE2Mi4uNGNjZTRlMWVhOGY3NjExNjk3NjMyNzhiNTVkNjQ1
MmFkOTRlMzQxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0yNzIsNiArMjcyLDgg
QEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRN
b2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0
YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9iamVj
dCBjYWxsYmFjayk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2xlYW4gdmFs
dWUsIG9iamVjdCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKERPTVN0cmluZyBob3N0TmFtZSwgb2JqZWN0IGNv
bXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0U2VlbihET01TdHJp
bmcgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBvYmplY3QgY29tcGxldGlvbkhhbmRsZXIpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFt
ZSwgYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29s
ZWFuIHZhbHVlLCBvYmplY3QgY29tcGxldGlvbkhhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRl
eCA1OWYxYTZiNGY4YWM4Y2M2OTRhZjc0MTZjMDBhOTJkY2QzYjdjZjYxLi5jYTUxMGQwZGIyNzI1
ZjA3ZDcyZWVjYTI3ODIyNTFhMTA2Y2VlODVlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMzE1LDYg
KzMxNSwxNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJD
YWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+
c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZSIpKSB7Cisg
ICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJj
ZURlYnVnT3ZlcnJpZGVDYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbERp
ZFNldExhc3RTZWVuIikpIHsKICAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzQ2FsbERp
ZFNldExhc3RTZWVuQ2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggMzc0
ZWM3OWY0ZjM2NzEyMzc2ZjM4ZTlhMmY0ZDY3YWExMWJiYjBkYS4uYmY1OGYyZjg0NGY1YWZmN2Q2
MWM5Y2FkMDVhNzZiOGFlYWMyZDgwZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC03MzYsNiArNzM2LDggQEAgZW51
bSB7CiAgICAgV2lsbEVuZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBEaWRFbmRTd2lwZUNhbGxiYWNr
SUQsCiAgICAgRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQsCisgICAgU2V0U3RhdGlz
dGljc0RlYnVnTW9kZUNhbGxiYWNrSUQsCisgICAgU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlRGVidWdPdmVycmlkZUNhbGxiYWNrSUQsCiAgICAgU2V0U3RhdGlzdGljc0xhc3RTZWVuQ2Fs
bGJhY2tJRCwKICAgICBTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELAog
ICAgIFNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELApAQCAtMTMz
MSw2ICsxMzMzLDM1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25hcHNo
b3RDYWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhEaWRSZW1vdmVTd2lwZVNu
YXBzaG90Q2FsbGJhY2tJRCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Rl
YnVnTW9kZShib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NEZWJ1Z01vZGVDYWxsYmFja0lE
LCBjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKKyAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworCit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpCit7
CisgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJh
Y2tJRCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlRGVidWdPdmVycmlkZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOworICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlRGVidWdPdmVycmlkZSIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0UnVu
bmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRGVidWdPdmVycmlkZUNh
bGxiYWNrSUQpOworfQorCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihK
U1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMsIEpTVmFsdWVSZWYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0xh
c3RTZWVuQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTM2Myw3ICsxMzk0LDYg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldExhc3RTZWVuQ2FsbGJhY2so
KQogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0xhc3RTZWVuQ2FsbGJh
Y2tJRCk7CiB9CiAKLQogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRl
eCA0ZGFkMGYwZGYwNjg4NWQyZGY2OGM4ZGQ4ODQyM2FlZmE1OTNjNGJiLi5iNWNiYTA3OWVjOTMy
ZTI5Y2NlMjE0MTU5OTdlN2IwY2E2MzE2N2Y5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtMzgyLDYgKzM4MiwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhv
c3QoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
OwogICAgIHZvaWQgc3RhdGlzdGljc0NhbGxEaWRTZXRQYXJ0aXRpb25PckJsb2NrQ29va2llc0Zv
ckhvc3RDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSgpOwor
ICAgIHZvaWQgc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2Rl
Q2FsbGJhY2soKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVn
T3ZlcnJpZGUoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRs
ZXIpOworICAgIHZvaWQgc3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZURlYnVn
T3ZlcnJpZGVDYWxsYmFjaygpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbERpZFNldExhc3RTZWVuQ2FsbGJhY2soKTsK
ICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcik7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGUwYTg1MzQ3MWZkMWI3YmY2
MDU4ODM3MjhjMTgyNGE3ZDBkNTVjNDIuLjkwMzJlZjIzNzhiMDY4ZDc5YjUwNTZhZTg5M2NhZWRh
ODRkMjg3ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBA
IC0yNjQ1LDcgKzI2NDUsMjUgQEAgc3RhdGljIHZvaWQgcmVzb3VyY2VTdGF0aXN0aWNzQm9vbGVh
blJlc3VsdENhbGxiYWNrKGJvb2wgcmVzdWx0LCB2b2lkKiB1c2VyRGF0YSkKICAgICBjb250ZXh0
LT5kb25lID0gdHJ1ZTsKICAgICBjb250ZXh0LT50ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CiB9Ci0gICAgCisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBhdXRvKiBkYXRhU3RvcmUgPSBXS0NvbnRleHRHZXRXZWJzaXRl
RGF0YVN0b3JlKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBSZXNvdXJjZVN0YXRpc3RpY3NDYWxs
YmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZVdpdGhDb21wbGV0aW9uSGFuZGxlcihkYXRhU3Rv
cmUsIHZhbHVlLCAmY29udGV4dCwgcmVzb3VyY2VTdGF0aXN0aWNzVm9pZFJlc3VsdENhbGxiYWNr
KTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CisgICAgbV9jdXJyZW50
SW52b2NhdGlvbi0+ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpOworfQorCit2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKFdL
U3RyaW5nUmVmIGhvc3ROYW1lKQoreworICAgIGF1dG8qIGRhdGFTdG9yZSA9IFdLQ29udGV4dEdl
dFdlYnNpdGVEYXRhU3RvcmUocGxhdGZvcm1Db250ZXh0KCkpOworICAgIFJlc291cmNlU3RhdGlz
dGljc0NhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1dlYnNpdGVEYXRhU3Rv
cmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRl
KGRhdGFTdG9yZSwgaG9zdE5hbWUsICZjb250ZXh0LCByZXNvdXJjZVN0YXRpc3RpY3NWb2lkUmVz
dWx0Q2FsbGJhY2spOworICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKKyAg
ICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5kaWRTZXRQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJp
ZGUoKTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdL
U3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzKQogewogICAgIGF1dG8qIGRhdGFTdG9yZSA9
IFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUocGxhdGZvcm1Db250ZXh0KCkpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IDUxOWJmYjdkYTAwOTc5MzZhMTE5
MmU5YjgzODZhZjg1ZmM1MDIwMWQuLjExNGQwYjY5NDYyODVlZDhhMDMyMzg0YzZiYzU2NmNjNjIy
N2U4OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTE1Niw2
ICsxNTYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5
YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxl
TUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZvaWQgc2V0U3RhdGlzdGljc0RlYnVnTW9kZShi
b29sIHZhbHVlKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVn
T3ZlcnJpZGUoV0tTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0xh
c3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShXS1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCmluZGV4IDY4YmIwN2U0MTQ5NjdiMzc3ZGQ3MGY3YzY2MzczZGE5NDM5
ZGM2NTAuLmQyNDY1ZTM0YTIzNjNmMzViODkzMThkMjRkOWI5ZWQzYTNjMWZhYzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0xMDM2LDYgKzEwMzYsMjAg
QEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNo
cm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUiKSkgeworICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwor
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKGhvc3ROYW1lKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsKICAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7CiAgICAgICAgIApAQCAtMTUyNyw2ICsxNTQxLDE4IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFNldFBhcnRpdGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdCgpCiAgICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKIH0KIAordm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpCit7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7CisgICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKK30KKwordm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1Z092ZXJyaWRlKCkKK3sK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VEZWJ1
Z092ZXJyaWRlIikpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7Cit9CisKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKCkK
IHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0TGFzdFNlZW4iKSk7CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKaW5kZXggMDA1ZjM3ZDU5OTllNDQ3NTk3
OTYxZjU4ZGY3YWM4M2JlMzFlZDEwZi4uYzkyOWNjYjY3N2Y2YWUwMjVlMmIwY2VkN2QzMzYxODE2
YWQ3OWZmOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaApAQCAtNzQs
NiArNzQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vi
c2l0ZURhdGFSZW1vdmFsKCk7CiAgICAgdm9pZCBkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3Rl
bnRTdGF0ZSgpOwogICAgIHZvaWQgZGlkU2V0UGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNGb3JIb3N0
KCk7CisgICAgdm9pZCBkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKCk7CisgICAgdm9pZCBkaWRT
ZXRQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUoKTsKICAgICB2b2lkIGRpZFNldExhc3RT
ZWVuKCk7CiAgICAgdm9pZCBkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpOwogICAgIHZvaWQgZGlk
U2V0VmVyeVByZXZhbGVudFJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTU4NzU4YzRjMzNiNDQxZGVmYmQ1
OTM3MGQwNTQ2Zjk1YzEzNjc4YS4uYTllODZiZmJmNzExZjdiOTFmZGNhNjY3ZjY1MTA3ZWQyMWMz
MmM4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE4LTA3LTIwICBKb2huIFdpbGFuZGVyICA8
d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczog
RW5hYmxlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgaW4gZXhwZXJpbWVudGFsIGRlYnVnIG1vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzgzNQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDI0MDg1OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgZXhwZXJpbWVudGFs
IElUUCBEZWJ1ZyBNb2RlIGZlYXR1cmUgd29yaywgYXQgbGVhc3QKKyAgICAgICAgdG8gYSBiYXNp
YyBsZXZlbC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9l
bmFibGUtZGVidWctbW9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1w
cmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zZXQtY3VzdG9tLXByZXZh
bGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWw6IEFkZGVkLgorCiAyMDE4LTA3LTE4ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUg
cGFyc2luZyBvZiBjb2xvcnMgaW4gYXR0cmlidXRlZCBzdHJpbmcgdGVzdHMsIGFuZCBtYWtlIGl0
IHBvc3NpYmxlIHRvIGR1bXAgdGhlIHR5cGluZyBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZW5hYmxlLWRlYnVnLW1v
ZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTIxOWRk
M2IxMWYyYTM0YzQ1NzUzNDBlNzM4ZGFkY2ZhMGNjZmNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1t
b2RlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0IGZvciBlbmFibGluZyBkZWJ1
ZyBtb2RlIGFuZCB0aGF0IGl0IHBlcm1hbmVudGx5IHRyZWF0cyAzcmRwYXJ0eXRlc3R3ZWJraXQu
b3JnIGFzIGEgcHJldmFsZW50IHJlc291cmNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBodHRwOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBnb3Qgc2V0IGFzIHByZXZh
bGVudCByZXNvdXJjZSBpbiBkZWJ1ZyBtb2RlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2Rl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzdiMTI3NmRmNTFiM2U2NDJjYzQ0Zjk5NDQ4MTA1MzhmNzk1ZWNm
OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0i
VVRGLTgiPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRl
c3QgZm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgcGVybWFuZW50bHkgdHJlYXRz
IDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYXMgYSBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAg
anNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCB0aGlyZFBhcnR5T3JpZ2luID0gImh0
dHA6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIjsKKworICAgIGZ1bmN0aW9uIHNldEVuYWJsZUZl
YXR1cmUoZW5hYmxlLCBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBpbnRlcm5hbHMuc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChlbmFi
bGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFi
bGVkKGVuYWJsZSk7CisgICAgICAgIGlmICghZW5hYmxlKQorICAgICAgICAgICAgdGVzdFJ1bm5l
ci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShjb21wbGV0aW9uSGFuZGxlcik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfQorCisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAg
c2V0RW5hYmxlRmVhdHVyZSh0cnVlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0
UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlPcmlnaW4pKQor
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgYWxyZWFkeSBz
ZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NEZWJ1Z01vZGUodHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlP
cmlnaW4pKQorICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRoaXJkUGFydHlPcmlnaW4g
KyAiIGRpZG4ndCBnZXQgc2V0IGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQodGhpcmRQYXJ0eU9yaWdp
biArICIgZ290IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgaW4gZGVidWcgbW9kZS4iKTsKKyAg
ICAgICAgICAgICAgICBzZXRFbmFibGVGZWF0dXJlKGZhbHNlLCBmaW5pc2hKU1Rlc3QpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3NldC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Nl
dC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJkYzA3M2RhNDdjYmE0ODYwNzcyM2Q0ZmRiNjNjYmExNTZkODdlNjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBmb3IgZW5hYmxpbmcgZGVidWcgbW9kZSBhbmQgdGhh
dCBpdCBhbGxvd3Mgc2V0dGluZyBhIGN1c3RvbSBkb21haW4gYXMgYSBwcmV2YWxlbnQgcmVzb3Vy
Y2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMCBnb3Qgc2V0IGFzIGEgY3VzdG9tIHByZXZhbGVudCByZXNvdXJjZSBpbiBkZWJ1ZyBt
b2RlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWwgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2
YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNGY5YmFhNGM5
NGViMmY1ODhiMTE0NWFhMzA2ZDQ0MjgwODg4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxl
bnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRG
LTgiPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3Qg
Zm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgYWxsb3dzIHNldHRpbmcgYSBjdXN0
b20gZG9tYWluIGFzIGEgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgIGpzVGVzdElzQXN5bmMg
PSB0cnVlOworCisgICAgY29uc3QgdGhpcmRQYXJ0eU9yaWdpbiA9ICJodHRwOi8vbG9jYWxob3N0
OjgwMDAiOworCisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUsIGNvbXBsZXRp
b25IYW5kbGVyKSB7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChlbmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGVuYWJsZSk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAg
aWYgKCFlbmFibGUpCisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJlKHRydWUs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBhbHJlYWR5IHNldCBhcyBwcmV2YWxlbnQgcmVzb3Vy
Y2UuIik7CisKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0RlYnVnTW9kZSh0
cnVlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZURlYnVnT3ZlcnJpZGUodGhpcmRQYXJ0eU9yaWdpbiwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZSh0aGlyZFBhcnR5T3JpZ2luKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RGYWlsZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgZGlkbid0IGdldCBzZXQgYXMgcHJl
dmFsZW50IHJlc291cmNlLiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0UGFzc2VkKHRoaXJkUGFydHlPcmlnaW4gKyAiIGdvdCBzZXQgYXMg
YSBjdXN0b20gcHJldmFsZW50IHJlc291cmNlIGluIGRlYnVnIG1vZGUuIik7CisgICAgICAgICAg
ICAgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UsIGZpbmlzaEpTVGVzdCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345489</attachid>
            <date>2018-07-20 16:48:48 -0700</date>
            <delta_ts>2018-07-20 17:17:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187835-20180720164848.patch</filename>
            <type>text/plain</type>
            <size>45275</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNmYjhlNmNhOGI3MDA5MWM3
OWYzMDk5NjhmNjkwMzg0ZWQ3ODc5MzcuLmU0NWZhMDE4NjYyYjkxNDJhZjdjY2RmY2Y2ODE1Yzg3
MmQ0N2UwNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTgtMDctMjAgIEpvaG4gV2ls
YW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzOiBFbmFibGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBpbiBleHBlcmltZW50YWwgZGVidWcg
bW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3
ODM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MjQwODU5MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBleHBl
cmltZW50YWwgSVRQIERlYnVnIE1vZGUgZmVhdHVyZSB3b3JrLCBhdCBsZWFzdAorICAgICAgICB0
byBhIGJhc2ljIGxldmVsLiBUaGlzIG1lYW5zOgorICAgICAgICAtIERlYnVnIGxvZ2dpbmcgb24g
dGhlIElORk8gbGV2ZWwuCisgICAgICAgIC0gUGVybWFuZW50bHkgdHJlYXQgM3JkcGFydHl0ZXN0
d2Via2l0Lm9yZyBhcyBhIHByZXZhbGVudCByZXNvdXJjZS4KKyAgICAgICAgLSBTdXBwb3J0IG1h
bnVhbCBzZXR0aW5nIG9mIGEgY3VzdG9tIHBlcm1hbmVudGx5IHByZXZhbGVudCByZXNvdXJjZSB0
aHJvdWdoIHVzZXIKKyAgICAgICAgICBkZWZhdWx0cyBvbiBDb2NvYSBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAg
ICAgKFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVX
aXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkKToKKyAgICAgICAgICAgIFVzZWQgdG8gcGljayB1cCBjdXN0b20gc2V0IHByZXZhbGVudCBy
ZXNvdXJjZSBvbiBDb2NvYSBwbGF0Zm9ybXMgKGZvciBkZWJ1ZyBtb2RlKS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0RlYnVnTW9kZU92
ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIE5vdyBz
a2lwcyBwcm9jZXNzaW5nIG9mIGRlYnVnIG1vZGUgcHJldmFsZW50IHJlc291cmNlcyBzbyB0aGF0
IHRoZXkKKyAgICAgICAgICAgIHN0YXkgcHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSk6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYWtlIDNy
ZHBhcnR5dGVzdHdlYmtpdC5vcmcgYW5kIGFueSBjdXN0b20gZG9tYWluCisgICAgICAgICAgICBz
ZXQgdGhyb3VnaCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKCkKKyAgICAgICAgICAgIGJlIHByZXZhbGVudCByZXNvdXJj
ZXMuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUpOgorICAgICAgICAgICAgU2V0cyBhIGN1c3RvbSBkb21haW4gdG8gYWx3YXlzIGJl
IHRyZWF0ZWQgYXMgcHJldmFsZW50IGluIGRlYnVnIG1vZGUuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIpOgorICAgICAgICAgICAgTm93
IG1ha2VzIHN1cmUgM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3RvbSBkb21haW4g
c2V0IHRocm91Z2gKKyAgICAgICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKQorICAgICAgICAgICAgYXJlIHBy
ZXZhbGVudCByZXNvdXJjZXMgZXZlbiBhZnRlciBhIGNsZWFyIG9mIHRoZSBzdG9yZS4KKyAgICAg
ICAgKFdlYktpdDo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToKKyAgICAgICAgICAgIFdlIG1h
eSBoYXZlIHRvbyBtYW55IGRvbWFpbiBuYW1lcyB0byBmaXQgaW4gYSBzaW5nbGUgbG9nIHN0YXRl
bWVudC4KKyAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gbG9ncyB0aGVtIGluIGJhdGNoZXMgb2Yg
NTAsIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDUwLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZyk6CisgICAg
ICAgICAgICBOb3cgbWFrZXMgdXNlIG9mIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygpIGluIGRl
YnVnIG1vZGUuCisgICAgICAgICogVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgY29uc3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6
OnBvcHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzayk6CisgICAgICAgICAgICBOb3cgYWNjZXB0cyBh
IG5vbi1lbXB0eSBtZW1vcnkgc3RvcmUgaW4gZGVidWcgbW9kZS4gVGhpcyBpcyB0byBzdXBwb3J0
IGEKKyAgICAgICAgICAgIHByZS1wb3B1bGF0ZWQgc3RvcmUgd2l0aCAzcmRwYXJ0eXRlc3R3ZWJr
aXQub3JnIGFuZCBhbnkgY3VzdG9tIGRvbWFpbiBhbHJlYWR5CisgICAgICAgICAgICBzZXQgYXMg
cHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2U6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
OgorCiAyMDE4LTA3LTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBTUEkgdG8gZGVmZXIgcnVubmluZyBhc3luYyBzY3JpcHQgdW50aWwgYWZ0
ZXIgZG9jdW1lbnQgbG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggYTU0ZWNiYzI2NmRhYjBhOGJhZjIz
Yzc0NTVlYmVlNDRjMTMwMjMyMC4uMDczYzEwZmQxYjVmZmRlYTc1MzNjYWYwMDZkN2E0NzFjMTJi
ODZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC02OSw2ICs2OSwzMSBAQCB2b2lkIFdLV2Vic2l0ZURh
dGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmCiAgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGUpOwogfQogCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVXaXRoQ29tcGxldGlvbkhhbmRsZXIo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUsIHZvaWQqIGNv
bnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5jdGlvbiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvKiBzdG9yZSA9IFdlYktpdDo6dG9JbXBsKGRhdGFT
dG9yZVJlZiktPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7Cisg
ICAgaWYgKCFzdG9yZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShlbmFibGUsIFtjb250ZXh0LCBjb21wbGV0aW9uSGFuZGxlcl0gewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICB9KTsKK30KKwordm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJp
bmdSZWYgaG9zdCwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0Rl
YnVnTW9kZUZ1bmN0aW9uIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8qIHN0b3JlID0g
V2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNl
TG9hZFN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXN0b3JlKSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN0b3Jl
LT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShXZWJDb3JlOjpVUkwoV2ViQ29yZTo6
VVJMKCksIFdlYktpdDo6dG9JbXBsKGhvc3QpLT5zdHJpbmcoKSksIFtjb250ZXh0LCBjb21wbGV0
aW9uSGFuZGxlcl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKKyAgICB9
KTsKK30KIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBz
ZWNvbmRzLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzTGFzdFNl
ZW5GdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvKiBzdG9yZSA9IFdlYktp
dDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IDViNzQ2MjBiZGJjOTIwZmJlZjgyYThlZTJiZmZh
MDMzYWEwOGM1NmQuLjUwMzM4YjBiOWIyNGJkOTQwMDhiYmFkZTFhMzFlYzU3YmE0OWQwN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oCkBAIC00MCw2ICs0MCw5IEBAIFdLX0VYUE9SVCBXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRlTm9uUGVyc2lzdGVudERhdGFTdG9yZSgpCiBXS19F
WFBPUlQgYm9vbCBXS1dlYnNpdGVEYXRhU3RvcmVHZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmKTsKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlKTsKIFdLX0VYUE9SVCB2
b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwordHlwZWRl
ZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0RlYnVnTW9kZUZ1bmN0aW9uKSh2
b2lkKiBmdW5jdGlvbkNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3Jl
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZVdpdGhDb21wbGV0aW9uSGFuZGxlcihX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSwgdm9pZCogY29u
dGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0RlYnVnTW9kZUZ1bmN0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyKTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0
LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlv
bkhhbmRsZXIpOyAgICAKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3Rp
Y3NMYXN0U2VlbkZ1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwogV0tfRVhQT1JUIHZv
aWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzLCB2
b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzTGFzdFNlZW5GdW5jdGlv
biBjb21wbGV0aW9uSGFuZGxlcik7CiB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGdW5jdGlvbikodm9pZCogZnVuY3Rpb25Db250ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KaW5kZXggZTZi
MTQ1OTQ4YmQ3OWMyODdiZjJlZDk0MWZkNWQxMTM5N2NlNTNlMS4uNjM0NTgyOTAzZTVjYzJkMWY2
MzBkZDVkYzc1YmJkOTFiNGRlZDBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlQ29jb2EubW0KQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTEsNiArNTIs
OSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2Vy
RGVmYXVsdHNJZk5lZWRlZCgpCiAKICAgICAgICAgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z0xvZ2dpbmdFbmFibGVkIl0pOwogICAgICAgICBzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6QCJFeHBlcmltZW50YWxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlIl0pOworICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0g
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIl07CisgICAgICAgIGlm
IChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CiAgICAg
ICAgIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiRXhwZXJpbWVudGFsU3RvcmFnZUFjY2Vzc1By
b21wdHNFbmFibGVkIl0pOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKaW5k
ZXggOWYwYzdmMGI2NGRhNDExMDkzOTEyYjE2YjZmNzgzZjExYWVjMmE1Mi4uZjljYTA2ZDdjNThi
NzJkOTMxY2JhN2RlYTk2YjM5MWM2MjEyMTZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3Bw
CkBAIC01MSw2ICs1MSw3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayB7IDUwIH07CiBjb25zdGV4cHIgU2Vjb25kcyBtaW5p
bXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCB7IDVfcyB9OwogY29uc3RleHByIHVuc2ln
bmVkIG9wZXJhdGluZ0RhdGVzV2luZG93IHsgMzAgfTsKIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhJ
bXBvcnRhbmNlIHsgMyB9Oworc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnU3RhdGljUHJldmFsZW50
UmVzb3VyY2UgeyAiM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyIgfTsKIAogI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAogc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnMpCkBAIC0zMTksMTMgKzMyMCwyMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2
YWxlbgogICAgIH0KIH0KIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzRGVidWdNb2RlT3ZlcnJpZGUoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0
aXN0aWMpCit7CisgICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4gPT0g
ZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2
ZWxEb21haW4gPT0gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworfQorCiB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcygpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBpZiAo
bV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKSB7CiAgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKCFyZXNvdXJjZVN0YXRp
c3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgaWYgKGlzRGVidWdN
b2RlT3ZlcnJpZGUocmVzb3VyY2VTdGF0aXN0aWMpKQorICAgICAgICAgICAgICAgIHNldFByZXZh
bGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpI
aWdoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZSkgewogICAgICAgICAgICAgICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVk
aXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsKICAgICAgICAgICAgICAgICBh
dXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNv
dXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpMb3c7CiAgICAgICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVz
b3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKQEAgLTUwNywxMyArNTE4LDQ4IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0
aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvCiAgICAgfSk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2Vz
Rm9yRGVidWdNb2RlKCkKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHByaW1hcnlEb21haW5zVG9CbG9jazsK
KyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKwor
ICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFw
cGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKworICAgIGlmICghbV9kZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBtYW51YWxS
ZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4obV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgc2V0UHJldmFsZW50
UmVzb3VyY2UobWFudWFsUmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxl
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgbV9kZWJ1Z01vZGVF
bmFibGVkID0gZW5hYmxlOworICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKKwor
ICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgaWYgKCFtX2RlYnVnTW9kZUVu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSA9IGRvbWFpbjsKKyAgICBhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
CisKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiSVRQIERl
YnVnIE1vZGUgJXtwdWJsaWN9cy4iLCAobV9kZWJ1Z01vZGVFbmFibGVkID8gImVuYWJsZWQiIDog
ImRpc2FibGVkIikpOworICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhl
IHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRvbWFpbi51dGY4KCkuZGF0YSgpKTsKICNl
bmRpZgogfQogCkBAIC04OTEsNyArOTM3LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmNsZWFyKCkKICAgICBtX29wZXJhdGluZ0RhdGVzLmNsZWFyKCk7CiAKICAg
ICByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKCk7Ci0gICAgdXBkYXRlQ29va2llUGFydGl0aW9uaW5n
Rm9yRG9tYWlucyh7IH0sIHsgfSwgeyB9LCBTaG91bGRDbGVhckZpcnN0OjpZZXMsIFtdKCkgeyB9
KTsKKworICAgIGF1dG8gcHJpbWFyeURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVz
b3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgdXBkYXRlQ29va2llUGFydGl0aW9uaW5nRm9yRG9t
YWlucyh7IH0sIHByaW1hcnlEb21haW5zVG9CbG9jaywgeyB9LCBTaG91bGRDbGVhckZpcnN0OjpZ
ZXMsIFtdKCkgeyB9KTsKIH0KIAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6Ondhc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24oY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgY3VycmVudCwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgdXBkYXRlZCkgY29uc3QKQEAgLTkzNSw2ICs5ODMsMzkgQEAgYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQ
cm9tcHQKICAgICByZXR1cm4gc3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3Jp
Z2lucy5jb250YWlucyhmaXJzdFBhcnR5UHJpbWFyeURvbWFpbik7CiB9CiAKK3N0YXRpYyB2b2lk
IGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBkb21haW5zKQoreworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0
YXRpYyBjb25zdCBhdXRvIG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7
CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
ZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJB
Ym91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yOiAl
e3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTdHJpbmc+IGJh
dGNoOworICAgIGJhdGNoLnJlc2VydmVDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxv
Z1N0YXRlbWVudCk7CisgICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisKKyAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKGJhdGNoLnNpemUoKSA9PSBtYXhO
dW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31z
IGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTog
JXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFp
bnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBiYXRjaC5zaHJp
bmsoMCk7CisgICAgICAgICAgICBiYXRjaE51bWJlcisrOworICAgICAgICB9CisgICAgICAgIGJh
dGNoLmFwcGVuZChkb21haW4pOworICAgIH0KKyAgICBpZiAoIWJhdGNoLmlzRW1wdHkoKSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1
YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJP
ZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7Cisj
ZW5kaWYKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0
ZUNvb2tpZVBhcnRpdGlvbmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC05NjUsMTYg
KzEwNDYsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0
ZUNvb2tpZVBhcnRpdGlvbmluZyhDb21wbGV0aW9uSGFuZGwKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGlmIChtX2RlYnVnTG9nZ2luZ0Vu
YWJsZWQpIHsKICAgICAgICAgaWYgKCFkb21haW5zVG9QYXJ0aXRpb24uaXNFbXB0eSgpKQotICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJB
Ym91dCB0byBwYXJ0aXRpb24gY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgJXtw
dWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcoZG9tYWluc1RvUGFydGl0aW9uKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygicGFydGl0aW9uIiwg
ZG9tYWluc1RvUGFydGl0aW9uKTsKICAgICAgICAgaWYgKCFkb21haW5zVG9CbG9jay5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvIGJsb2NrIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9y
ICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnNUb0Jsb2NrKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21h
aW5zVG9CbG9jayk7CiAgICAgICAgIGlmICghZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJs
b2NrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gbmVpdGhlciBwYXJ0aXRpb24gbm9yIGJsb2NrIGNv
b2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1Rv
U3RyaW5nKGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaykudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoIm5laXRoZXIgcGFydGl0aW9u
IG5vciBibG9jayIsIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jayk7CiAgICAgfQot
I2VuZGlmCiAKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHN0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvUGFydGl0aW9uID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFp
bnNUb1BhcnRpdGlvbiksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNU
b0Jsb2NrKSwgZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jayksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICBzdG9y
ZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFu
ZGxlcihkb21haW5zVG9QYXJ0aXRpb24sIGRvbWFpbnNUb0Jsb2NrLCBkb21haW5zVG9OZWl0aGVy
UGFydGl0aW9uTm9yQmxvY2ssIFNob3VsZENsZWFyRmlyc3Q6Ok5vLCBbdGhpcywgc3RvcmUgPSBz
dG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmluZGV4IDRhMDhiN2I1NmIz
MTUzNGM1NDVjODM3ZWE3MGU3ZDc4YjM2OTc1YzQuLjMzNDEyNjFiZDUxYWUyMTBkMTQzMjk5OWJi
Y2NlN2Y0YzY3NGFiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xMTMsNiArMTEzLDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKFNlY29uZHMpOwogICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOwog
ICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKKyAgICBi
b29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnTW9kZUVuYWJsZWQ7IH07CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBT
dHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1h
cnlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJp
bmcmJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFp
biwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwpAQCAtMTQz
LDYgKzE0NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRl
cm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAg
ICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBpc0RlYnVnTW9kZU92ZXJyaWRl
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBl
bnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKICAgICB2b2lkIHJlbW92ZURh
dGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBwcnVuZVN0
YXRpc3RpY3NJZk5lZWRlZCgpOwogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJik7
CkBAIC0xODEsNiArMTg1LDcgQEAgcHJpdmF0ZToKICAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXA7CiAgICAgYm9vbCBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBTdHJpbmcg
bV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIHsgfTsKICAgICBib29sIG1fc3RvcmFnZUFj
Y2Vzc1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGF0YVJlY29yZHNCZWlu
Z1JlbW92ZWQgeyBmYWxzZSB9OwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAppbmRl
eCAyOWFjYWUwMTRmMmIwM2U4NmI0MzNiZDRkOGFkZWJiMTYzMGQ3YjE3Li41MTIxZTdiNjY3OGNm
ZThkM2JjNTg5NDE1ZmZlZGNlODczOTM3MDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5jcHAKQEAgLTIzNSw3ICsyMzUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9tZW1vcnlTdG9y
ZS5pc0VtcHR5KCksICJUaGlzIGlzIHRoZSBpbml0aWFsIGltcG9ydCBzbyB0aGUgc3RvcmUgc2hv
dWxkIGJlIGVtcHR5Iik7CisgICAgLy8gRGVidWcgbW9kZSBoYXMgYSBwcmVwb3VsYXRlZCBtZW1v
cnkgc3RvcmUuCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlzRW1wdHko
KSB8fCBtX21lbW9yeVN0b3JlLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoKSwgIlRo
aXMgaXMgdGhlIGluaXRpYWwgaW1wb3J0IHNvIHRoZSBzdG9yZSBzaG91bGQgYmUgZW1wdHkiKTsK
ICAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7CiAK
ICAgICBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gcmVhZFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAppbmRleCBiMDlhZTRhMjZjOTJjOWNhZTdiNzk4ZTE2NGNhN2Y3MzUyYTNkNTc4Li5l
YmFiNmJlYmQyMzBhOWE4NjVmZGYwMGNjODVmYzI0YjlkYmM0NGRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKQEAgLTE2OSwxMyArMTY5LDI5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKQogICAgIHNlbWFwaG9yZS53
YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1
ZSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
Ci0gICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7CisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVl
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBw
b3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0g
aXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUocHJpbWFyeURvbWFpbik7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
CmluZGV4IDVkYzhkOWQyZjY3MTQ5ZmZlOTViNzE2MzMzMzZkODc1OGVjNTNlMDUuLjRlNTcwNjJh
ZTk1ZmJiM2Y1MzliMTQxMDdkYjBmNjBjODFkNmNhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC0x
MzIsOCArMTMyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIHZvaWQgc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLQorICAgIHZvaWQgc2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgV2Vi
Q29yZTo6VVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICAKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYmIGNhbGxiYWNrKSB7IG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spOyB9CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25zdCBTdHJpbmcmIHN1
YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4s
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDdmMzdlNzg3
NzA0YTFmMzc0MmI4ZjdjYzdmYjYwNDZlN2JiMzI3MDEuLjM3MzdiMmNlZWJjNmNmZjdhM2UwMjFl
MWYwMzFlNzU0ZGU1NjMwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xNTA3LDEwICsxNTA3LDE3
IEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSgpIGNvbnN0CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQpCit7CisgICAgc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShlbmFibGVkLCBbXSgpIHsgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVkOwogICAgIGlmIChtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MpCi0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGVkKTsKKyAgICAgICAgbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
KGVuYWJsZWQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBlbHNlCisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0FuZFNldFRlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lk
IChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAwMmRlMThlZjY5
ZDA5ZTAzOWU4OGZlZDk0NGU5YTYyYjRkZmJkYzc5Li4zNjI1ZmEyNjE2M2I4NzZlMzg2MTRmY2I1
MjhhNzBlOWYyZTU3M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDksNiArMTA5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAg
Ym9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIHZvaWQgc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCiAgICAgdWludDY0X3QgY2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEoKSBjb25z
dCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5jYWNoZVN0b3JhZ2VQZXJPcmlnaW5R
dW90YTsgfQogICAgIHZvaWQgc2V0Q2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEodWludDY0X3Qg
cXVvdGEpIHsgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uY2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVv
dGEgPSBxdW90YTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGQ4NzY2MDlkYmJjMmYzYjMxYjBlNDA2YzdlZjdlNjFjYTBiNzFlNzMuLmM3OThm
ODM0NzhlNmEyMTlkOTdiODBhMTI2MDM2YjhhMDRiMGYwZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxOC0wNy0y
MCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJj
ZSBMb2FkIFN0YXRpc3RpY3M6IEVuYWJsZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGluIGV4cGVyaW1l
bnRhbCBkZWJ1ZyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODc4MzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQyNDA4NTkwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgdGhlIGV4cGVyaW1lbnRhbCBJVFAgRGVidWcgTW9kZSBmZWF0dXJlIHdvcmssIGF0IGxlYXN0
CisgICAgICAgIHRvIGEgYmFzaWMgbGV2ZWwuIEFsbCBvZiB0aGUgY2hhbmdlcyB0byBUZXN0UnVu
bmVyIGFyZSB0byBzdXBwb3J0IHRoZQorICAgICAgICBsYXlvdXQgdGVzdHMgZm9yIHRoZSBmdW5j
dGlvbmFsaXR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGVDYWxsYmFjayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0
aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmg6CisKIDIwMTgtMDctMTggIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFNQSSB0
byBkZWZlciBydW5uaW5nIGFzeW5jIHNjcmlwdCB1bnRpbCBhZnRlciBkb2N1bWVudCBsb2FkCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBjMDljYmFlMGNlMzA2NGI4ZmQ2ODkwNmU0Njlk
NTFjMjIyZjFlMTYyLi5iZWZlZmYyYTIyYTFlYjI4MTczZTAxODY3OTQwMGQ3ZDdiZWZkODdlIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTI3Miw2ICsyNzIsOCBAQCBpbnRlcmZhY2Ug
VGVzdFJ1bm5lciB7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNv
cmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNz
RGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGlu
c3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsK
KyAgICB2b2lkIHNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShET01TdHJpbmcgaG9zdE5hbWUsIG9iamVjdCBjb21wbGV0aW9uSGFuZGxl
cik7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBk
b3VibGUgc2Vjb25kcywgb2JqZWN0IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFs
dWUsIG9iamVjdCBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVmVy
eVByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSwgb2Jq
ZWN0IGNvbXBsZXRpb25IYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggNTlmMWE2YjRmOGFj
OGNjNjk0YWY3NDE2YzAwYTkyZGNkM2I3Y2Y2MS4uN2I0NTRlODZhM2Y1OTc0NmY4MjBjNzkyNzZm
NmE3ZjYzMjEyOWEzZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTMxNSw2ICszMTUsMTYgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbERpZFNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUiKSkgeworICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NDYWxs
RGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxE
aWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKSB7CisgICAgICAgIG1fdGVzdFJ1
bm5lci0+c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNh
bGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsRGlkU2V0TGFzdFNlZW4iKSkg
ewogICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxs
YmFjaygpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCAzNzRlYzc5ZjRmMzY3MTIzNzZm
MzhlOWEyZjRkNjdhYTExYmJiMGRhLi40MmZjZDU5OWEzNWIzZWIyNjhjMDVmYmEwNTg0MmVkYzE4
ODI1ODE2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAKQEAgLTczNiw2ICs3MzYsOCBAQCBlbnVtIHsKICAgICBXaWxsRW5k
U3dpcGVDYWxsYmFja0lELAogICAgIERpZEVuZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBEaWRSZW1v
dmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCwKKyAgICBTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2Fs
bGJhY2tJRCwKKyAgICBTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVD
YWxsYmFja0lELAogICAgIFNldFN0YXRpc3RpY3NMYXN0U2VlbkNhbGxiYWNrSUQsCiAgICAgU2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwKICAgICBTZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwKQEAgLTEzMzEsNiArMTMzMywzNSBAQCB2
b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soKQogICAg
IGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQp
OwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1
ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikp
OworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKworfQorCit2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0UnVu
bmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0RlYnVnTW9kZUNhbGxiYWNrSUQpOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShK
U1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgCisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGUiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlQ2FsbGJhY2tJRCk7Cit9CisKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBk
b3VibGUgc2Vjb25kcywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21w
bGV0aW9uSGFuZGxlcik7CkBAIC0xMzYzLDcgKzEzOTQsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJD
YWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lEKTsKIH0KIAotCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDRkYWQwZjBkZjA2ODg1ZDJkZjY4
YzhkZDg4NDIzYWVmYTU5M2M0YmIuLmNlZjVhNzhjN2Y3YWY2NDVkZDkzOTBjYzJhMDgwZjc4N2Iz
ODIzNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCkBAIC0zODIsNiArMzgyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRp
c3RpY3NTZXRTaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
Q2FsbERpZFNldFBhcnRpdGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNz
RGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpOworICAg
IHZvaWQgc3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpOworICAgIHZvaWQg
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHN0YXRpc3Rp
Y3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFjaygpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUg
c2Vjb25kcywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzdGF0aXN0
aWNzQ2FsbERpZFNldExhc3RTZWVuQ2FsbGJhY2soKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1
ZVJlZiBjb21wbGV0aW9uSGFuZGxlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCmluZGV4IGUwYTg1MzQ3MWZkMWI3YmY2MDU4ODM3MjhjMTgyNGE3ZDBkNTVjNDIu
LjNlYTNjMGE1OGU4ODgwYTA4YjA1ZGVmYTllYjA5Y2MwMTYwNTI1ZTYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yNjQ1LDcgKzI2NDUsMjUgQEAgc3Rh
dGljIHZvaWQgcmVzb3VyY2VTdGF0aXN0aWNzQm9vbGVhblJlc3VsdENhbGxiYWNrKGJvb2wgcmVz
dWx0LCB2b2lkKiB1c2VyRGF0YSkKICAgICBjb250ZXh0LT5kb25lID0gdHJ1ZTsKICAgICBjb250
ZXh0LT50ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiB9Ci0gICAgCisKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSkKK3sKKyAgICBhdXRv
KiBkYXRhU3RvcmUgPSBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKHBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBSZXNvdXJjZVN0YXRpc3RpY3NDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhp
cyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZVdpdGhDb21wbGV0aW9uSGFuZGxlcihkYXRhU3RvcmUsIHZhbHVlLCAmY29udGV4dCwgcmVz
b3VyY2VTdGF0aXN0aWNzVm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0
LmRvbmUsIG5vVGltZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkU2V0U3RhdGlz
dGljc0RlYnVnTW9kZSgpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoV0tTdHJpbmdSZWYgaG9zdE5hbWUpCit7Cisg
ICAgYXV0byogZGF0YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgUmVzb3VyY2VTdGF0aXN0aWNzQ2FsbGJhY2tDb250ZXh0IGNvbnRl
eHQoKnRoaXMpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkYXRhU3RvcmUsIGhvc3ROYW1lLCAmY29u
dGV4dCwgcmVzb3VyY2VTdGF0aXN0aWNzVm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBydW5VbnRp
bChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlk
U2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKTsKK30KKwogdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNv
bmRzKQogewogICAgIGF1dG8qIGRhdGFTdG9yZSA9IFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3Rv
cmUocGxhdGZvcm1Db250ZXh0KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCmluZGV4IDUxOWJmYjdkYTAwOTc5MzZhMTE5MmU5YjgzODZhZjg1ZmM1MDIwMWQuLjAwMmFi
NGQwNTYyODAxYTJkYTZhYjUxM2Q5MDdlMDU0ZTFlOGIxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTE1Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7
IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAg
IHZvaWQgc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShXS1N0cmluZ1JlZiBob3N0TmFt
ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUs
IGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzVmVyeVByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVl
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggNjhiYjA3
ZTQxNDk2N2IzNzdkZDcwZjdjNjYzNzNkYTk0MzlkYzY1MC4uNzliMTg0MTFiNDJjOTJkOWUzNmI3
YWRkYmEwMzg4ODE2OGMwZTQxYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHAKQEAgLTEwMzYsNiArMTAzNiwyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7Cisg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOworICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlKGhvc3ROYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3Rh
dGlzdGljc0xhc3RTZWVuIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CiAgICAgICAgIApAQCAtMTUyNyw2ICsx
NTQxLDE4IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFBhcnRpdGlvbk9yQmxvY2tDb29r
aWVzRm9ySG9zdCgpCiAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKIH0KIAordm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSgpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUiKSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKK30KKwordm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKKyAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworfQorCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkaWRTZXRMYXN0U2VlbigpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFNldExhc3RTZWVuIikpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5o
CmluZGV4IDAwNWYzN2Q1OTk5ZTQ0NzU5Nzk2MWY1OGRmN2FjODNiZTMxZWQxMGYuLjRlMjRjYzAx
Y2Y0OGYzZWJkZGE0ZjdhYjUxOWMwZGU1NzA2ODYxNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmgKQEAgLTc0LDYgKzc0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlk
Q2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpOwogICAgIHZvaWQgZGlk
UmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKTsKICAgICB2b2lkIGRpZFNldFBhcnRp
dGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdCgpOworICAgIHZvaWQgZGlkU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSgpOworICAgIHZvaWQgZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
KTsKICAgICB2b2lkIGRpZFNldExhc3RTZWVuKCk7CiAgICAgdm9pZCBkaWRTZXRQcmV2YWxlbnRS
ZXNvdXJjZSgpOwogICAgIHZvaWQgZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggOTU4NzU4YzRjMzNiNDQxZGVmYmQ1OTM3MGQwNTQ2Zjk1YzEzNjc4YS4uYTllODZiZmJmNzEx
ZjdiOTFmZGNhNjY3ZjY1MTA3ZWQyMWMzMmM4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE4
LTA3LTIwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
c291cmNlIExvYWQgU3RhdGlzdGljczogRW5hYmxlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgaW4gZXhw
ZXJpbWVudGFsIGRlYnVnIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4NzgzNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDI0MDg1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBtYWtlcyB0aGUgZXhwZXJpbWVudGFsIElUUCBEZWJ1ZyBNb2RlIGZlYXR1cmUgd29yaywgYXQg
bGVhc3QKKyAgICAgICAgdG8gYSBiYXNpYyBsZXZlbC4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUt
ZGVidWctbW9kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWw6
IEFkZGVkLgorCiAyMDE4LTA3LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgcGFyc2luZyBvZiBjb2xvcnMgaW4gYXR0cmlidXRlZCBz
dHJpbmcgdGVzdHMsIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGR1bXAgdGhlIHR5cGluZyBhdHRy
aWJ1dGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvZW5hYmxlLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NTIxOWRkM2IxMWYyYTM0YzQ1NzUzNDBlNzM4ZGFkY2ZhMGNjZmNj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBA
CitUZXN0IGZvciBlbmFibGluZyBkZWJ1ZyBtb2RlIGFuZCB0aGF0IGl0IHBlcm1hbmVudGx5IHRy
ZWF0cyAzcmRwYXJ0eXRlc3R3ZWJraXQub3JnIGFzIGEgcHJldmFsZW50IHJlc291cmNlLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBodHRwOi8vM3JkcGFydHl0ZXN0d2Vi
a2l0Lm9yZyBnb3Qgc2V0IGFzIHByZXZhbGVudCByZXNvdXJjZSBpbiBkZWJ1ZyBtb2RlLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUt
ZGVidWctbW9kZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI1MGQ1Mjk5MDVjMjE5
ZGM0Yjk2Y2RmMDc5ODRhNGY0MGQyOGQzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1s
CkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhl
YWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3QgZm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRo
YXQgaXQgcGVybWFuZW50bHkgdHJlYXRzIDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYXMgYSBwcmV2
YWxlbnQgcmVzb3VyY2UuIik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25z
dCB0aGlyZFBhcnR5T3JpZ2luID0gImh0dHA6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIjsKKwor
ICAgIGZ1bmN0aW9uIHNldEVuYWJsZUZlYXR1cmUoZW5hYmxlLCBjb21wbGV0aW9uSGFuZGxlcikg
eworICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5h
YmxlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChlbmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldENvb2tp
ZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIGlmICghZW5hYmxl
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRv
dy5pbnRlcm5hbHMpIHsKKyAgICAgICAgc2V0RW5hYmxlRmVhdHVyZSh0cnVlLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKHRoaXJkUGFydHlPcmlnaW4pKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGhpcmRQ
YXJ0eU9yaWdpbiArICIgYWxyZWFkeSBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUodHJ1ZSwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKHRoaXJkUGFydHlPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKHRoaXJkUGFydHlPcmlnaW4gKyAiIGRpZG4ndCBnZXQgc2V0IGFzIHByZXZhbGVudCBy
ZXNvdXJjZS4iKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRl
c3RQYXNzZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgZ290IHNldCBhcyBwcmV2YWxlbnQgcmVzb3Vy
Y2UgaW4gZGVidWcgbW9kZS4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUoZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBz
ZXRFbmFibGVGZWF0dXJlKGZhbHNlLCBmaW5pc2hKU1Rlc3QpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL3NldC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3NldC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJkYzA3M2RhNDdjYmE0ODYwNzcyM2Q0ZmRiNjNjYmExNTZkODdlNjIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBmb3IgZW5hYmxpbmcgZGVidWcgbW9kZSBh
bmQgdGhhdCBpdCBhbGxvd3Mgc2V0dGluZyBhIGN1c3RvbSBkb21haW4gYXMgYSBwcmV2YWxlbnQg
cmVzb3VyY2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMCBnb3Qgc2V0IGFzIGEgY3VzdG9tIHByZXZhbGVudCByZXNvdXJjZSBpbiBk
ZWJ1ZyBtb2RlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9zZXQtY3VzdG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3Rv
bS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmMjhh
ZjM2MDg3NDJmYmFkN2IxNWNlOGMyMjlhZTVjOTk4ZWRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1w
cmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNl
dD0iVVRGLTgiPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24o
IlRlc3QgZm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgYWxsb3dzIHNldHRpbmcg
YSBjdXN0b20gZG9tYWluIGFzIGEgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgIGpzVGVzdElz
QXN5bmMgPSB0cnVlOworCisgICAgY29uc3QgdGhpcmRQYXJ0eU9yaWdpbiA9ICJodHRwOi8vbG9j
YWxob3N0OjgwMDAiOworCisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUsIGNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChlbmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGVuYWJsZSk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAg
ICAgICAgaWYgKCFlbmFibGUpCisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzdGVudFN0YXRlKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJl
KHRydWUsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAgICAg
dGVzdEZhaWxlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBhbHJlYWR5IHNldCBhcyBwcmV2YWxlbnQg
cmVzb3VyY2UuIik7CisKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0RlYnVn
TW9kZSh0cnVlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSh0aGlyZFBhcnR5T3JpZ2luLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlPcmlnaW4pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBkaWRuJ3QgZ2V0IHNldCBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgZ290IHNl
dCBhcyBhIGN1c3RvbSBwcmV2YWxlbnQgcmVzb3VyY2UgaW4gZGVidWcgbW9kZS4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKGZhbHNlLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFs
c2UsIGZpbmlzaEpTVGVzdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345493</attachid>
            <date>2018-07-20 17:17:27 -0700</date>
            <delta_ts>2018-07-20 20:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187835-20180720171726.patch</filename>
            <type>text/plain</type>
            <size>45260</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNmYjhlNmNhOGI3MDA5MWM3
OWYzMDk5NjhmNjkwMzg0ZWQ3ODc5MzcuLmE2YWJiYzJhZjg1NWE1MjBmNDg4YmJiNjllNTdlOGU1
N2MyZjAxZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTgtMDctMjAgIEpvaG4gV2ls
YW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzOiBFbmFibGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBpbiBleHBlcmltZW50YWwgZGVidWcg
bW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3
ODM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MjQwODU5MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBleHBlcmlt
ZW50YWwgSVRQIERlYnVnIE1vZGUgZmVhdHVyZSB3b3JrLCBhdCBsZWFzdAorICAgICAgICB0byBh
IGJhc2ljIGxldmVsLiBUaGlzIG1lYW5zOgorICAgICAgICAtIERlYnVnIGxvZ2dpbmcgb24gdGhl
IElORk8gbGV2ZWwuCisgICAgICAgIC0gUGVybWFuZW50bHkgdHJlYXQgM3JkcGFydHl0ZXN0d2Vi
a2l0Lm9yZyBhcyBhIHByZXZhbGVudCByZXNvdXJjZS4KKyAgICAgICAgLSBTdXBwb3J0IG1hbnVh
bCBzZXR0aW5nIG9mIGEgY3VzdG9tIHBlcm1hbmVudGx5IHByZXZhbGVudCByZXNvdXJjZSB0aHJv
dWdoIHVzZXIKKyAgICAgICAgICBkZWZhdWx0cyBvbiBDb2NvYSBwbGF0Zm9ybXMuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAg
KFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGVXaXRo
Q29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAg
ICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vi
c2l0ZURhdGFTdG9yZVJlZi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVk
KToKKyAgICAgICAgICAgIFVzZWQgdG8gcGljayB1cCBjdXN0b20gc2V0IHByZXZhbGVudCByZXNv
dXJjZSBvbiBDb2NvYSBwbGF0Zm9ybXMgKGZvciBkZWJ1ZyBtb2RlKS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRv
RGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIE5v
dyBza2lwcyBwcm9jZXNzaW5nIG9mIGRlYnVnIG1vZGUgcHJldmFsZW50IHJlc291cmNlcyBzbyB0
aGF0IHRoZXkKKyAgICAgICAgICAgIHN0YXkgcHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSk6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYWtl
IDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYW5kIGFueSBjdXN0b20gZG9tYWluCisgICAgICAgICAg
ICBzZXQgdGhyb3VnaCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKCkKKyAgICAgICAgICAgIGJlIHByZXZhbGVudCByZXNv
dXJjZXMuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAgICAgU2V0cyBhIGN1c3RvbSBkb21haW4gdG8gYWx3YXlz
IGJlIHRyZWF0ZWQgYXMgcHJldmFsZW50IGluIGRlYnVnIG1vZGUuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIpOgorICAgICAgICAgICAg
Tm93IG1ha2VzIHN1cmUgM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBhbmQgYW55IGN1c3RvbSBkb21h
aW4gc2V0IHRocm91Z2gKKyAgICAgICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKQorICAgICAgICAgICAgYXJl
IHByZXZhbGVudCByZXNvdXJjZXMgZXZlbiBhZnRlciBhIGNsZWFyIG9mIHRoZSBzdG9yZS4KKyAg
ICAgICAgKFdlYktpdDo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToKKyAgICAgICAgICAgIFdl
IG1heSBoYXZlIHRvbyBtYW55IGRvbWFpbiBuYW1lcyB0byBmaXQgaW4gYSBzaW5nbGUgbG9nIHN0
YXRlbWVudC4KKyAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gbG9ncyB0aGVtIGluIGJhdGNoZXMg
b2YgNTAsIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDUwLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZyk6Cisg
ICAgICAgICAgICBOb3cgbWFrZXMgdXNlIG9mIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygpIGlu
IGRlYnVnIG1vZGUuCisgICAgICAgICogVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVN
ZW1vcnlTdG9yZUZyb21EaXNrKToKKyAgICAgICAgICAgIE5vdyBhY2NlcHRzIGEgbm9uLWVtcHR5
IG1lbW9yeSBzdG9yZSBpbiBkZWJ1ZyBtb2RlLiBUaGlzIGlzIHRvIHN1cHBvcnQgYQorICAgICAg
ICAgICAgcHJlLXBvcHVsYXRlZCBzdG9yZSB3aXRoIDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYW5k
IGFueSBjdXN0b20gZG9tYWluIGFscmVhZHkKKyAgICAgICAgICAgIHNldCBhcyBwcmV2YWxlbnQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTgt
MDctMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIFNQSSB0byBkZWZlciBydW5uaW5nIGFzeW5jIHNjcmlwdCB1bnRpbCBhZnRlciBkb2N1bWVu
dCBsb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCBhNTRlY2JjMjY2ZGFiMGE4YmFmMjNjNzQ1NWViZWU0
NGMxMzAyMzIwLi4wNzNjMTBmZDFiNWZmZGVhNzUzM2NhZjAwNmQ3YTQ3MWMxMmI4NmY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHAKQEAgLTY5LDYgKzY5LDMxIEBAIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShXS1dlYnNpdGVEYXRhU3RvcmVSZWYKICAg
ICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmVSZWYpLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKGVuYWJsZSk7CiB9CiAKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZVdpdGhDb21wbGV0aW9uSGFuZGxlcihXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSwgdm9pZCogY29udGV4dCwgV0tX
ZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0RlYnVnTW9kZUZ1bmN0aW9uIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIGF1dG8qIHN0b3JlID0gV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+
d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXN0
b3JlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIHN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKGVuYWJsZSwgW2NvbnRleHQsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgIH0pOworfQorCit2b2lkIFdLV2Vic2l0ZURh
dGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0
LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVu
Y3Rpb24gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byogc3RvcmUgPSBXZWJLaXQ6OnRv
SW1wbChkYXRhU3RvcmVSZWYpLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpOworICAgIGlmICghc3RvcmUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3RvcmUtPnNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpVUkwoKSwgV2Vi
S2l0Ojp0b0ltcGwoaG9zdCktPnN0cmluZygpKSwgW2NvbnRleHQsIGNvbXBsZXRpb25IYW5kbGVy
XSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgIH0pOworfQogdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgZG91YmxlIHNlY29uZHMsIHZv
aWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2VlbkZ1bmN0aW9u
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHN0b3JlID0gV2ViS2l0Ojp0b0ltcGwo
ZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgKaW5kZXggNWI3NDYyMGJkYmM5MjBmYmVmODJhOGVlMmJmZmEwMzNhYTA4YzU2
ZC4uNTAzMzhiMGI5YjI0YmQ5NDAwOGJiYWRlMWEzMWVjNTdiYTQ5ZDA3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgK
QEAgLTQwLDYgKzQwLDkgQEAgV0tfRVhQT1JUIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS1dlYnNp
dGVEYXRhU3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkKIFdLX0VYUE9SVCBib29s
IFdLV2Vic2l0ZURhdGFTdG9yZUdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBlbmFibGUpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZSk7Cit0eXBlZGVmIHZvaWQgKCpX
S1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24pKHZvaWQqIGZ1bmN0
aW9uQ29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlV2l0aENvbXBsZXRpb25IYW5kbGVyKFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgZW5hYmxlLCB2b2lkKiBjb250ZXh0LCBXS1dl
YnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzRGVidWdNb2RlRnVuY3Rpb24gY29tcGxldGlvbkhhbmRs
ZXIpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0
ZURhdGFTdG9yZVN0YXRpc3RpY3NEZWJ1Z01vZGVGdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxlcik7
ICAgIAogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0xhc3RTZWVu
RnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVTZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRh
dGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgZG91YmxlIHNlY29uZHMsIHZvaWQqIGNvbnRl
eHQsIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NMYXN0U2VlbkZ1bmN0aW9uIGNvbXBsZXRp
b25IYW5kbGVyKTsKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZUZ1bmN0aW9uKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQppbmRleCBlNmIxNDU5NDhiZDc5
YzI4N2JmMmVkOTQxZmQ1ZDExMzk3Y2U1M2UxLi42MzQ1ODI5MDNlNWNjMmQxZjYzMGRkNWRjNzVi
YmQ5MWI0ZGVkMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2Nv
YS5tbQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIgorI2ltcG9ydCA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01MSw2ICs1Miw5IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCkKIAogICAgICAgICBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTG9nZ2luZ0VuYWJsZWQiXSk7CiAgICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIkV4cGVyaW1lbnRhbFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUiXSk7
CisgICAgICAgIGF1dG8qIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKKyAgICAgICAgaWYgKGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKICAgICAgICAgc2V0U3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6QCJFeHBlcmltZW50YWxTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJs
ZWQiXSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAppbmRleCA5ZjBjN2Yw
YjY0ZGE0MTEwOTM5MTJiMTZiNmY3ODNmMTFhZWMyYTUyLi4yNTJhYzQ3Yzg2MTM3MDdlZmIyMjQz
YjkyMjk1OWQ4ODljMzE1ZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKQEAgLTUxLDYg
KzUxLDcgQEAgY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJl
ZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKIGNvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0
aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07CiBjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0
aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OwogY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2Ug
eyAzIH07CitzdGF0aWMgY29uc3QgY2hhciogZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7
ICIzcmRwYXJ0eXRlc3R3ZWJraXQub3JnIiB9OwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CiBzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9t
YWlucykKQEAgLTMxOSwxMyArMzIwLDIzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVuCiAgICAg
fQogfQogCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNQcmV2YWxl
bnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3Rp
YykKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiA9PSBkZWJ1
Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERv
bWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Cit9CisKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGlmIChtX3Bh
cmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwp
IHsKICAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGlj
LmlzVmVyeVByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnRE
dWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAgICAgICAgICAgc2V0UHJl
dmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwogICAgICAgICAgICAgICAg
IGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJl
c291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkxvdzsKICAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShy
ZXNvdXJjZVN0YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOwpAQCAtNTA3LDEzICs1MTgsNDgg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW8KICAgICB9KTsKIH0KIAorVmVjdG9yPFN0cmluZz4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJj
ZXNGb3JEZWJ1Z01vZGUoKQoreworICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFN0cmluZz4gcHJpbWFyeURvbWFpbnNUb0Jsb2Nr
OworICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwor
CisgICAgYXV0byYgc3RhdGljU2Vzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAg
IHNldFByZXZhbGVudFJlc291cmNlKHN0YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2Vk
QXBwZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2RlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVh
bFJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZShtYW51YWxSZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6SGlnaCk7CisgICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQo
bV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHByaW1hcnlEb21haW5zVG9CbG9jazsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFi
bGUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBtX2RlYnVnTW9k
ZUVuYWJsZWQgPSBlbmFibGU7CisgICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOwor
CisgICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShjb25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBpZiAoIW1fZGVidWdNb2Rl
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlID0gZG9tYWluOworICAgIGF1dG8mIHJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKKwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYo
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJJVFAg
RGVidWcgTW9kZSAle3B1YmxpY31zLiIsIChtX2RlYnVnTW9kZUVuYWJsZWQgPyAiZW5hYmxlZCIg
OiAiZGlzYWJsZWQiKSk7CisgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0
aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZG9tYWluLnV0ZjgoKS5kYXRhKCkpOwog
I2VuZGlmCiB9CiAKQEAgLTg5MSw3ICs5MzcsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6Y2xlYXIoKQogICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKIAog
ICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoKTsKLSAgICB1cGRhdGVDb29raWVQYXJ0aXRpb25p
bmdGb3JEb21haW5zKHsgfSwgeyB9LCB7IH0sIFNob3VsZENsZWFyRmlyc3Q6OlllcywgW10oKSB7
IH0pOworCisgICAgYXV0byBwcmltYXJ5RG9tYWluc1RvQmxvY2sgPSBlbnN1cmVQcmV2YWxlbnRS
ZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICB1cGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JE
b21haW5zKHsgfSwgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLCB7IH0sIFNob3VsZENsZWFyRmlyc3Q6
OlllcywgW10oKSB7IH0pOwogfQogCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6d2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiB1cGRhdGVkKSBjb25zdApAQCAtOTM1LDYgKzk4MywzOSBAQCBib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3Vn
aFByb21wdAogICAgIHJldHVybiBzdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVP
cmlnaW5zLmNvbnRhaW5zKGZpcnN0UGFydHlQcmltYXJ5RG9tYWluKTsKIH0KIAorc3RhdGljIHZv
aWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnMpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
c3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1
MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChkb21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkg
eworICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3I6
ICV7cHVibGljfXMuIiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFN0cmluZz4g
YmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFp
bnNJbk9uZUxvZ1N0YXRlbWVudCk7CisgICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5z
aWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisKKyAg
ICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKGJhdGNoLnNpemUo
KSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICAgICAg
UkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAl
e3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1YmxpY31k
IG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJhdGNo
ZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBi
YXRjaC5zaHJpbmsoMCk7CisgICAgICAgICAgICArK2JhdGNoTnVtYmVyOworICAgICAgICB9Cisg
ICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOworICAgIH0KKyAgICBpZiAoIWJhdGNoLmlzRW1w
dHkoKSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
Zm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVy
LCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShkb21h
aW5zKTsKKyNlbmRpZgorfQorCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTk2NSwxNiArMTA0NiwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6dXBkYXRlQ29va2llUGFydGl0aW9uaW5nKENvbXBsZXRpb25IYW5kbAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgaWYgKG1fZGVidWdM
b2dnaW5nRW5hYmxlZCkgewogICAgICAgICBpZiAoIWRvbWFpbnNUb1BhcnRpdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvIHBhcnRpdGlvbiBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zVG9QYXJ0aXRpb24pLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJwYXJ0
aXRpb24iLCBkb21haW5zVG9QYXJ0aXRpb24pOwogICAgICAgICBpZiAoIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYmxvY2sgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcoZG9tYWluc1RvQmxvY2spLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9j
ayIsIGRvbWFpbnNUb0Jsb2NrKTsKICAgICAgICAgaWYgKCFkb21haW5zVG9OZWl0aGVyUGFydGl0
aW9uTm9yQmxvY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBuZWl0aGVyIHBhcnRpdGlvbiBub3Ig
YmxvY2sgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgJXtwdWJsaWN9cy4iLCBk
b21haW5zVG9TdHJpbmcoZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygibmVpdGhlciBw
YXJ0aXRpb24gbm9yIGJsb2NrIiwgZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKTsK
ICAgICB9Ci0jZW5kaWYKIAogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9QYXJ0aXRpb24gPSBjcm9zc1RocmVhZENv
cHkoZG9tYWluc1RvUGFydGl0aW9uKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHko
ZG9tYWluc1RvQmxvY2spLCBkb21haW5zVG9OZWl0aGVyUGFydGl0aW9uTm9yQmxvY2sgPSBjcm9z
c1RocmVhZENvcHkoZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nv
b2tpZXNIYW5kbGVyKGRvbWFpbnNUb1BhcnRpdGlvbiwgZG9tYWluc1RvQmxvY2ssIGRvbWFpbnNU
b05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgU2hvdWxkQ2xlYXJGaXJzdDo6Tm8sIFt0aGlzLCBz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKaW5kZXggNGEw
OGI3YjU2YjMxNTM0YzU0NWM4MzdlYTcwZTdkNzhiMzY5NzVjNC4uYjZmYzZhZDA4MTllMWYwM2Rj
NDFhNmNmODNhOTkzMGU3YjgzYTI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKQEAgLTExMyw2
ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyk7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wp
OworICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01v
ZGVFbmFibGVkOyB9OworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
Y29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0
IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJp
bWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN0
cmluZyYmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5RG9t
YWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJik7CkBAIC0x
NDMsNiArMTQ1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldh
c1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
ICAgICB2b2lkIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBib29sIGlzUHJldmFsZW50RHVlVG9E
ZWJ1Z01vZGUoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIFZlY3RvcjxT
dHJpbmc+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOwogICAgIHZvaWQg
cmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lk
IHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBT
dHJpbmcmKTsKQEAgLTE4MSw2ICsxODUsNyBAQCBwcml2YXRlOgogICAgIFdhbGxUaW1lIG1fZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKICAgICBib29sIG1fZGVidWdMb2dnaW5nRW5hYmxl
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxzZSB9OworICAg
IFN0cmluZyBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CiAgICAgYm9vbCBtX3N0b3Jh
Z2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2RhdGFSZWNvcmRz
QmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFRpbWVEYXRh
UmVjb3Jkc1dlcmVSZW1vdmVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAK
aW5kZXggMjlhY2FlMDE0ZjJiMDNlODZiNDMzYmQ0ZDhhZGViYjE2MzBkN2IxNy4uZGYxNTA1ZmQ3
YzU3MTBmMzg5N2ZkZmU0YmQ3OTJkMzZiMWM3YmNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2UuY3BwCkBAIC0yMzUsNyArMjM1LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnBvcHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzaygpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fbWVtb3J5
U3RvcmUuaXNFbXB0eSgpLCAiVGhpcyBpcyB0aGUgaW5pdGlhbCBpbXBvcnQgc28gdGhlIHN0b3Jl
IHNob3VsZCBiZSBlbXB0eSIpOworICAgIC8vIERlYnVnIG1vZGUgaGFzIGEgcHJlcG91bGF0ZWQg
bWVtb3J5IHN0b3JlLgorICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9tZW1vcnlTdG9yZS5pc0Vt
cHR5KCkgfHwgbV9tZW1vcnlTdG9yZS5pc0RlYnVnTW9kZUVuYWJsZWQoKSwgIlRoaXMgaXMgdGhl
IGluaXRpYWwgaW1wb3J0IHNvIHRoZSBzdG9yZSBzaG91bGQgYmUgZW1wdHkiKTsKICAgICBtX21l
bW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7CiAKICAgICBtX2xh
c3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gcmVhZFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApp
bmRleCBiMDlhZTRhMjZjOTJjOWNhZTdiNzk4ZTE2NGNhN2Y3MzUyYTNkNTc4Li5lYmFiNmJlYmQy
MzBhOWE4NjVmZGYwMGNjODVmYzI0YjlkYmM0NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAg
LTE2OSwxMyArMTY5LDI5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
bHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKQogICAgIHNlbWFwaG9yZS53YWl0KFdhbGxU
aW1lOjppbmZpbml0eSgpKTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSkKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgcG9z
dFRhc2soW3RoaXMsIHZhbHVlXSB7CisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBwb3N0VGFza1Jl
cGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
Kwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJp
bWFyeURvbWFpbik7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IDVk
YzhkOWQyZjY3MTQ5ZmZlOTViNzE2MzMzMzZkODc1OGVjNTNlMDUuLjRlNTcwNjJhZTk1ZmJiM2Y1
MzliMTQxMDdkYjBmNjBjODFkNmNhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC0xMzIsOCArMTMy
LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIHZvaWQgc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLQorICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgV2ViQ29yZTo6VVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICAKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYm
IGNhbGxiYWNrKSB7IG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spOyB9CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDdmMzdlNzg3NzA0YTFmMzc0
MmI4ZjdjYzdmYjYwNDZlN2JiMzI3MDEuLjM3MzdiMmNlZWJjNmNmZjdhM2UwMjFlMWYwMzFlNzU0
ZGU1NjMwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xNTA3LDEwICsxNTA3LDE3IEBAIGJvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSgpIGNvbnN0
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShib29sIGVuYWJsZWQpCit7CisgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZShlbmFibGVkLCBbXSgpIHsgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVkOwogICAgIGlmIChtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MpCi0gICAgICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShlbmFibGVkKTsKKyAgICAgICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGVuYWJsZWQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0FuZFNldFRlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lkIChjb25zdCBT
dHJpbmcmKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAwMmRlMThlZjY5ZDA5ZTAzOWU4
OGZlZDk0NGU5YTYyYjRkZmJkYzc5Li4zNjI1ZmEyNjE2M2I4NzZlMzg2MTRmY2I1MjhhNzBlOWYy
ZTU3M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDksNiArMTA5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
CiAgICAgdWludDY0X3QgY2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEoKSBjb25zdCB7IHJldHVy
biBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5jYWNoZVN0b3JhZ2VQZXJPcmlnaW5RdW90YTsgfQog
ICAgIHZvaWQgc2V0Q2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpIHsg
bV9yZXNvbHZlZENvbmZpZ3VyYXRpb24uY2FjaGVTdG9yYWdlUGVyT3JpZ2luUXVvdGEgPSBxdW90
YTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGQ4NzY2MDlkYmJjMmYzYjMxYjBlNDA2YzdlZjdlNjFjYTBiNzFlNzMuLjMyMDljZGY0YTdhOTU1
ZjQyY2FhOWQ5NjY3YTdiZjQ1NDY4NWZmNDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxOC0wNy0yMCAgSm9obiBX
aWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0
YXRpc3RpY3M6IEVuYWJsZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGluIGV4cGVyaW1lbnRhbCBkZWJ1
ZyBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODc4MzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQyNDA4NTkwPgorCisgICAgICAgIFJldmll
d2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGV4cGVy
aW1lbnRhbCBJVFAgRGVidWcgTW9kZSBmZWF0dXJlIHdvcmssIGF0IGxlYXN0CisgICAgICAgIHRv
IGEgYmFzaWMgbGV2ZWwuIEFsbCBvZiB0aGUgY2hhbmdlcyB0byBUZXN0UnVubmVyIGFyZSB0byBz
dXBwb3J0IHRoZQorICAgICAgICBsYXlvdXQgdGVzdHMgZm9yIHRoZSBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXREZWJ1Z01vZGVDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGVDYWxsYmFjayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2Rl
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmg6CisKIDIwMTgtMDctMTggIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFNQSSB0byBkZWZlciBydW5u
aW5nIGFzeW5jIHNjcmlwdCB1bnRpbCBhZnRlciBkb2N1bWVudCBsb2FkCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbAppbmRleCBjMDljYmFlMGNlMzA2NGI4ZmQ2ODkwNmU0NjlkNTFjMjIyZjFlMTYy
Li5iZWZlZmYyYTIyYTFlYjI4MTczZTAxODY3OTQwMGQ3ZDdiZWZkODdlIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
VGVzdFJ1bm5lci5pZGwKQEAgLTI3Miw2ICsyNzIsOCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2so
b2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFS
ZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0
aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNvbXBsZXRpb25IYW5k
bGVyKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShET01TdHJpbmcgaG9zdE5hbWUsIG9iamVjdCBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25k
cywgb2JqZWN0IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUsIG9iamVjdCBj
b21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJl
c291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNvbXBsZXRp
b25IYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggNTlmMWE2YjRmOGFjOGNjNjk0YWY3NDE2
YzAwYTkyZGNkM2I3Y2Y2MS4uN2I0NTRlODZhM2Y1OTc0NmY4MjBjNzkyNzZmNmE3ZjYzMjEyOWEz
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTMxNSw2ICszMTUsMTYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3Ry
aW5nUmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01v
ZGUiKSkgeworICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdN
b2RlQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxEaWRTZXRQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKSB7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlz
dGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsRGlkU2V0TGFzdFNlZW4iKSkgewogICAgICAgICBt
X3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpOwogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCAzNzRlYzc5ZjRmMzY3MTIzNzZmMzhlOWEyZjRkNjdh
YTExYmJiMGRhLi40MmZjZDU5OWEzNWIzZWIyNjhjMDVmYmEwNTg0MmVkYzE4ODI1ODE2IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5jcHAKQEAgLTczNiw2ICs3MzYsOCBAQCBlbnVtIHsKICAgICBXaWxsRW5kU3dpcGVDYWxsYmFj
a0lELAogICAgIERpZEVuZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBEaWRSZW1vdmVTd2lwZVNuYXBz
aG90Q2FsbGJhY2tJRCwKKyAgICBTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwKKyAg
ICBTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFja0lELAog
ICAgIFNldFN0YXRpc3RpY3NMYXN0U2VlbkNhbGxiYWNrSUQsCiAgICAgU2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwKICAgICBTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVu
dFJlc291cmNlQ2FsbGJhY2tJRCwKQEAgLTEzMzEsNiArMTMzMywzNSBAQCB2b2lkIFRlc3RSdW5u
ZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soKQogICAgIGNhbGxUZXN0UnVu
bmVyQ2FsbGJhY2soRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJl
ZiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRT
dGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOworCisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpOworICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKworfQorCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2so
U2V0U3RhdGlzdGljc0RlYnVnTW9kZUNhbGxiYWNrSUQpOworfQorCit2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVD
YWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlQ2FsbGJh
Y2soKQoreworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlQ2FsbGJhY2tJRCk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25k
cywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7CkBAIC0xMzYzLDcgKzEzOTQsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTZXRT
dGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lEKTsKIH0KIAotCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2
YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21w
bGV0aW9uSGFuZGxlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDRkYWQwZjBkZjA2ODg1ZDJkZjY4YzhkZDg4NDIzYWVm
YTU5M2M0YmIuLmNlZjVhNzhjN2Y3YWY2NDVkZDkzOTBjYzJhMDgwZjc4N2IzODIzNDAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CkBAIC0zODIsNiArMzgyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3RpY3NTZXRTaG91
bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSwgSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbERpZFNldFBh
cnRpdGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0
aWNzU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJv
b2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgc3RhdGlz
dGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1Zh
bHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NDYWxsRGlkU2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFjaygpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcywgSlNW
YWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2FsbERpZFNl
dExhc3RTZWVuQ2FsbGJhY2soKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGUwYTg1MzQ3MWZkMWI3YmY2MDU4ODM3MjhjMTgyNGE3ZDBkNTVjNDIuLjNlYTNjMGE1OGU4
ODgwYTA4YjA1ZGVmYTllYjA5Y2MwMTYwNTI1ZTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yNjQ1LDcgKzI2NDUsMjUgQEAgc3RhdGljIHZvaWQgcmVz
b3VyY2VTdGF0aXN0aWNzQm9vbGVhblJlc3VsdENhbGxiYWNrKGJvb2wgcmVzdWx0LCB2b2lkKiB1
c2VyRGF0YSkKICAgICBjb250ZXh0LT5kb25lID0gdHJ1ZTsKICAgICBjb250ZXh0LT50ZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CiB9Ci0gICAgCisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSkKK3sKKyAgICBhdXRvKiBkYXRhU3RvcmUg
PSBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBS
ZXNvdXJjZVN0YXRpc3RpY3NDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZVdpdGhDb21w
bGV0aW9uSGFuZGxlcihkYXRhU3RvcmUsIHZhbHVlLCAmY29udGV4dCwgcmVzb3VyY2VTdGF0aXN0
aWNzVm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGlt
ZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9k
ZSgpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUoV0tTdHJpbmdSZWYgaG9zdE5hbWUpCit7CisgICAgYXV0byogZGF0
YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgUmVzb3VyY2VTdGF0aXN0aWNzQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwor
ICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZUZvckRlYnVnTW9kZShkYXRhU3RvcmUsIGhvc3ROYW1lLCAmY29udGV4dCwgcmVzb3Vy
Y2VTdGF0aXN0aWNzVm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRv
bmUsIG5vVGltZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkU2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3Rh
dGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzKQogewogICAg
IGF1dG8qIGRhdGFTdG9yZSA9IFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUocGxhdGZvcm1D
b250ZXh0KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IDUx
OWJmYjdkYTAwOTc5MzZhMTE5MmU5YjgzODZhZjg1ZmM1MDIwMWQuLjAwMmFiNGQwNTYyODAxYTJk
YTZhYjUxM2Q5MDdlMDU0ZTFlOGIxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKQEAgLTE1Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNob3Vs
ZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fc2hvdWxkRG93
bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZvaWQgc2V0U3Rh
dGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShXS1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNv
bmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1Jl
ZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVmVyeVByZXZh
bGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggNjhiYjA3ZTQxNDk2N2IzNzdk
ZDcwZjdjNjYzNzNkYTk0MzlkYzY1MC4uNzliMTg0MTFiNDJjOTJkOWUzNmI3YWRkYmEwMzg4ODE2
OGMwZTQxYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKQEAg
LTEwMzYsNiArMTAzNiwyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7CisgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOworICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
IikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGhvc3RO
YW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RT
ZWVuIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7CiAgICAgICAgIApAQCAtMTUyNyw2ICsxNTQxLDE4IEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFNldFBhcnRpdGlvbk9yQmxvY2tDb29raWVzRm9ySG9zdCgp
CiAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
IH0KIAordm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpCit7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUi
KSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKK30KKwordm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworfQorCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRT
ZXRMYXN0U2VlbigpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldExhc3RT
ZWVuIikpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCmluZGV4IDAwNWYz
N2Q1OTk5ZTQ0NzU5Nzk2MWY1OGRmN2FjODNiZTMxZWQxMGYuLjRlMjRjYzAxY2Y0OGYzZWJkZGE0
ZjdhYjUxOWMwZGU1NzA2ODYxNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdEludm9jYXRpb24uaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmgKQEAgLTc0LDYgKzc0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ2xlYXJTdGF0aXN0
aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpOwogICAgIHZvaWQgZGlkUmVzZXRTdGF0aXN0
aWNzVG9Db25zaXN0ZW50U3RhdGUoKTsKICAgICB2b2lkIGRpZFNldFBhcnRpdGlvbk9yQmxvY2tD
b29raWVzRm9ySG9zdCgpOworICAgIHZvaWQgZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpOwor
ICAgIHZvaWQgZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKTsKICAgICB2b2lk
IGRpZFNldExhc3RTZWVuKCk7CiAgICAgdm9pZCBkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpOwog
ICAgIHZvaWQgZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTU4NzU4YzRj
MzNiNDQxZGVmYmQ1OTM3MGQwNTQ2Zjk1YzEzNjc4YS4uNzhkMTAyZWY3MDhlM2E4YTNjMGQxZjQw
NzQ4NzllMGRlMTk3MTU4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE4LTA3LTIwICBKb2hu
IFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQg
U3RhdGlzdGljczogRW5hYmxlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgaW4gZXhwZXJpbWVudGFsIGRl
YnVnIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NzgzNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDI0MDg1OTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgZXhw
ZXJpbWVudGFsIElUUCBEZWJ1ZyBNb2RlIGZlYXR1cmUgd29yaywgYXQgbGVhc3QKKyAgICAgICAg
dG8gYSBiYXNpYyBsZXZlbC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9lbmFibGUtZGVidWctbW9kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0
LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zZXQtY3Vz
dG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWw6IEFkZGVkLgorCiAyMDE4
LTA3LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCB0aGUgcGFyc2luZyBvZiBjb2xvcnMgaW4gYXR0cmlidXRlZCBzdHJpbmcgdGVzdHMsIGFu
ZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGR1bXAgdGhlIHR5cGluZyBhdHRyaWJ1dGVzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZW5hYmxl
LWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1kZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NTIxOWRkM2IxMWYyYTM0YzQ1NzUzNDBlNzM4ZGFkY2ZhMGNjZmNjCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJs
ZS1kZWJ1Zy1tb2RlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0IGZvciBlbmFi
bGluZyBkZWJ1ZyBtb2RlIGFuZCB0aGF0IGl0IHBlcm1hbmVudGx5IHRyZWF0cyAzcmRwYXJ0eXRl
c3R3ZWJraXQub3JnIGFzIGEgcHJldmFsZW50IHJlc291cmNlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBodHRwOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyBnb3Qgc2V0
IGFzIHByZXZhbGVudCByZXNvdXJjZSBpbiBkZWJ1ZyBtb2RlLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1s
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2VuYWJsZS1k
ZWJ1Zy1tb2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI1MGQ1Mjk5MDVjMjE5ZGM0Yjk2Y2RmMDc5ODRh
NGY0MGQyOGQzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9lbmFibGUtZGVidWctbW9kZS5odG1sCkBAIC0wLDAgKzEsNDIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3Jp
cHRpb24oIlRlc3QgZm9yIGVuYWJsaW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgcGVybWFuZW50
bHkgdHJlYXRzIDNyZHBhcnR5dGVzdHdlYmtpdC5vcmcgYXMgYSBwcmV2YWxlbnQgcmVzb3VyY2Uu
Iik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCB0aGlyZFBhcnR5T3Jp
Z2luID0gImh0dHA6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIjsKKworICAgIGZ1bmN0aW9uIHNl
dEVuYWJsZUZlYXR1cmUoZW5hYmxlLCBjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBpbnRl
cm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChlbmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRp
b25pbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIGlmICghZW5hYmxlKQorICAgICAgICAgICAg
dGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgfQorCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsK
KyAgICAgICAgc2V0RW5hYmxlRmVhdHVyZSh0cnVlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlP
cmlnaW4pKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQodGhpcmRQYXJ0eU9yaWdpbiArICIg
YWxyZWFkeSBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUodHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRo
aXJkUGFydHlPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKHRoaXJkUGFy
dHlPcmlnaW4gKyAiIGRpZG4ndCBnZXQgc2V0IGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQodGhpcmRQ
YXJ0eU9yaWdpbiArICIgZ290IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgaW4gZGVidWcgbW9k
ZS4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUo
ZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBzZXRFbmFibGVGZWF0dXJl
KGZhbHNlLCBmaW5pc2hKU1Rlc3QpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Nl
dC1jdXN0b20tcHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3NldC1jdXN0b20t
cHJldmFsZW50LXJlc291cmNlLWluLWRlYnVnLW1vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJkYzA3M2RhNDdjYmE0ODYwNzcyM2Q0ZmRiNjNjYmExNTZkODdlNjIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1
c3RvbS1wcmV2YWxlbnQtcmVzb3VyY2UtaW4tZGVidWctbW9kZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMCBAQAorVGVzdCBmb3IgZW5hYmxpbmcgZGVidWcgbW9kZSBhbmQgdGhhdCBpdCBhbGxv
d3Mgc2V0dGluZyBhIGN1c3RvbSBkb21haW4gYXMgYSBwcmV2YWxlbnQgcmVzb3VyY2UuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCBn
b3Qgc2V0IGFzIGEgY3VzdG9tIHByZXZhbGVudCByZXNvdXJjZSBpbiBkZWJ1ZyBtb2RlLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zZXQtY3Vz
dG9tLXByZXZhbGVudC1yZXNvdXJjZS1pbi1kZWJ1Zy1tb2RlLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVz
b3VyY2UtaW4tZGVidWctbW9kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmMjhhZjM2MDg3NDJmYmFkN2Ix
NWNlOGMyMjlhZTVjOTk4ZWRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc2V0LWN1c3RvbS1wcmV2YWxlbnQtcmVzb3Vy
Y2UtaW4tZGVidWctbW9kZS5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAg
IDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3QgZm9yIGVuYWJs
aW5nIGRlYnVnIG1vZGUgYW5kIHRoYXQgaXQgYWxsb3dzIHNldHRpbmcgYSBjdXN0b20gZG9tYWlu
IGFzIGEgcHJldmFsZW50IHJlc291cmNlLiIpOworICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CisgICAgY29uc3QgdGhpcmRQYXJ0eU9yaWdpbiA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAiOwor
CisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUsIGNvbXBsZXRpb25IYW5kbGVy
KSB7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChl
bmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGVuYWJsZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgaWYgKCFlbmFi
bGUpCisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2lu
ZG93LmludGVybmFscykgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJlKHRydWUsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCh0aGly
ZFBhcnR5T3JpZ2luICsgIiBhbHJlYWR5IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0RlYnVnTW9kZSh0cnVlLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZSh0aGlyZFBhcnR5T3JpZ2luLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlKHRoaXJkUGFydHlPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCh0aGlyZFBhcnR5T3JpZ2luICsgIiBkaWRuJ3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVz
b3VyY2UuIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RQYXNzZWQodGhpcmRQYXJ0eU9yaWdpbiArICIgZ290IHNldCBhcyBhIGN1c3RvbSBw
cmV2YWxlbnQgcmVzb3VyY2UgaW4gZGVidWcgbW9kZS4iKTsKKyAgICAgICAgICAgICAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKGZhbHNlLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UsIGZpbmlzaEpTVGVz
dCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>