<?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>217962</bug_id>
          
          <creation_ts>2020-10-20 09:13:01 -0700</creation_ts>
          <short_desc>Clean up DumpRenderTree in preparation for supporting arbitrary test header commands</short_desc>
          <delta_ts>2020-10-21 08:05:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1699758</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 09:13:01 -0700</bug_when>
    <thetext>Cleanup DumpRenderTree in preparation for supporting arbitrary test header commands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699762</commentid>
    <comment_count>1</comment_count>
      <attachid>411872</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 09:19:22 -0700</bug_when>
    <thetext>Created attachment 411872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699770</commentid>
    <comment_count>2</comment_count>
      <attachid>411873</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 09:29:06 -0700</bug_when>
    <thetext>Created attachment 411873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699860</commentid>
    <comment_count>3</comment_count>
      <attachid>411893</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 11:42:06 -0700</bug_when>
    <thetext>Created attachment 411893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699869</commentid>
    <comment_count>4</comment_count>
      <attachid>411895</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 12:04:44 -0700</bug_when>
    <thetext>Created attachment 411895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699885</commentid>
    <comment_count>5</comment_count>
      <attachid>411902</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 13:04:19 -0700</bug_when>
    <thetext>Created attachment 411902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699892</commentid>
    <comment_count>6</comment_count>
      <attachid>411906</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 13:14:05 -0700</bug_when>
    <thetext>Created attachment 411906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699926</commentid>
    <comment_count>7</comment_count>
      <attachid>411916</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 14:37:53 -0700</bug_when>
    <thetext>Created attachment 411916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699985</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 16:01:45 -0700</bug_when>
    <thetext>Interesting, the only difference between the last two was that in previous one I allocated my a fresh WebPreferences for each test:

WebPreferences *preferences = [[WebPreferences alloc] init];
[webView setPreferences:preferences];
[preferences release];

but that really seems to break things on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699997</commentid>
    <comment_count>9</comment_count>
      <attachid>411937</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 16:24:05 -0700</bug_when>
    <thetext>Created attachment 411937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699999</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-20 16:27:01 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; Interesting, the only difference between the last two was that in previous
&gt; one I allocated my a fresh WebPreferences for each test:
&gt; 
&gt; WebPreferences *preferences = [[WebPreferences alloc] init];
&gt; [webView setPreferences:preferences];
&gt; [preferences release];
&gt; 
&gt; but that really seems to break things on the bots.

I will investigate why using a fresh WebPreferences breaks things so bad in the next round of changes, for now, this amount of cleanup should be enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700039</commentid>
    <comment_count>11</comment_count>
      <attachid>411937</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 18:51:32 -0700</bug_when>
    <thetext>Comment on attachment 411937
Patch

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

&gt; Tools/DumpRenderTree/TestOptions.cpp:37
&gt; +    if (features.boolWebPreferenceFeatures.empty()) {
&gt; +        features.boolWebPreferenceFeatures = {

Could we use an initializer instead of an if statement?

&gt; Tools/DumpRenderTree/TestOptions.cpp:110
&gt; +    if (m_features.experimentalFeatures != options.m_features.experimentalFeatures)
&gt; +        return false;
&gt; +    if (m_features.internalDebugFeatures != options.m_features.internalDebugFeatures)
&gt; +        return false;
&gt; +    if (m_features.boolWebPreferenceFeatures != options.m_features.boolWebPreferenceFeatures)
&gt; +        return false;
&gt; +    if (m_features.doubleWebPreferenceFeatures != options.m_features.doubleWebPreferenceFeatures)
&gt; +        return false;
&gt; +    if (m_features.uint32WebPreferenceFeatures != options.m_features.uint32WebPreferenceFeatures)
&gt; +        return false;
&gt; +    if (m_features.stringWebPreferenceFeatures != options.m_features.stringWebPreferenceFeatures)
&gt; +        return false;
&gt; +    if (m_features.boolTestRunnerFeatures != options.m_features.boolTestRunnerFeatures)
&gt; +        return false;
&gt; +    if (m_features.doubleTestRunnerFeatures != options.m_features.doubleTestRunnerFeatures)
&gt; +        return false;
&gt; +    if (m_features.stringTestRunnerFeatures != options.m_features.stringTestRunnerFeatures)
&gt; +        return false;
&gt; +    if (m_features.stringVectorTestRunnerFeatures != options.m_features.stringVectorTestRunnerFeatures)
&gt; +        return false;
&gt; +    return true;

If we had a function that tied these into a tuple we could write this in one line.

&gt; Tools/DumpRenderTree/TestOptions.h:46
&gt; +    // Test Runner Specific Features

Can’t help thinking we need a hyphen or two to make this read correctly, like &quot;Test-Runner-Specific Features&quot; maybe?

&gt; Tools/DumpRenderTree/TestOptions.h:57
&gt; +    const std::unordered_map&lt;std::string, bool&gt;&amp; boolWebPreferenceFeatures() const { return m_features.boolWebPreferenceFeatures; }
&gt; +    const std::unordered_map&lt;std::string, double&gt;&amp; doubleWebPreferenceFeatures() const { return m_features.doubleWebPreferenceFeatures; }
&gt; +    const std::unordered_map&lt;std::string, uint32_t&gt;&amp; uint32WebPreferenceFeatures() const { return m_features.uint32WebPreferenceFeatures; }
&gt; +    const std::unordered_map&lt;std::string, std::string&gt;&amp; stringWebPreferenceFeatures() const { return m_features.stringWebPreferenceFeatures; }

Isn’t there a way to use auto for the function return value that could make these simpler?

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:1005
&gt; +    preferences.attachmentElementEnabled = boolWebPreferenceFeatureValue(&quot;AttachmentElementEnabled&quot;, false, options);
&gt; +    preferences.acceleratedDrawingEnabled = boolWebPreferenceFeatureValue(&quot;AcceleratedDrawingEnabled&quot;, false, options);
&gt; +    preferences.menuItemElementEnabled = boolWebPreferenceFeatureValue(&quot;MenuItemElementEnabled&quot;, false, options);
&gt; +    preferences.keygenElementEnabled = boolWebPreferenceFeatureValue(&quot;KeygenElementEnabled&quot;, false, options);
&gt; +    preferences.modernMediaControlsEnabled = boolWebPreferenceFeatureValue(&quot;ModernMediaControlsEnabled&quot;, true, options);
&gt; +    preferences.inspectorAdditionsEnabled = boolWebPreferenceFeatureValue(&quot;InspectorAdditionsEnabled&quot;, false, options);
&gt; +    preferences.allowCrossOriginSubresourcesToAskForCredentials = boolWebPreferenceFeatureValue(&quot;AllowCrossOriginSubresourcesToAskForCredentials&quot;, false, options);
&gt; +    preferences.colorFilterEnabled = boolWebPreferenceFeatureValue(&quot;ColorFilterEnabled&quot;, false, options);
&gt; +    preferences.selectionAcrossShadowBoundariesEnabled = boolWebPreferenceFeatureValue(&quot;SelectionAcrossShadowBoundariesEnabled&quot;, true, options);
&gt; +    preferences.webGPUEnabled = boolWebPreferenceFeatureValue(&quot;WebGPUEnabled&quot;, false, options);
&gt; +    preferences.CSSLogicalEnabled = boolWebPreferenceFeatureValue(&quot;CSSLogicalEnabled&quot;, false, options);
&gt; +    preferences.lineHeightUnitsEnabled = boolWebPreferenceFeatureValue(&quot;LineHeightUnitsEnabled&quot;, false, options);
&gt; +    preferences.adClickAttributionEnabled = boolWebPreferenceFeatureValue(&quot;AdClickAttributionEnabled&quot;, false, options);
&gt; +    preferences.resizeObserverEnabled = boolWebPreferenceFeatureValue(&quot;ResizeObserverEnabled&quot;, false, options);
&gt; +    preferences.CSSOMViewSmoothScrollingEnabled = boolWebPreferenceFeatureValue(&quot;CSSOMViewSmoothScrollingEnabled&quot;, false, options);
&gt; +    preferences.coreMathMLEnabled = boolWebPreferenceFeatureValue(&quot;CoreMathMLEnabled&quot;, false, options);
&gt; +    preferences.requestIdleCallbackEnabled = boolWebPreferenceFeatureValue(&quot;RequestIdleCallbackEnabled&quot;, false, options);
&gt; +    preferences.asyncClipboardAPIEnabled = boolWebPreferenceFeatureValue(&quot;AsyncClipboardAPIEnabled&quot;, false, options);
&gt; +    preferences.usesPageCache = boolWebPreferenceFeatureValue(&quot;UsesBackForwardCache&quot;, false, options);
&gt; +    preferences.layoutFormattingContextIntegrationEnabled = boolWebPreferenceFeatureValue(&quot;LayoutFormattingContextIntegrationEnabled&quot;, true, options);
&gt; +    preferences.aspectRatioOfImgFromWidthAndHeightEnabled = boolWebPreferenceFeatureValue(&quot;AspectRatioOfImgFromWidthAndHeightEnabled&quot;, false, options);
&gt; +    preferences.allowTopNavigationToDataURLs = boolWebPreferenceFeatureValue(&quot;AllowTopNavigationToDataURLs&quot;, true, options);
&gt; +    preferences.contactPickerAPIEnabled = boolWebPreferenceFeatureValue(&quot;ContactPickerAPIEnabled&quot;, false, options);

Macros or generated code or something? Repetitive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700177</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-21 08:02:15 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 411937 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411937&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/TestOptions.cpp:37
&gt; &gt; +    if (features.boolWebPreferenceFeatures.empty()) {
&gt; &gt; +        features.boolWebPreferenceFeatures = {
&gt; 
&gt; Could we use an initializer instead of an if statement?

I really wanted to use designated initializer syntax here (https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers), but that is a c++20 thing. Trying to use a normal initializer looked quite confusing due to all the empty unorderered_maps that needed to be explicitly initialized.

&gt; 
&gt; &gt; Tools/DumpRenderTree/TestOptions.cpp:110
&gt; &gt; +    if (m_features.experimentalFeatures != options.m_features.experimentalFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.internalDebugFeatures != options.m_features.internalDebugFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.boolWebPreferenceFeatures != options.m_features.boolWebPreferenceFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.doubleWebPreferenceFeatures != options.m_features.doubleWebPreferenceFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.uint32WebPreferenceFeatures != options.m_features.uint32WebPreferenceFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.stringWebPreferenceFeatures != options.m_features.stringWebPreferenceFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.boolTestRunnerFeatures != options.m_features.boolTestRunnerFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.doubleTestRunnerFeatures != options.m_features.doubleTestRunnerFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.stringTestRunnerFeatures != options.m_features.stringTestRunnerFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    if (m_features.stringVectorTestRunnerFeatures != options.m_features.stringVectorTestRunnerFeatures)
&gt; &gt; +        return false;
&gt; &gt; +    return true;
&gt; 
&gt; If we had a function that tied these into a tuple we could write this in one
&gt; line.
&gt; 
&gt; &gt; Tools/DumpRenderTree/TestOptions.h:46
&gt; &gt; +    // Test Runner Specific Features
&gt; 
&gt; Can’t help thinking we need a hyphen or two to make this read correctly,
&gt; like &quot;Test-Runner-Specific Features&quot; maybe?

Done.

&gt; 
&gt; &gt; Tools/DumpRenderTree/TestOptions.h:57
&gt; &gt; +    const std::unordered_map&lt;std::string, bool&gt;&amp; boolWebPreferenceFeatures() const { return m_features.boolWebPreferenceFeatures; }
&gt; &gt; +    const std::unordered_map&lt;std::string, double&gt;&amp; doubleWebPreferenceFeatures() const { return m_features.doubleWebPreferenceFeatures; }
&gt; &gt; +    const std::unordered_map&lt;std::string, uint32_t&gt;&amp; uint32WebPreferenceFeatures() const { return m_features.uint32WebPreferenceFeatures; }
&gt; &gt; +    const std::unordered_map&lt;std::string, std::string&gt;&amp; stringWebPreferenceFeatures() const { return m_features.stringWebPreferenceFeatures; }
&gt; 
&gt; Isn’t there a way to use auto for the function return value that could make
&gt; these simpler?

Done.

&gt; 
&gt; &gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:1005
&gt; &gt; +    preferences.attachmentElementEnabled = boolWebPreferenceFeatureValue(&quot;AttachmentElementEnabled&quot;, false, options);
&gt; &gt; +    preferences.acceleratedDrawingEnabled = boolWebPreferenceFeatureValue(&quot;AcceleratedDrawingEnabled&quot;, false, options);
&gt; &gt; +    preferences.menuItemElementEnabled = boolWebPreferenceFeatureValue(&quot;MenuItemElementEnabled&quot;, false, options);
&gt; &gt; +    preferences.keygenElementEnabled = boolWebPreferenceFeatureValue(&quot;KeygenElementEnabled&quot;, false, options);
&gt; &gt; +    preferences.modernMediaControlsEnabled = boolWebPreferenceFeatureValue(&quot;ModernMediaControlsEnabled&quot;, true, options);
&gt; &gt; +    preferences.inspectorAdditionsEnabled = boolWebPreferenceFeatureValue(&quot;InspectorAdditionsEnabled&quot;, false, options);
&gt; &gt; +    preferences.allowCrossOriginSubresourcesToAskForCredentials = boolWebPreferenceFeatureValue(&quot;AllowCrossOriginSubresourcesToAskForCredentials&quot;, false, options);
&gt; &gt; +    preferences.colorFilterEnabled = boolWebPreferenceFeatureValue(&quot;ColorFilterEnabled&quot;, false, options);
&gt; &gt; +    preferences.selectionAcrossShadowBoundariesEnabled = boolWebPreferenceFeatureValue(&quot;SelectionAcrossShadowBoundariesEnabled&quot;, true, options);
&gt; &gt; +    preferences.webGPUEnabled = boolWebPreferenceFeatureValue(&quot;WebGPUEnabled&quot;, false, options);
&gt; &gt; +    preferences.CSSLogicalEnabled = boolWebPreferenceFeatureValue(&quot;CSSLogicalEnabled&quot;, false, options);
&gt; &gt; +    preferences.lineHeightUnitsEnabled = boolWebPreferenceFeatureValue(&quot;LineHeightUnitsEnabled&quot;, false, options);
&gt; &gt; +    preferences.adClickAttributionEnabled = boolWebPreferenceFeatureValue(&quot;AdClickAttributionEnabled&quot;, false, options);
&gt; &gt; +    preferences.resizeObserverEnabled = boolWebPreferenceFeatureValue(&quot;ResizeObserverEnabled&quot;, false, options);
&gt; &gt; +    preferences.CSSOMViewSmoothScrollingEnabled = boolWebPreferenceFeatureValue(&quot;CSSOMViewSmoothScrollingEnabled&quot;, false, options);
&gt; &gt; +    preferences.coreMathMLEnabled = boolWebPreferenceFeatureValue(&quot;CoreMathMLEnabled&quot;, false, options);
&gt; &gt; +    preferences.requestIdleCallbackEnabled = boolWebPreferenceFeatureValue(&quot;RequestIdleCallbackEnabled&quot;, false, options);
&gt; &gt; +    preferences.asyncClipboardAPIEnabled = boolWebPreferenceFeatureValue(&quot;AsyncClipboardAPIEnabled&quot;, false, options);
&gt; &gt; +    preferences.usesPageCache = boolWebPreferenceFeatureValue(&quot;UsesBackForwardCache&quot;, false, options);
&gt; &gt; +    preferences.layoutFormattingContextIntegrationEnabled = boolWebPreferenceFeatureValue(&quot;LayoutFormattingContextIntegrationEnabled&quot;, true, options);
&gt; &gt; +    preferences.aspectRatioOfImgFromWidthAndHeightEnabled = boolWebPreferenceFeatureValue(&quot;AspectRatioOfImgFromWidthAndHeightEnabled&quot;, false, options);
&gt; &gt; +    preferences.allowTopNavigationToDataURLs = boolWebPreferenceFeatureValue(&quot;AllowTopNavigationToDataURLs&quot;, true, options);
&gt; &gt; +    preferences.contactPickerAPIEnabled = boolWebPreferenceFeatureValue(&quot;ContactPickerAPIEnabled&quot;, false, options);
&gt; 
&gt; Macros or generated code or something? Repetitive.

This will all be removed in a subsequent changes, so I didn&apos;t bother doing anything fancy.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700179</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-21 08:04:22 -0700</bug_when>
    <thetext>Committed r268795: &lt;https://trac.webkit.org/changeset/268795&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700180</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-21 08:05:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/70529125&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411872</attachid>
            <date>2020-10-20 09:19:22 -0700</date>
            <delta_ts>2020-10-20 09:33:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020091922.patch</filename>
            <type>text/plain</type>
            <size>42451</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0yMCAgQWFrYXNoIEphaW4gIDxh
YWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2V3c10gUmVtb3ZlIGJsYWNrbGlzdCB0
ZXJtaW5vbG9neQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNp
b24gMjY4NzI3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw0NCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAorY29uc3Qg
VGVzdEZlYXR1cmVzJiBUZXN0T3B0aW9uczo6ZGVmYXVsdHMoKQoreworICAgIHN0YXRpYyBUZXN0
RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgaWYgKGZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMuZW1wdHkoKSkgeworICAgICAgICBmZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVzID0geworICAgICAgICAgICAgLy8gVGhlc2UgYXJlIFdlYlByZWZlcmVuY2UgdmFsdWVzIHRo
YXQgbXVzdCBhbHdheXMgYmUgc2V0IGFzIHRoZXkgbWF5CisgICAgICAgICAgICAvLyBkaWZmZXIg
ZnJvbSB0aGUgZGVmYXVsdCBzZXQgaW4gdGhlIFdlYlByZWZlcmVuY2VzKi55YW1sIGNvbmZpZ3Vy
YXRpb24uCisgICAgICAgICAgICB7ICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJBbGxvd1RvcE5hdmlnYXRp
b25Ub0RhdGFVUkxzIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiQWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJBdHRhY2htZW50RWxlbWVudEVuYWJs
ZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCBmYWxz
ZSB9LAorICAgICAgICAgICAgeyAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAg
ICAgICAgIHsgIkluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAg
IHsgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1lbnVJ
dGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiTW9kZXJuTWVkaWFD
b250cm9sc0VuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkNTU0xvZ2ljYWxFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCBm
YWxzZSB9LAorICAgICAgICAgICAgeyAiU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQiLCB0cnVlIH0sCisgICAgICAgICAgICB7ICJMYXlvdXRGb3JtYXR0aW5nQ29udGV4dElu
dGVncmF0aW9uRW5hYmxlZCIsIHRydWUgfSwKKworICAgICAgICAgICAgeyAiQWRDbGlja0F0dHJp
YnV0aW9uRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJBc3BlY3RSYXRpb09mSW1n
RnJvbVdpZHRoQW5kSGVpZ2h0RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJBc3lu
Y0NsaXBib2FyZEFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJDb250YWN0
UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJDb3JlTWF0aE1MRW5h
YmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJSZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxl
ZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCBmYWxz
ZSB9LAorICAgICAgICAgICAgeyAiV2ViR1BVRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgIH07
CisgICAgfQorICAgIHJldHVybiBmZWF0dXJlczsKK30KKwogY29uc3Qgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlwZT4mIFRlc3RPcHRpb25zOjprZXlUeXBl
TWFwcGluZygpCiB7CiAgICAgc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVGVzdEhlYWRlcktleVR5cGU+IG1hcCB7CkBAIC00Nyw1NiArODUsNDcgQEAgY29uc3Qg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZQogICAgIHJldHVybiBtYXA7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHNldFZhbHVlSWZTZXRJbk1hcChUJiB2
YWx1ZVRvU2V0LCBzdGQ6OnN0cmluZyBrZXksIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgVD4mIG1hcCkKK2Jvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVX
aXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3sKKyAgICBpZiAo
bV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0
dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVz
LmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0
dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmRv
dWJsZVdlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVh
dHVyZXMudWludDMyV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlv
bnMubV9mZWF0dXJlcy5zdHJpbmdXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzICE9IG9w
dGlvbnMubV9mZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzICE9IG9w
dGlvbnMubV9mZWF0dXJlcy5kb3VibGVUZXN0UnVubmVyRmVhdHVyZXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMgIT0g
b3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yVGVzdFJ1bm5lckZlYXR1cmVz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgZmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgVCBkZWZhdWx0VmFs
dWUsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVD4mIG1hcCkKIHsKICAg
ICBhdXRvIGl0ID0gbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgdmFsdWVUb1NldCA9IGl0LT5zZWNvbmQ7Ci19Ci0KLVRlc3RPcHRp
b25zOjpUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMgdGVzdEZlYXR1cmVzKQotewotICAgIHNldFZh
bHVlSWZTZXRJbk1hcChhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscywgIkFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwg
dGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZT
ZXRJbk1hcChhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzLCAiQWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQWNjZWxlcmF0ZWREcmF3aW5nLCAiQWNjZWxlcmF0
ZWREcmF3aW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVz
KTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXR0YWNobWVudEVsZW1lbnQsICJBdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUsICJV
c2VzQmFja0ZvcndhcmRDYWNoZSIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29sb3JGaWx0ZXIsICJDb2xvckZp
bHRlckVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0g
ICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucywgIkluc3BlY3Rv
ckFkZGl0aW9uc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyLCAi
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVLZXlnZW5FbGVtZW50
LCAiS2V5Z2VuRWxlbWVudEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZU1lbnVJdGVtRWxlbWVudCwg
Ik1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMsICJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVEcmFnRGVz
dGluYXRpb25BY3Rpb25Mb2FkLCAiZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIHRl
c3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5N
YXAoZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyLCAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcChsYXllckJhY2tlZFdlYlZpZXcsICJsYXllckJhY2tlZFdlYlZpZXciLCB0ZXN0RmVhdHVy
ZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKHVzZUVw
aGVtZXJhbFNlc3Npb24sICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdGVzdEZlYXR1cmVzLmJvb2xU
ZXN0UnVubmVyRmVhdHVyZXMpOwotCi0gICAgc2V0VmFsdWVJZlNldEluTWFwKGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzLCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB0ZXN0
RmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5N
YXAoanNjT3B0aW9ucywgImpzY09wdGlvbnMiLCB0ZXN0RmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5l
ckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDU1NMb2dpY2FsLCAi
Q1NTTG9naWNhbEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlTGluZUhlaWdodFVuaXRzLCAiTGluZUhlaWdo
dFVuaXRzRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOwotICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVz
LCAic2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
aW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAobGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQsICJMYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMp
OwotCi0gICAgc2V0VmFsdWVJZlNldEluTWFwKGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQsICJB
ZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21X
aWR0aEFuZEhlaWdodCwgIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEksICJBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQi
LCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcChlbmFibGVDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmcsICJDU1NPTVZpZXdTbW9vdGhTY3Jv
bGxpbmdFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29udGFjdFBpY2tlckFQSSwgIkNvbnRhY3RQaWNrZXJB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ29yZU1hdGhNTCwgIkNvcmVNYXRoTUxFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAo
ZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjaywgIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwg
dGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5N
YXAoZW5hYmxlUmVzaXplT2JzZXJ2ZXIsICJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVXZWJHUFUsICJXZWJHUFVFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1
cmVzKTsKKyAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCitib29sIFRlc3RPcHRpb25zOjpib29s
VGVzdFJ1bm5lckZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1f
ZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7CiB9CiAKLWJvb2wgVGVzdE9wdGlvbnM6
OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3RoZXIp
IGNvbnN0CitzdGQ6OnN0cmluZyBUZXN0T3B0aW9uczo6c3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2VkV2ViVmll
dwotICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnM7CisgICAgcmV0dXJu
IGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVu
bmVyRmVhdHVyZXMpOwogfQogCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgJ
KHJldmlzaW9uIDI2ODcyNykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDUzICszMSwzOSBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAot
c3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGFuZCByZXBs
YWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAgLy8gV2ViIFByZWZlcmVu
Y2VzCi0gICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIHsg
dHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAg
ICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGUgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIg
eyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIHsgZmFsc2UgfTsKLSAgICBib29s
IGVuYWJsZUtleWdlbkVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1F
bGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0
cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNj
ZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAgLy8gSW50ZXJuYWwgRmVhdHVyZXMKLSAgICBi
b29sIGVuYWJsZUNTU0xvZ2ljYWwgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTGluZUhlaWdo
dFVuaXRzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXMgeyB0cnVlIH07Ci0gICAgYm9vbCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVn
cmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgYW5k
IHJlcGxhY2Ugd2l0aCBhY2Nlc3MgdG8gVGVzdEZlYXR1cmVzIHNldC4KLSAgICAvLyBFeHBlcmlt
ZW50YWwgRmVhdHVyZXMKLSAgICBib29sIGFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgeyBmYWxz
ZSB9OwotICAgIGJvb2wgZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVBc3luY0NsaXBib2FyZEFQSSB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBlbmFibGVDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmcgeyBmYWxzZSB9OwotICAgIGJv
b2wgZW5hYmxlQ29udGFjdFBpY2tlckFQSSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDb3Jl
TWF0aE1MIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2sgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlUmVzaXplT2JzZXJ2ZXIgeyBmYWxzZSB9OwotICAgIGJv
b2wgZW5hYmxlV2ViR1BVIHsgZmFsc2UgfTsKK2NsYXNzIFRlc3RPcHRpb25zIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgVGVzdEZlYXR1cmVzJiBkZWZhdWx0cygpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYg
a2V5VHlwZU1hcHBpbmcoKTsKIAotICAgIC8vIFRlc3QgUnVubmVyIFNwZWNpZmljIEZlYXR1cmVz
Ci0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFi
bGVXZWJTUUwgeyB0cnVlIH07Ci0gICAgYm9vbCBsYXllckJhY2tlZFdlYlZpZXcgeyBmYWxzZSB9
OwotICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07Ci0gICAgc3RkOjpzdHJp
bmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXM7Ci0gICAgc3RkOjpzdHJpbmcganNjT3B0
aW9uczsKKyAgICBleHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMgZmVhdHVyZXMpCisg
ICAgICAgIDogbV9mZWF0dXJlcyhzdGQ6Om1vdmUoZmVhdHVyZXMpKQorICAgIHsKKyAgICB9CiAK
LSAgICBleHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMpOwogICAgIGJvb2wgd2ViVmll
d0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJikgY29uc3Q7Ci0gICAg
Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhl
YWRlcktleVR5cGU+JiBrZXlUeXBlTWFwcGluZygpOworCisgICAgLy8gVGVzdCBSdW5uZXIgU3Bl
Y2lmaWMgRmVhdHVyZXMKKyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpIGNvbnN0
IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZhbHVlKCJkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxv
YWQoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZW5hYmxlRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCIsIGZhbHNlKTsgfQorICAgIGJvb2wgbGF5ZXJCYWNrZWRX
ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoImxheWVy
QmFja2VkV2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZhbHVlKCJ1c2VFcGhlbWVyYWxT
ZXNzaW9uIiwgZmFsc2UpOyB9CisgICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdUZXN0UnVubmVyRmVhdHVyZVZhbHVlKCJh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0cmluZyBq
c2NPcHRpb25zKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgi
anNjT3B0aW9ucyIsIHsgfSk7IH0KKworICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgYm9vbD4mIGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVy
biBtX2ZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXM7IH0KKyAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4mIGRvdWJsZVdlYlByZWZlcmVuY2VG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZl
YXR1cmVzOyB9CisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCB1aW50
MzJfdD4mIHVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXMudWludDMyV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAgY29uc3Qgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4mIHN0cmluZ1dlYlByZWZlcmVuY2VG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZl
YXR1cmVzOyB9CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdG9XZWJLaXRMZWdhY3lQcmVmZXJl
bmNlS2V5KGNvbnN0IHN0ZDo6c3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBib29sV2Vi
UHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZhbHVl
KSBjb25zdDsKKyAgICBib29sIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5n
IGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIHN0cmluZ1Rl
c3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0
VmFsdWUpIGNvbnN0OworCisgICAgVGVzdEZlYXR1cmVzIG1fZmVhdHVyZXM7CiB9OwogCiB9Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lv
biAyNjg3MjcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw4ICsxMjksNiBAQCBleHRlcm4gIkMiIHsKICNpbXBvcnQg
PG1hY2gtby9nZXRzZWN0Lmg+CiB9CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIEBpbnRlcmZhY2UgRHVtcFJlbmRlclRyZWVBcHBsaWNhdGlvbiA6
IE5TQXBwbGljYXRpb24KIEBlbmQKQEAgLTE1MSw3ICsxNDksNyBAQCAtICh2b2lkKXZpZXc6KFVJ
V2ViRG9jdW1lbnRWaWV3ICopdmlldyBkCiAgICAgQVNTRVJUKHNjcm9sbFZpZXcgJiYgW3Njcm9s
bFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlXZWJTY3JvbGxWaWV3IGNsYXNzXV0pOwogICAgIGNvbnN0
IENHU2l6ZSBzY3JvbGxWaWV3U2l6ZSA9IFtzY3JvbGxWaWV3IGJvdW5kc10uc2l6ZTsKICAgICBD
R1NpemUgY29udGVudFNpemUgPSBuZXdGcmFtZS5zaXplOwotICAgIGNvbnRlbnRTaXplLmhlaWdo
dCA9IENHUm91bmQobWF4KENHUmVjdEdldE1heFkobmV3RnJhbWUpLCBzY3JvbGxWaWV3U2l6ZS5o
ZWlnaHQpKTsKKyAgICBjb250ZW50U2l6ZS5oZWlnaHQgPSBDR1JvdW5kKHN0ZDo6bWF4KENHUmVj
dEdldE1heFkobmV3RnJhbWUpLCBzY3JvbGxWaWV3U2l6ZS5oZWlnaHQpKTsKICAgICBbKFVJV2Vi
U2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgc2V0Q29udGVudFNpemU6Y29udGVudFNpemVdOwogfQog
QGVuZApAQCAtMTc3LDcgKzE3NSw3IEBAIC0gKFdlYkNvcmU6OkZyYW1lKilfbWFpbkNvcmVGcmFt
ZTsKIEBlbmQKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVz
dFVSTCk7CitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0VVJMKTsK
IAogLy8gRGVjaWRpbmcgd2hlbiBpdCdzIE9LIHRvIGR1bXAgb3V0IHRoZSBzdGF0ZSBpcyBhIGJp
dCB0cmlja3kuICBBbGwgdGhlc2UgbXVzdCBiZSB0cnVlOgogLy8gLSBUaGVyZSBpcyBubyBsb2Fk
IGluIHByb2dyZXNzCkBAIC0yNDgsNyArMjQ2LDcgQEAgdm9pZCBzZXRQZXJzaXN0ZW50VXNlclN0
eWxlU2hlZXRMb2NhdGlvbgogICAgIHBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uID0g
dXJsOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0
IHN0cmluZyYgdXJsU3RyaW5nKQorc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlV2ViQ29yZU5vZGVM
ZWFrcyhjb25zdCBzdGQ6OnN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIHN0YXRpYyBjaGFyKiBj
b25zdCBpZ25vcmVTZXRbXSA9IHsKICAgICAgICAgLy8gS2VlcGluZyB0aGlzIGluZnJhc3RydWN0
dXJlIGFyb3VuZCBpbiBjYXNlIHdlIGV2ZXIgbmVlZCBpdCBhZ2Fpbi4KQEAgLTI1Nyw3ICsyNTUs
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzCiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGlnbm9yZVNldENvdW50OyBpKyspIHsKICAgICAgICAgLy8gRklYTUU6
IGlnbm9yZSBjYXNlCi0gICAgICAgIHN0cmluZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgY3VySWdub3JlKGlnbm9yZVNldFtpXSk7CiAgICAgICAgIC8vIE1h
dGNoIGF0IHRoZSBlbmQgb2YgdGhlIHVybFN0cmluZy4KICAgICAgICAgaWYgKCF1cmxTdHJpbmcu
Y29tcGFyZSh1cmxTdHJpbmcubGVuZ3RoKCkgLSBjdXJJZ25vcmUubGVuZ3RoKCksIGN1cklnbm9y
ZS5sZW5ndGgoKSwgY3VySWdub3JlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjE1
LDggKzYxMyw4IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFydDooTlNTY3JvbGxlclBhcnQpcGEKICAg
ICBCT09MIGlzSG9yaXpvbnRhbCA9IGZyYW1lUmVjdC5zaXplLndpZHRoID4gZnJhbWVSZWN0LnNp
emUuaGVpZ2h0OwogICAgIENHRmxvYXQgdHJhY2tMZW5ndGggPSBpc0hvcml6b250YWwgPyBib3Vu
ZHMuc2l6ZS53aWR0aCA6IGJvdW5kcy5zaXplLmhlaWdodDsKICAgICBDR0Zsb2F0IG1pbktub2JT
aXplID0gaXNIb3Jpem9udGFsID8gYm91bmRzLnNpemUuaGVpZ2h0IDogYm91bmRzLnNpemUud2lk
dGg7Ci0gICAgQ0dGbG9hdCBrbm9iTGVuZ3RoID0gbWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2Fz
dDxDR0Zsb2F0Pihyb3VuZCh0cmFja0xlbmd0aCAqIFtzZWxmIGtub2JQcm9wb3J0aW9uXSkpKTsK
LSAgICBDR0Zsb2F0IGtub2JQb3NpdGlvbiA9IHN0YXRpY19jYXN0PENHRmxvYXQ+KChyb3VuZChb
c2VsZiBkb3VibGVWYWx1ZV0gKiAodHJhY2tMZW5ndGggLSBrbm9iTGVuZ3RoKSkpKTsKKyAgICBD
R0Zsb2F0IGtub2JMZW5ndGggPSBzdGQ6Om1heChtaW5Lbm9iU2l6ZSwgc3RhdGljX2Nhc3Q8Q0dG
bG9hdD4oc3RkOjpyb3VuZCh0cmFja0xlbmd0aCAqIFtzZWxmIGtub2JQcm9wb3J0aW9uXSkpKTsK
KyAgICBDR0Zsb2F0IGtub2JQb3NpdGlvbiA9IHN0YXRpY19jYXN0PENHRmxvYXQ+KChzdGQ6OnJv
dW5kKFtzZWxmIGRvdWJsZVZhbHVlXSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOwog
CiAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoYm91bmRz
Lm9yaWdpbi54ICsga25vYlBvc2l0aW9uLCBib3VuZHMub3JpZ2luLnksIGtub2JMZW5ndGgsIGJv
dW5kcy5zaXplLmhlaWdodCk7CkBAIC02NzIsNiArNjcwLDEwIEBAIFdlYlZpZXcgKmNyZWF0ZVdl
YlZpZXdBbmRPZmZzY3JlZW5XaW5kb3cKICAgICBbd2ViVmlldyBzZXRHcm91cE5hbWU6QCJvcmcu
d2Via2l0LkR1bXBSZW5kZXJUcmVlIl07CiAjZW5kaWYKIAorICAgIFdlYlByZWZlcmVuY2VzICpw
cmVmZXJlbmNlcyA9IFtbV2ViUHJlZmVyZW5jZXMgYWxsb2NdIGluaXRdOworICAgIFtwcmVmZXJl
bmNlcyBzZXRBdXRvc2F2ZXM6Tk9dOworICAgIFt3ZWJWaWV3IHNldFByZWZlcmVuY2VzOnByZWZl
cmVuY2VzXTsKKwogICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6dWlEZWxlZ2F0ZV07CiAgICAg
W3dlYlZpZXcgc2V0RnJhbWVMb2FkRGVsZWdhdGU6ZnJhbWVMb2FkRGVsZWdhdGVdOwogICAgIFt3
ZWJWaWV3IHNldEVkaXRpbmdEZWxlZ2F0ZTplZGl0aW5nRGVsZWdhdGVdOwpAQCAtNjg1LDggKzY4
Nyw2IEBAIFdlYlZpZXcgKmNyZWF0ZVdlYlZpZXdBbmRPZmZzY3JlZW5XaW5kb3cKICAgICBbV2Vi
VmlldyByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWw6QCJmZWVkcyJdOwogICAgIFtXZWJWaWV3IHJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbDpAImZlZWRzZWFyY2giXTsKIAotICAgIFtbd2ViVmlldyBw
cmVmZXJlbmNlc10gX3NldE1lZGlhUmVjb3JkZXJFbmFibGVkOllFU107Ci0KICNpZiBQTEFURk9S
TShNQUMpCiAgICAgW3dlYlZpZXcgc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDpO
T107CiAgICAgW1dlYlZpZXcgX3NldEZvbnRBbGxvd0xpc3Q6Zm9udEFsbG93TGlzdCgpXTsKQEAg
LTgwOCwzMiArODA4LDMxIEBAIHN0YXRpYyBOU1N0cmluZyAqbGlicmFyeVBhdGhGb3JEdW1wUmVu
ZGUKICAgICAgICAgcmV0dXJuIFtAIn4vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlIiBzdHJpbmdCeUV4cGFuZGluZ1RpbGRlSW5QYXRoXTsKIH0KIAotc3RhdGljIHZv
aWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2Vz
KQorc3RhdGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoV2ViUHJlZmVyZW5jZXMg
KnByZWZlcmVuY2VzKQogewogICAgIC8vIEZJWE1FOiBTcHJpbmdUaW1pbmdGdW5jdGlvbgorICAg
IC8vIEZJWE1FOiBJbnB1dEV2ZW50cwogICAgIFtwcmVmZXJlbmNlcyBzZXRHYW1lcGFkc0VuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0SGlnaGxpZ2h0QVBJRW5hYmxlZDpZRVNdOwog
ICAgIFtwcmVmZXJlbmNlcyBzZXRMaW5rUHJlbG9hZEVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVy
ZW5jZXMgc2V0TWVkaWFQcmVsb2FkaW5nRW5hYmxlZDpZRVNdOwotICAgIC8vIEZJWE1FOiBJbnB1
dEV2ZW50cwogICAgIFtwcmVmZXJlbmNlcyBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQ6WUVT
XTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNF
bmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGlt
ZWxpbmVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRDU1NDdXN0b21Qcm9wZXJ0
aWVzQW5kVmFsdWVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJHTDJFbmFi
bGVkOllFU107Ci0gICAgLy8gRklYTUU6IEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkCiAgICAg
W3ByZWZlcmVuY2VzIHNldENhY2hlQVBJRW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNl
dFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0
V3JpdGFibGVTdHJlYW1BUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFRyYW5z
Zm9ybVN0cmVhbUFQSUVuYWJsZWQ6WUVTXTsKLSAgICBwcmVmZXJlbmNlcy5lbmNyeXB0ZWRNZWRp
YUFQSUVuYWJsZWQgPSBZRVM7CisgICAgW3ByZWZlcmVuY2VzIHNldEVuY3J5cHRlZE1lZGlhQVBJ
RW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBY2Nlc3NpYmlsaXR5T2JqZWN0TW9k
ZWxFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldEFyaWFSZWZsZWN0aW9uRW5hYmxl
ZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRWaXN1YWxWaWV3cG9ydEFQSUVuYWJsZWQ6WUVT
XTsKICAgICBbcHJlZmVyZW5jZXMgc2V0Q29sb3JGaWx0ZXJFbmFibGVkOllFU107CiAgICAgW3By
ZWZlcmVuY2VzIHNldFNlcnZlclRpbWluZ0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMg
c2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOllFU107Ci0gICAgcHJlZmVyZW5jZXMuc291
cmNlQnVmZmVyQ2hhbmdlVHlwZUVuYWJsZWQgPSBZRVM7CisgICAgW3ByZWZlcmVuY2VzIHNldFNv
dXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldENT
U09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0TWVk
aWFSZWNvcmRlckVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0UmVmZXJyZXJQb2xp
Y3lBdHRyaWJ1dGVFbmFibGVkOllFU107CkBAIC04NDQsOSArODQzLDggQEAgc3RhdGljIHZvaWQg
ZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoVwogfQogCiAvLyBDYWxsZWQgYmVmb3JlIGVhY2gg
dGVzdC4KLXN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMo
KQorc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhXZWJQ
cmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMpCiB7Ci0gICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVu
Y2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwogICAgIGVuYWJsZUV4
cGVyaW1lbnRhbEZlYXR1cmVzKHByZWZlcmVuY2VzKTsKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRO
ZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyazogTk9dOwpAQCAtODY2LDIxICs4NjQs
MTEgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdAogICAgIFtwcmVm
ZXJlbmNlcyBzZXRKYXZhRW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldEphdmFTY3Jp
cHRFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldEVkaXRhYmxlTGlua0JlaGF2aW9y
OldlYktpdEVkaXRhYmxlTGlua09ubHlMaXZlV2l0aFNoaWZ0S2V5XTsKLSNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBbcHJlZmVyZW5jZXMgc2V0VGFic1RvTGlua3M6Tk9dOwotI2VuZGlm
CiAgICAgW3ByZWZlcmVuY2VzIHNldERPTVBhc3RlQWxsb3dlZDpZRVNdOwotI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIFtwcmVmZXJlbmNlcyBzZXRTaG91bGRQcmludEJhY2tncm91bmRz
OllFU107Ci0jZW5kaWYKICAgICBbcHJlZmVyZW5jZXMgc2V0Q2FjaGVNb2RlbDpXZWJDYWNoZU1v
ZGVsRG9jdW1lbnRCcm93c2VyXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0WFNTQXVkaXRvckVuYWJs
ZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRFeHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5h
YmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldFBsdWdJbnNFbmFibGVkOllFU107Ci0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgW3ByZWZlcmVuY2VzIHNldFRleHRBcmVhc0FyZVJl
c2l6YWJsZTpZRVNdOwotI2VuZGlmCi0KICAgICBbcHJlZmVyZW5jZXMgc2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFNocmlua3NTdGFuZGFsb25lSW1hZ2Vz
VG9GaXQ6WUVTXTsKQEAgLTg5NSwxMyArODgzLDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVm
ZXJlbmNlc1RvQ29uc2lzdAogICAgIFtwcmVmZXJlbmNlcyBzZXRBc3luY0ZyYW1lU2Nyb2xsaW5n
RW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxl
ZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1ldGFSZWZyZXNoRW5hYmxlZDpZRVNdOwotCi0g
ICAgaWYgKHBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKSB7Ci0gICAgICAgIFtwcmVm
ZXJlbmNlcyBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uOltOU1VSTCBVUkxXaXRoU3RyaW5nOihf
X2JyaWRnZSBOU1N0cmluZyAqKXBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgp
XV07Ci0gICAgICAgIFtwcmVmZXJlbmNlcyBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQ6WUVTXTsK
LSAgICB9IGVsc2UKLSAgICAgICAgW3ByZWZlcmVuY2VzIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxl
ZDpOT107Ci0KKyAgICBbcHJlZmVyZW5jZXMgc2V0SW5saW5lTWVkaWFQbGF5YmFja1JlcXVpcmVz
UGxheXNJbmxpbmVBdHRyaWJ1dGU6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYVBsYXli
YWNrQWxsb3dzSW5saW5lOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhUGxheWJhY2tS
ZXF1aXJlc1VzZXJHZXN0dXJlOk5PXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VmlkZW9QbGF5YmFj
a1JlcXVpcmVzVXNlckdlc3R1cmU6Tk9dOwpAQCAtOTA5LDkyICs4OTEsOTMgQEAgc3RhdGljIHZv
aWQgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdAogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRp
YURhdGFMb2Fkc0F1dG9tYXRpY2FsbHk6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0SW52aXNp
YmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRTdWJwaXhl
bEFudGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZDpOT107Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIC8vIEVuYWJsZSB0aGUgdHJhY2tlciBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0
IFdlYlZpZXcgd2lsbAotICAgIC8vIGNhdXNlIGluaXRpYWxpemF0aW9uIHRvIHVzZSB0aGUgY29y
cmVjdCBkYXRhYmFzZSBwYXRocy4KLSAgICBbcHJlZmVyZW5jZXMgc2V0U3RvcmFnZVRyYWNrZXJF
bmFibGVkOllFU107Ci0jZW5kaWYKLQogICAgIFtwcmVmZXJlbmNlcyBfc2V0VGV4dEF1dG9zaXpp
bmdFbmFibGVkOk5PXTsKLQotICAgIC8vIFRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgaXMgY2F1c2lu
ZyBwcm9ibGVtcyBkdWUgdG8gbGF5b3V0cyBkdXJpbmcgdHJhbnNpdGlvbiBmcm9tIG9uZSBwYWdl
IHRvIGFub3RoZXIuCi0gICAgLy8gU28sIHR1cm4gaXQgb2ZmIGZvciBub3csIGJ1dCB3ZSBtaWdo
dCB3YW50IHRvIHR1cm4gaXQgYmFjayBvbiBzb21lIGRheS4KICAgICBbcHJlZmVyZW5jZXMgc2V0
VXNlc1BhZ2VDYWNoZTpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkOllFU107Ci0jaWYgVVNFKENBKQotICAgIFtwcmVmZXJlbmNlcyBzZXRDYW52
YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nOllFU107Ci0gICAgW3ByZWZlcmVuY2VzIHNldEFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQ6dXNlQWNjZWxlcmF0ZWREcmF3aW5nXTsKLSNlbmRpZgogICAg
IFtwcmVmZXJlbmNlcyBzZXRVc2VQcmVIVE1MNVBhcnNlclF1aXJrczpOT107CiAgICAgW3ByZWZl
cmVuY2VzIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOk5PXTsKLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBBU1NFUlQoW3ByZWZlcmVuY2VzIG1vY2tTY3JvbGxiYXJz
RW5hYmxlZF0pOwotI2VuZGlmCi0KKyAgICBbcHJlZmVyZW5jZXMgc2V0TW9ja1Njcm9sbGJhcnNF
bmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkF1ZGlvRW5hYmxlZDpZRVNdOwog
ICAgIFtwcmVmZXJlbmNlcyBzZXRNb2Rlcm5VbnByZWZpeGVkV2ViQXVkaW9FbmFibGVkOllFU107
CiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhU291cmNlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRTb3VyY2VCdWZmZXJDaGFuZ2VUeXBlRW5hYmxlZDpZRVNdOwotCiAgICAgW3By
ZWZlcmVuY2VzIHNldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJl
bmNlcyBzZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5j
ZXMgc2V0RGlhbG9nRWxlbWVudEVuYWJsZWQ6WUVTXTsKLQogICAgIFtwcmVmZXJlbmNlcyBzZXRX
ZWJHTDJFbmFibGVkOllFU107Ci0KICAgICBbcHJlZmVyZW5jZXMgc2V0RG93bmxvYWRBdHRyaWJ1
dGVFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldERpcmVjdG9yeVVwbG9hZEVuYWJs
ZWQ6WUVTXTsKLQogICAgIFtwcmVmZXJlbmNlcyBzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nRW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldEhpZGRlblBhZ2VDU1NBbmltYXRp
b25TdXNwZW5zaW9uRW5hYmxlZDpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldFJlbW90ZVBsYXli
YWNrRW5hYmxlZDpZRVNdOwotCiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhRGV2aWNlc0VuYWJs
ZWQ6WUVTXTsKLQogICAgIFtwcmVmZXJlbmNlcyBzZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0Vu
YWJsZWQ6Tk9dOwotCiAgICAgW3ByZWZlcmVuY2VzIHNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFi
bGVkOllFU107CisgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhQ2FwYWJpbGl0aWVzRW5hYmxlZDpZ
RVNdOworICAgIFtwcmVmZXJlbmNlcyBzZXRTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVz
RW5hYmxlZDpZRVNdOworICAgIFtwcmVmZXJlbmNlcyBzZXRGdWxsU2NyZWVuRW5hYmxlZDpZRVNd
OworICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJTUUxFbmFibGVkOllFU107CiAKLSAgICBbcHJlZmVy
ZW5jZXMgc2V0Q2FjaGVBUElFbmFibGVkOk5PXTsKLSAgICBwcmVmZXJlbmNlcy5tZWRpYUNhcGFi
aWxpdGllc0VuYWJsZWQgPSBZRVM7CisgICAgaWYgKHBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKSB7CisgICAgICAgIFtwcmVmZXJlbmNlcyBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
OltOU1VSTCBVUkxXaXRoU3RyaW5nOihfX2JyaWRnZSBOU1N0cmluZyAqKXBlcnNpc3RlbnRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uLmdldCgpXV07CisgICAgICAgIFtwcmVmZXJlbmNlcyBzZXRVc2Vy
U3R5bGVTaGVldEVuYWJsZWQ6WUVTXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW3ByZWZlcmVuY2Vz
IHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpOT107CiAKLSAgICBwcmVmZXJlbmNlcy5zZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IFlFUzsKKyNpZiBVU0UoQ0EpCisgICAg
W3ByZWZlcmVuY2VzIHNldENhbnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmc6WUVTXTsKKyAgICBb
cHJlZmVyZW5jZXMgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDp1c2VBY2NlbGVyYXRlZERy
YXdpbmddOworI2VuZGlmCiAKLSAgICBbcHJlZmVyZW5jZXMgc2V0V2ViU1FMRW5hYmxlZDpZRVNd
OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gRW5hYmxlIHRoZSB0cmFja2VyIGJl
Zm9yZSBjcmVhdGluZyB0aGUgZmlyc3QgV2ViVmlldyB3aWxsCisgICAgLy8gY2F1c2UgaW5pdGlh
bGl6YXRpb24gdG8gdXNlIHRoZSBjb3JyZWN0IGRhdGFiYXNlIHBhdGhzLgorICAgIFtwcmVmZXJl
bmNlcyBzZXRTdG9yYWdlVHJhY2tlckVuYWJsZWQ6WUVTXTsKKyNlbHNlCisgICAgW3ByZWZlcmVu
Y2VzIHNldFRhYnNUb0xpbmtzOk5PXTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0U2hvdWxkUHJpbnRC
YWNrZ3JvdW5kczpZRVNdOworICAgIFtwcmVmZXJlbmNlcyBzZXRUZXh0QXJlYXNBcmVSZXNpemFi
bGU6WUVTXTsKKyNlbmRpZgogCiAgICAgW1dlYlByZWZlcmVuY2VzIF9jbGVhck5ldHdvcmtMb2Fk
ZXJTZXNzaW9uXTsKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVy
U2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJv
bU1haW5Eb2N1bWVudERvbWFpbl07CiB9CiAKLXN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2Vz
Rm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyBi
b29sIGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBk
ZWZhdWx0VmFsdWUsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgV2Vi
UHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVy
ZW5jZXNdOwotCi0gICAgcHJlZmVyZW5jZXMuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkID0gb3B0
aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudDsKLSAgICBwcmVmZXJlbmNlcy5hY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBY2NlbGVyYXRlZERyYXdpbmc7Ci0gICAg
cHJlZmVyZW5jZXMubWVudUl0ZW1FbGVtZW50RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTWVudUl0
ZW1FbGVtZW50OwotICAgIHByZWZlcmVuY2VzLmtleWdlbkVsZW1lbnRFbmFibGVkID0gb3B0aW9u
cy5lbmFibGVLZXlnZW5FbGVtZW50OwotICAgIHByZWZlcmVuY2VzLm1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzOwotICAgIHByZWZl
cmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9uczsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNl
c1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMuY29sb3JGaWx0ZXJFbmFibGVk
ID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKLSAgICBwcmVmZXJlbmNlcy5zZWxlY3Rpb25B
Y3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlU2VsZWN0aW9uQWNy
b3NzU2hhZG93Qm91bmRhcmllczsKLSAgICBwcmVmZXJlbmNlcy53ZWJHUFVFbmFibGVkID0gb3B0
aW9ucy5lbmFibGVXZWJHUFU7Ci0gICAgcHJlZmVyZW5jZXMuQ1NTTG9naWNhbEVuYWJsZWQgPSBv
cHRpb25zLmVuYWJsZUNTU0xvZ2ljYWw7Ci0gICAgcHJlZmVyZW5jZXMubGluZUhlaWdodFVuaXRz
RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTGluZUhlaWdodFVuaXRzOwotICAgIHByZWZlcmVuY2Vz
LmFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBvcHRpb25zLmFkQ2xpY2tBdHRyaWJ1dGlvbkVu
YWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJFbmFibGVkID0gb3B0aW9ucy5l
bmFibGVSZXNpemVPYnNlcnZlcjsKLSAgICBwcmVmZXJlbmNlcy5DU1NPTVZpZXdTbW9vdGhTY3Jv
bGxpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmc7Ci0g
ICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNvcmVNYXRo
TUw7Ci0gICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQgPSBvcHRpb25z
LmVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2s7Ci0gICAgcHJlZmVyZW5jZXMuYXN5bmNDbGlwYm9h
cmRBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3luY0NsaXBib2FyZEFQSTsKLSAgICBwcmVm
ZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNz
aW9uOwotICAgIHByZWZlcmVuY2VzLnVzZXNQYWdlQ2FjaGUgPSBvcHRpb25zLmVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGU7Ci0gICAgcHJlZmVyZW5jZXMubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRl
Z3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRp
b25FbmFibGVkOwotICAgIHByZWZlcmVuY2VzLmFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRI
ZWlnaHRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5k
SGVpZ2h0OwotICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBv
cHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM7Ci0gICAgcHJlZmVyZW5jZXMuY29u
dGFjdFBpY2tlckFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNvbnRhY3RQaWNrZXJBUEk7Cisg
ICAgYXV0byBpdCA9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmZpbmQoa2V5
KTsKKyAgICBpZiAoaXQgIT0gb3B0aW9ucy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkuZW5k
KCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBkZWZhdWx0VmFsdWU7
Cit9CisKK3N0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoV2ViUHJl
ZmVyZW5jZXMgKnByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQor
eworICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBvcHRpb25zLnVzZUVw
aGVtZXJhbFNlc3Npb24oKTsKKworICAgIHByZWZlcmVuY2VzLmF0dGFjaG1lbnRFbGVtZW50RW5h
YmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBdHRhY2htZW50RWxlbWVudEVu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLm1lbnVJdGVt
RWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTWVudUl0ZW1F
bGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5rZXlnZW5F
bGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJLZXlnZW5FbGVt
ZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5tb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmlu
c3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgi
SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJl
bmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5j
b2xvckZpbHRlckVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29sb3JG
aWx0ZXJFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
VmFsdWUoIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNl
RmVhdHVyZVZhbHVlKCJXZWJHUFVFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZl
cmVuY2VzLkNTU0xvZ2ljYWxFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUo
IkNTU0xvZ2ljYWxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmxp
bmVIZWlnaHRVbml0c0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTGlu
ZUhlaWdodFVuaXRzRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5h
ZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUo
IkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVy
ZW5jZXMucmVzaXplT2JzZXJ2ZXJFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFs
dWUoIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJl
bmNlcy5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiQ29yZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7Cisg
ICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiUmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYXN5bmNDbGlwYm9hcmRBUElFbmFibGVkID0gYm9vbFdl
YlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIGZhbHNl
LCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNhY2hlID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UsIG9wdGlvbnMp
OworICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkxheW91dEZvcm1hdHRpbmdDb250
ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMu
YXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJs
ZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmln
YXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29udGFj
dFBpY2tlckFQSUVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29udGFj
dFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CiB9CiAKIC8vIENhbGxlZCBvbmNl
IG9uIER1bXBSZW5kZXJUcmVlIHN0YXJ0dXAuCkBAIC0xMDE4LDkgKzEwMDEsNiBAQCBzdGF0aWMg
dm9pZCBzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlCiAgICAgICAgIEAiQXBwbGVPdGhlckhp
Z2hsaWdodENvbG9yIjpAIjAuNTAwMDAwIDAuNTAwMDAwIDAuNTAwMDAwIiwKICAgICAgICAgQCJB
cHBsZUxhbmd1YWdlcyI6IEBbIEAiZW4iIF0sCiAgICAgICAgIFdlYktpdEVuYWJsZUZ1bGxEb2N1
bWVudFRlYXJkb3duUHJlZmVyZW5jZUtleTogQFlFUywKLSAgICAgICAgV2ViS2l0RnVsbFNjcmVl
bkVuYWJsZWRQcmVmZXJlbmNlS2V5OiBAWUVTLAotICAgICAgICBXZWJLaXRBbGxvd3NJbmxpbmVN
ZWRpYVBsYXliYWNrUHJlZmVyZW5jZUtleTogQFlFUywKLSAgICAgICAgV2ViS2l0SW5saW5lTWVk
aWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGVLZXk6IEBOTywKICAgICAgICAg
QCJVc2VXZWJLaXRXZWJJbnNwZWN0b3IiOiBAWUVTLAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgICAgICBAIk5TUHJlZmVycmVkU3BlbGxTZXJ2ZXJMYW5ndWFnZSI6IEAiZW5fVVMiLApA
QCAtMTQzMSw3ICsxNDExLDcgQEAgc3RhdGljIE5TSW50ZWdlciBjb21wYXJlSGlzdG9yeUl0ZW1z
KGlkIAogCiBzdGF0aWMgTlNEYXRhICpkdW1wQXVkaW8oKQogewotICAgIGNvbnN0IHZlY3Rvcjxj
aGFyPiYgZGF0YVZlY3RvciA9IGdUZXN0UnVubmVyLT5hdWRpb1Jlc3VsdCgpOworICAgIGNvbnN0
IGF1dG8mIGRhdGFWZWN0b3IgPSBnVGVzdFJ1bm5lci0+YXVkaW9SZXN1bHQoKTsKIAogICAgIE5T
RGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhVmVjdG9yLmRhdGEoKSBsZW5n
dGg6ZGF0YVZlY3Rvci5zaXplKCldOwogICAgIHJldHVybiBkYXRhOwpAQCAtMTYyNyw3ICsxNjA3
LDcgQEAgc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdCgpCiAgICAgW3VpRGVs
ZWdhdGUgcmVzZXRXaW5kb3dPcmlnaW5dOwogCiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3Qg
dG8gYmUgNDgweDM2MAotICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0
VVJMKCkuZmluZCgic3ZnL1czQy1TVkctMS4xIikgIT0gc3RyaW5nOjpucG9zKTsKKyAgICBib29s
IGlzU1ZHVzNDVGVzdCA9IChnVGVzdFJ1bm5lci0+dGVzdFVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZH
LTEuMSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKICAgICBOU1NpemUgZnJhbWVTaXplID0gaXNT
VkdXM0NUZXN0ID8gTlNNYWtlU2l6ZShUZXN0UnVubmVyOjp3M2NTVkdWaWV3V2lkdGgsIFRlc3RS
dW5uZXI6OnczY1NWR1ZpZXdIZWlnaHQpIDogTlNNYWtlU2l6ZShUZXN0UnVubmVyOjp2aWV3V2lk
dGgsIFRlc3RSdW5uZXI6OnZpZXdIZWlnaHQpOwogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNl
dEZyYW1lU2l6ZTpmcmFtZVNpemVdOwogICAgIFtbbWFpbkZyYW1lIGZyYW1lVmlld10gc2V0RnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCBmcmFtZVNpemUud2lkdGgsIGZyYW1lU2l6ZS5oZWlnaHQpXTsK
QEAgLTE4MjYsOSArMTgwNiw5IEBAIHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RS
OjpUZXMKICAgICAgICAgc2F2ZWRPcHRpb25zLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG9w
dGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgeworICAgIGlmICghb3B0aW9ucy5qc2NPcHRpb25z
KCkuZW1wdHkoKSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zSW5BTGlu
ZShzYXZlZE9wdGlvbnMpOwotICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9u
cy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMo
b3B0aW9ucy5qc2NPcHRpb25zKCkuY19zdHIoKSk7CiAgICAgfQogfQogCkBAIC0xODM5LDYgKzE4
MTksMTAgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogCiAgICAg
V2ViVmlldyAqd2ViVmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CiAKKyAgICBXZWJQcmVmZXJl
bmNlcyAqcHJlZmVyZW5jZXMgPSBbW1dlYlByZWZlcmVuY2VzIGFsbG9jXSBpbml0XTsKKyAgICBb
cHJlZmVyZW5jZXMgc2V0QXV0b3NhdmVzOk5PXTsKKyAgICBbd2ViVmlldyBzZXRQcmVmZXJlbmNl
czpwcmVmZXJlbmNlc107CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGFkanVzdFdl
YkRvY3VtZW50Rm9yU3RhbmRhcmRWaWV3cG9ydChnV2ViQnJvd3NlclZpZXcsIGdXZWJTY3JvbGxW
aWV3KTsKICAgICBbd2ViVmlldyBfc2V0QWxsb3dzTWVzc2FnaW5nOllFU107CkBAIC0xODY3LDEw
ICsxODUxLDEwIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKIAog
ICAgIFtXZWJDYWNoZSBjbGVhckNhY2hlZENyZWRlbnRpYWxzXTsKIAotICAgIHJlc2V0V2ViUHJl
ZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKLSAgICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRl
c3RPcHRpb25zKG9wdGlvbnMpOworICAgIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRW
YWx1ZXMocHJlZmVyZW5jZXMpOworICAgIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMo
cHJlZmVyZW5jZXMsIG9wdGlvbnMpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbd2ViVmlldyBz
ZXRXYW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3XTsKKyAgICBbd2ViVmlldyBz
ZXRXYW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3KCldOwogI2VuZGlmCiAKICAg
ICBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoZmFsc2UpOwpAQCAtMTkxNCw3ICsx
ODk4LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAgIFtb
TlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBkZWNsYXJlVHlwZXM6QFtOU1N0cmluZ1Bi
b2FyZFR5cGVdIG93bmVyOm5pbF07CiAjZW5kaWYKIAotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6
c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgV2ViQ29yZVRlc3RTdXBwb3J0
OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRp
dGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogCiAgICAgW21haW5GcmFtZSBf
Y2xlYXJPcGVuZXJdOwogCkBAIC0xOTcwLDE5ICsxOTU0LDE5IEBAIHN0YXRpYyBOU1VSTCAqY29t
cHV0ZVRlc3RVUkwoTlNTdHJpbmcgKnAKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9w
dGlvbnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RS
OjpUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMg
PSBXVFI6OlRlc3RPcHRpb25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMs
IFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAg
IFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJG
b3JUZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIAog
ICAgIHJldHVybiBXVFI6OlRlc3RPcHRpb25zIHsgV1RGTW92ZShmZWF0dXJlcykgfTsKIH0KIAot
c3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKK3N0YXRpYyB2b2lk
IHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQoIWlu
cHV0TGluZS5lbXB0eSgpKTsKIAogICAgIGF1dG8gY29tbWFuZCA9IFdUUjo6cGFyc2VJbnB1dExp
bmUoaW5wdXRMaW5lKTsKLSAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0
aE9yVVJMOworICAgIGF1dG8gcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CiAgICAgZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IGR1bXBQ
aXhlbHNGb3JBbGxUZXN0czsKIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwpAQCAtMjAxNyw3
ICsyMDAxLDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAg
IGdUZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0
ZWRQaXhlbEhhc2gpOwogICAgIGdUZXN0UnVubmVyLT5zZXRBbGxvd2VkSG9zdHMoYWxsb3dlZEhv
c3RzKTsKICAgICBnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQu
bWlsbGlzZWNvbmRzKCkpOwotICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIpOworICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRT
dGF0ZShvcHRpb25zLCBSZXNldFRpbWU6OkJlZm9yZVRlc3QpOwogCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2aXNpb24gMjY4NzI3KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU3NiwxNCArNTc2LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVBhdXNlZChib29sIHBh
dXMKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFn
KQogewotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0
eWxlU2hlZXRFbmFibGVkOmZsYWddOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJl
bmNlc10gc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkOmZsYWddOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRiA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGF0aCkpOwogICAgIE5TVVJMICp1cmwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilwYXRoQ0YuZ2V0KCldOwotICAgIFtb
V2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbjp1cmxdOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0VXNl
clN0eWxlU2hlZXRMb2NhdGlvbjp1cmxdOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVl
Rm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0
cmluZ1JlZiB2YWx1ZSkKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJy
aWRlUHJlZmVyZW5jZShKU1N0CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGID0g
YWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2YWx1ZSkp
OwogICAgIE5TU3RyaW5nICp2YWx1ZU5TID0gKF9fYnJpZGdlIE5TU3RyaW5nICopdmFsdWVDRi5n
ZXQoKTsKIAotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gX3NldFBy
ZWZlcmVuY2VGb3JUZXN0V2l0aFZhbHVlOnZhbHVlTlMgZm9yS2V5OmtleU5TXTsKKyAgICBbW1tt
YWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIF9zZXRTdHJpbmdQcmVmZXJlbmNlRm9yVGVz
dGluZ1dpdGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKQEAgLTcwMCw3ICs3MDAsNyBAQCBib29sIFRlc3RS
dW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2Fj
aGVNb2RlbChpbnQgY2FjaGVNb2RlbCkKIHsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJk
UHJlZmVyZW5jZXNdIHNldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbF07Cisg
ICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOihXZWJD
YWNoZU1vZGVsKWNhY2hlTW9kZWxdOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVu
YWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURl
bGVnYXRlLm1tCShyZXZpc2lvbiAyNjg3MjcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCAtICh2b2lkKXJl
c2V0V2luZG93T3JpZ2luCiAKIC0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRl
c3Rpbmc6KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnMKIHsKLSAgICBtX2VuYWJsZURy
YWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0aW5hdGlvbkFj
dGlvbkxvYWQ7CisgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0gb3B0aW9u
cy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkKCk7CiB9CiAKIC0gKHZvaWQpd2ViVmll
dzooV2ViVmlldyAqKXNlbmRlciBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCkBAIC0xNzksNyArMTc5
LDggQEAgLSAoV2ViVmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgYwogICAgIEFTU0VS
VChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBj
cmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93KCk7Ci0gICAgCisgICAgW3dlYlZpZXcgc2V0
UHJlZmVyZW5jZXM6W3NlbmRlciBwcmVmZXJlbmNlc11dOworCiAgICAgaWYgKGdUZXN0UnVubmVy
LT5uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9h
ZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMjY4NzI3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTA2LDI4ICs5MDYsMzcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJl
bmNlc1RvQ29uc2lzdAogCiAgICAgcHJlZmVyZW5jZXMtPnNldEZvbnRTbW9vdGhpbmcoRm9udFNt
b290aGluZ1R5cGVTdGFuZGFyZCk7CiAKKyAgICBwcmVmc1ByaXZhdGUtPnNldFdlYlNRTEVuYWJs
ZWQodHJ1ZSk7CisKICAgICBwcmVmc1ByaXZhdGUtPnNldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxl
ZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPmNsZWFyTmV0d29ya0xvYWRlclNlc3Npb24oKTsK
IAogICAgIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOwogfQogCitzdGF0aWMgYm9vbCBi
b29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVs
dFZhbHVlLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gaXQg
PSBvcHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7CisgICAgaWYg
KGl0ICE9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgpKQorICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCiBzdGF0
aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyog
cHJlZmVyZW5jZXMsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgQ09N
UHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBRdWVyeSwgcHJlZmVy
ZW5jZXMgfTsKIAotICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChv
cHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRLZXln
ZW5FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIHByZWZz
UHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9u
c0VuYWJsZWQob3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOwotICAgIHByZWZzUHJp
dmF0ZS0+c2V0UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQob3B0aW9ucy5lbmFibGVSZXF1ZXN0
SWRsZUNhbGxiYWNrKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5h
YmxlZChvcHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJKTsKLSAgICBwcmVmc1ByaXZhdGUt
PnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ29udGFjdFBpY2tlckFQ
SSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKG9wdGlvbnMuZW5hYmxlV2Vi
U1FMKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMo
b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKLSAgICBwcmVmZXJlbmNlcy0+
c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pOwot
ICAgIHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5hYmxlQmFja0Zvcndh
cmRDYWNoZSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdF
bmFibGVkKG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nKTsKKyAgICBwcmVm
ZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNl
c3Npb24oKSk7CisgICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UsIG9wdGlvbnMp
KTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQoYm9vbFdl
YlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIktleWdlbkVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZCIsIHRydWUsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0
aW9uc0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0
aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVx
dWVzdElkbGVDYWxsYmFja0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJl
cXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1By
aXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVWYWx1ZSgiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAg
ICBwcmVmc1ByaXZhdGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJDb250YWN0UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25z
KSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
IiwgdHJ1ZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3Ro
U2Nyb2xsaW5nRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CiB9CiAKIHN0YXRpYyBT
dHJpbmcgYXBwbGljYXRpb25JZCgpCkBAIC05NzMsOSArOTgyLDkgQEAgc3RhdGljIHZvaWQgc2V0
SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAgICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsK
ICAgICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYg
KCFvcHRpb25zLmpzY09wdGlvbnMoKS5lbXB0eSgpKSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6
ZHVtcEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9u
czo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6
T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9
CiB9CiAKQEAgLTExNjgsNyArMTE3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUNvbnRyb2xDb21t
YW5kKGNvbnN0IGMKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0
KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpUZXN0RmVhdHVy
ZXMgZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBXVFI6OlRlc3RP
cHRpb25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6aGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdUUjo6bWVyZ2Uo
ZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1h
bmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIApAQCAtMTIyOSw3ICsx
MjM4LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAg
OjpnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLmRhdGEoKSwgY29tbWFu
ZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgOjpnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91
dChjb21tYW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwotICAgIDo6Z1Rlc3RSdW5uZXItPnNl
dER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgOjpnVGVzdFJ1bm5l
ci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgdG9w
TG9hZGluZ0ZyYW1lID0gbnVsbHB0cjsKICAgICBkb25lID0gZmFsc2U7Cg==
</data>
<flag name="commit-queue"
          id="428199"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411873</attachid>
            <date>2020-10-20 09:29:06 -0700</date>
            <delta_ts>2020-10-20 11:42:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020092905.patch</filename>
            <type>text/plain</type>
            <size>42452</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzkgQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3Q7CisgICAgYm9vbCBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZShz
dGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25zdDsKKyAgICBzdGQ6OnN0cmlu
ZyBzdHJpbmdUZXN0UnVubmVyRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJp
bmcgZGVmYXVsdFZhbHVlKSBjb25zdDsKKworICAgIFRlc3RGZWF0dXJlcyBtX2ZlYXR1cmVzOwog
fTsKIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQkocmV2aXNpb24gMjY4NzM2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOCArMTMwLDYgQEAgZXh0ZXJuICJDIiB7
CiAjaW1wb3J0IDxtYWNoLW8vZ2V0c2VjdC5oPgogfQogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwot
CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiBAaW50ZXJmYWNlIER1bXBSZW5kZXJUcmVlQXBw
bGljYXRpb24gOiBOU0FwcGxpY2F0aW9uCiBAZW5kCkBAIC0xNTIsNyArMTUwLDcgQEAgLSAodm9p
ZCl2aWV3OihVSVdlYkRvY3VtZW50VmlldyAqKXZpZXcgZAogICAgIEFTU0VSVChzY3JvbGxWaWV3
ICYmIFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJV2ViU2Nyb2xsVmlldyBjbGFzc11dKTsK
ICAgICBjb25zdCBDR1NpemUgc2Nyb2xsVmlld1NpemUgPSBbc2Nyb2xsVmlldyBib3VuZHNdLnNp
emU7CiAgICAgQ0dTaXplIGNvbnRlbnRTaXplID0gbmV3RnJhbWUuc2l6ZTsKLSAgICBjb250ZW50
U2l6ZS5oZWlnaHQgPSBDR1JvdW5kKG1heChDR1JlY3RHZXRNYXhZKG5ld0ZyYW1lKSwgc2Nyb2xs
Vmlld1NpemUuaGVpZ2h0KSk7CisgICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChzdGQ6
Om1heChDR1JlY3RHZXRNYXhZKG5ld0ZyYW1lKSwgc2Nyb2xsVmlld1NpemUuaGVpZ2h0KSk7CiAg
ICAgWyhVSVdlYlNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHNldENvbnRlbnRTaXplOmNvbnRlbnRT
aXplXTsKIH0KIEBlbmQKQEAgLTE3OCw3ICsxNzYsNyBAQCAtIChXZWJDb3JlOjpGcmFtZSopX21h
aW5Db3JlRnJhbWU7CiBAZW5kCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBz
dHJpbmcmIHRlc3RVUkwpOworc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdGQ6OnN0cmluZyYg
dGVzdFVSTCk7CiAKIC8vIERlY2lkaW5nIHdoZW4gaXQncyBPSyB0byBkdW1wIG91dCB0aGUgc3Rh
dGUgaXMgYSBiaXQgdHJpY2t5LiAgQWxsIHRoZXNlIG11c3QgYmUgdHJ1ZToKIC8vIC0gVGhlcmUg
aXMgbm8gbG9hZCBpbiBwcm9ncmVzcwpAQCAtMjQ5LDcgKzI0Nyw3IEBAIHZvaWQgc2V0UGVyc2lz
dGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24KICAgICBwZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRM
b2NhdGlvbiA9IHVybDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlV2ViQ29yZU5vZGVM
ZWFrcyhjb25zdCBzdHJpbmcmIHVybFN0cmluZykKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZVdl
YkNvcmVOb2RlTGVha3MoY29uc3Qgc3RkOjpzdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBzdGF0
aWMgY2hhciogY29uc3QgaWdub3JlU2V0W10gPSB7CiAgICAgICAgIC8vIEtlZXBpbmcgdGhpcyBp
bmZyYXN0cnVjdHVyZSBhcm91bmQgaW4gY2FzZSB3ZSBldmVyIG5lZWQgaXQgYWdhaW4uCkBAIC0y
NTgsNyArMjU2LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlV2ViQ29yZU5vZGVMZWFrcwog
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZ25vcmVTZXRDb3VudDsgaSsrKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBpZ25vcmUgY2FzZQotICAgICAgICBzdHJpbmcgY3VySWdub3JlKGlnbm9yZVNl
dFtpXSk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOwogICAg
ICAgICAvLyBNYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSB1cmxTdHJpbmcuCiAgICAgICAgIGlmICgh
dXJsU3RyaW5nLmNvbXBhcmUodXJsU3RyaW5nLmxlbmd0aCgpIC0gY3VySWdub3JlLmxlbmd0aCgp
LCBjdXJJZ25vcmUubGVuZ3RoKCksIGN1cklnbm9yZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTYxNiw4ICs2MTQsOCBAQCAtIChOU1JlY3QpcmVjdEZvclBhcnQ6KE5TU2Nyb2xsZXJQ
YXJ0KXBhCiAgICAgQk9PTCBpc0hvcml6b250YWwgPSBmcmFtZVJlY3Quc2l6ZS53aWR0aCA+IGZy
YW1lUmVjdC5zaXplLmhlaWdodDsKICAgICBDR0Zsb2F0IHRyYWNrTGVuZ3RoID0gaXNIb3Jpem9u
dGFsID8gYm91bmRzLnNpemUud2lkdGggOiBib3VuZHMuc2l6ZS5oZWlnaHQ7CiAgICAgQ0dGbG9h
dCBtaW5Lbm9iU2l6ZSA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLmhlaWdodCA6IGJvdW5k
cy5zaXplLndpZHRoOwotICAgIENHRmxvYXQga25vYkxlbmd0aCA9IG1heChtaW5Lbm9iU2l6ZSwg
c3RhdGljX2Nhc3Q8Q0dGbG9hdD4ocm91bmQodHJhY2tMZW5ndGggKiBbc2VsZiBrbm9iUHJvcG9y
dGlvbl0pKSk7Ci0gICAgQ0dGbG9hdCBrbm9iUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxDR0Zsb2F0
Pigocm91bmQoW3NlbGYgZG91YmxlVmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkp
KSk7CisgICAgQ0dGbG9hdCBrbm9iTGVuZ3RoID0gc3RkOjptYXgobWluS25vYlNpemUsIHN0YXRp
Y19jYXN0PENHRmxvYXQ+KHN0ZDo6cm91bmQodHJhY2tMZW5ndGggKiBbc2VsZiBrbm9iUHJvcG9y
dGlvbl0pKSk7CisgICAgQ0dGbG9hdCBrbm9iUG9zaXRpb24gPSBzdGF0aWNfY2FzdDxDR0Zsb2F0
Pigoc3RkOjpyb3VuZChbc2VsZiBkb3VibGVWYWx1ZV0gKiAodHJhY2tMZW5ndGggLSBrbm9iTGVu
Z3RoKSkpKTsKIAogICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAgIHJldHVybiBOU01ha2VS
ZWN0KGJvdW5kcy5vcmlnaW4ueCArIGtub2JQb3NpdGlvbiwgYm91bmRzLm9yaWdpbi55LCBrbm9i
TGVuZ3RoLCBib3VuZHMuc2l6ZS5oZWlnaHQpOwpAQCAtNjczLDYgKzY3MSwxMCBAQCBXZWJWaWV3
ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93CiAgICAgW3dlYlZpZXcgc2V0R3JvdXBO
YW1lOkAib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSJdOwogI2VuZGlmCiAKKyAgICBXZWJQcmVm
ZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbW1dlYlByZWZlcmVuY2VzIGFsbG9jXSBpbml0XTsKKyAg
ICBbcHJlZmVyZW5jZXMgc2V0QXV0b3NhdmVzOk5PXTsKKyAgICBbd2ViVmlldyBzZXRQcmVmZXJl
bmNlczpwcmVmZXJlbmNlc107CisKICAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOnVpRGVsZWdh
dGVdOwogICAgIFt3ZWJWaWV3IHNldEZyYW1lTG9hZERlbGVnYXRlOmZyYW1lTG9hZERlbGVnYXRl
XTsKICAgICBbd2ViVmlldyBzZXRFZGl0aW5nRGVsZWdhdGU6ZWRpdGluZ0RlbGVnYXRlXTsKQEAg
LTY4Niw4ICs2ODgsNiBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93
CiAgICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHMiXTsKICAgICBb
V2ViVmlldyByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWw6QCJmZWVkc2VhcmNoIl07CiAKLSAgICBb
W3dlYlZpZXcgcHJlZmVyZW5jZXNdIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNdOwotCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNldFdpbmRvd09jY2x1c2lvbkRldGVjdGlv
bkVuYWJsZWQ6Tk9dOwogICAgIFtXZWJWaWV3IF9zZXRGb250QWxsb3dMaXN0OmZvbnRBbGxvd0xp
c3QoKV07CkBAIC04MDksMzIgKzgwOSwzMSBAQCBzdGF0aWMgTlNTdHJpbmcgKmxpYnJhcnlQYXRo
Rm9yRHVtcFJlbmRlCiAgICAgICAgIHJldHVybiBbQCJ+L0xpYnJhcnkvQXBwbGljYXRpb24gU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZSIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07CiB9CiAK
LXN0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlByZWZlcmVuY2VzKiBw
cmVmZXJlbmNlcykKK3N0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlBy
ZWZlcmVuY2VzICpwcmVmZXJlbmNlcykKIHsKICAgICAvLyBGSVhNRTogU3ByaW5nVGltaW5nRnVu
Y3Rpb24KKyAgICAvLyBGSVhNRTogSW5wdXRFdmVudHMKICAgICBbcHJlZmVyZW5jZXMgc2V0R2Ft
ZXBhZHNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldEhpZ2hsaWdodEFQSUVuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0TGlua1ByZWxvYWRFbmFibGVkOllFU107CiAg
ICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhUHJlbG9hZGluZ0VuYWJsZWQ6WUVTXTsKLSAgICAvLyBG
SVhNRTogSW5wdXRFdmVudHMKICAgICBbcHJlZmVyZW5jZXMgc2V0RmV0Y2hBUElLZWVwQWxpdmVF
bmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVP
cGVyYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25z
TXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0
V2ViR0wyRW5hYmxlZDpZRVNdOwotICAgIC8vIEZJWE1FOiBBc3luY0ZyYW1lU2Nyb2xsaW5nRW5h
YmxlZAogICAgIFtwcmVmZXJlbmNlcyBzZXRDYWNoZUFQSUVuYWJsZWQ6Tk9dOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkOllFU107CiAgICAgW3ByZWZl
cmVuY2VzIHNldFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNl
cyBzZXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkOllFU107Ci0gICAgcHJlZmVyZW5jZXMuZW5j
cnlwdGVkTWVkaWFBUElFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRFbmNyeXB0
ZWRNZWRpYUFQSUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0QWNjZXNzaWJpbGl0
eU9iamVjdE1vZGVsRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBcmlhUmVmbGVj
dGlvbkVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VmlzdWFsVmlld3BvcnRBUElF
bmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNd
OwogICAgIFtwcmVmZXJlbmNlcyBzZXRTZXJ2ZXJUaW1pbmdFbmFibGVkOllFU107CiAgICAgW3By
ZWZlcmVuY2VzIHNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDpZRVNdOwotICAgIHByZWZl
cmVuY2VzLnNvdXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJl
bmNlcyBzZXRTb3VyY2VCdWZmZXJDaGFuZ2VUeXBlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJl
bmNlcyBzZXRDU1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVu
Y2VzIHNldE1lZGlhUmVjb3JkZXJFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFJl
ZmVycmVyUG9saWN5QXR0cmlidXRlRW5hYmxlZDpZRVNdOwpAQCAtODUwLDkgKzg0OSw4IEBAIHN0
YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFcKIH0KIAogLy8gQ2FsbGVkIGJl
Zm9yZSBlYWNoIHRlc3QuCi1zdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0
ZW50VmFsdWVzKCkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRW
YWx1ZXMoV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzKQogewotICAgIFdlYlByZWZlcmVuY2Vz
ICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKICAg
ICBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBbcHJlZmVy
ZW5jZXMgc2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcms6IE5PXTsKQEAgLTg3
MiwyMSArODcwLDExIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3QK
ICAgICBbcHJlZmVyZW5jZXMgc2V0SmF2YUVuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBz
ZXRKYXZhU2NyaXB0RW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRFZGl0YWJsZUxp
bmtCZWhhdmlvcjpXZWJLaXRFZGl0YWJsZUxpbmtPbmx5TGl2ZVdpdGhTaGlmdEtleV07Ci0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgW3ByZWZlcmVuY2VzIHNldFRhYnNUb0xpbmtzOk5P
XTsKLSNlbmRpZgogICAgIFtwcmVmZXJlbmNlcyBzZXRET01QYXN0ZUFsbG93ZWQ6WUVTXTsKLSNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBbcHJlZmVyZW5jZXMgc2V0U2hvdWxkUHJpbnRC
YWNrZ3JvdW5kczpZRVNdOwotI2VuZGlmCiAgICAgW3ByZWZlcmVuY2VzIHNldENhY2hlTW9kZWw6
V2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nlcl07CiAgICAgW3ByZWZlcmVuY2VzIHNldFhTU0F1
ZGl0b3JFbmFibGVkOk5PXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0RXhwZXJpbWVudGFsTm90aWZp
Y2F0aW9uc0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRQbHVnSW5zRW5hYmxlZDpZ
RVNdOwotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFtwcmVmZXJlbmNlcyBzZXRUZXh0
QXJlYXNBcmVSZXNpemFibGU6WUVTXTsKLSNlbmRpZgotCiAgICAgW3ByZWZlcmVuY2VzIHNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRTaHJpbmtzU3RhbmRh
bG9uZUltYWdlc1RvRml0OllFU107CkBAIC05MDEsMTMgKzg4OSw3IEBAIHN0YXRpYyB2b2lkIHJl
c2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3QKICAgICBbcHJlZmVyZW5jZXMgc2V0QXN5bmNGcmFt
ZVNjcm9sbGluZ0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRTcGF0aWFsTmF2aWdh
dGlvbkVuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRNZXRhUmVmcmVzaEVuYWJsZWQ6
WUVTXTsKLQotICAgIGlmIChwZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbikgewotICAg
ICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbjpbTlNVUkwgVVJMV2l0
aFN0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilwZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbi5nZXQoKV1dOwotICAgICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkOllFU107Ci0gICAgfSBlbHNlCi0gICAgICAgIFtwcmVmZXJlbmNlcyBzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQ6Tk9dOwotCisgICAgW3ByZWZlcmVuY2VzIHNldElubGluZU1lZGlhUGxheWJh
Y2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlOk5PXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0
TWVkaWFQbGF5YmFja0FsbG93c0lubGluZTpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRp
YVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZTpOT107CiAgICAgW3ByZWZlcmVuY2VzIHNldFZp
ZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOk5PXTsKQEAgLTkxNSw5MiArODk3LDkzIEBA
IHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3QKICAgICBbcHJlZmVyZW5j
ZXMgc2V0TWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5OllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldEludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVkOk5PXTsKICAgICBbcHJlZmVyZW5jZXMg
c2V0U3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQ6Tk9dOwotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBFbmFibGUgdGhlIHRyYWNrZXIgYmVmb3JlIGNyZWF0aW5n
IHRoZSBmaXJzdCBXZWJWaWV3IHdpbGwKLSAgICAvLyBjYXVzZSBpbml0aWFsaXphdGlvbiB0byB1
c2UgdGhlIGNvcnJlY3QgZGF0YWJhc2UgcGF0aHMuCi0gICAgW3ByZWZlcmVuY2VzIHNldFN0b3Jh
Z2VUcmFja2VyRW5hYmxlZDpZRVNdOwotI2VuZGlmCi0KICAgICBbcHJlZmVyZW5jZXMgX3NldFRl
eHRBdXRvc2l6aW5nRW5hYmxlZDpOT107Ci0KLSAgICAvLyBUaGUgYmFjay9mb3J3YXJkIGNhY2hl
IGlzIGNhdXNpbmcgcHJvYmxlbXMgZHVlIHRvIGxheW91dHMgZHVyaW5nIHRyYW5zaXRpb24gZnJv
bSBvbmUgcGFnZSB0byBhbm90aGVyLgotICAgIC8vIFNvLCB0dXJuIGl0IG9mZiBmb3Igbm93LCBi
dXQgd2UgbWlnaHQgd2FudCB0byB0dXJuIGl0IGJhY2sgb24gc29tZSBkYXkuCiAgICAgW3ByZWZl
cmVuY2VzIHNldFVzZXNQYWdlQ2FjaGU6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZDpZRVNdOwotI2lmIFVTRShDQSkKLSAgICBbcHJlZmVyZW5j
ZXMgc2V0Q2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZzpZRVNdOwotICAgIFtwcmVmZXJlbmNl
cyBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOnVzZUFjY2VsZXJhdGVkRHJhd2luZ107Ci0j
ZW5kaWYKICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3M6Tk9dOwog
ICAgIFtwcmVmZXJlbmNlcyBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDpOT107
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQVNTRVJUKFtwcmVmZXJlbmNlcyBtb2Nr
U2Nyb2xsYmFyc0VuYWJsZWRdKTsKLSNlbmRpZgotCisgICAgW3ByZWZlcmVuY2VzIHNldE1vY2tT
Y3JvbGxiYXJzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBdWRpb0VuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0TW9kZXJuVW5wcmVmaXhlZFdlYkF1ZGlvRW5h
YmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYVNvdXJjZUVuYWJsZWQ6WUVTXTsK
ICAgICBbcHJlZmVyZW5jZXMgc2V0U291cmNlQnVmZmVyQ2hhbmdlVHlwZUVuYWJsZWQ6WUVTXTsK
LQogICAgIFtwcmVmZXJlbmNlcyBzZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJsZWQ6WUVTXTsKICAg
ICBbcHJlZmVyZW5jZXMgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOllFU107CiAgICAg
W3ByZWZlcmVuY2VzIHNldERpYWxvZ0VsZW1lbnRFbmFibGVkOllFU107Ci0KICAgICBbcHJlZmVy
ZW5jZXMgc2V0V2ViR0wyRW5hYmxlZDpZRVNdOwotCiAgICAgW3ByZWZlcmVuY2VzIHNldERvd25s
b2FkQXR0cmlidXRlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXREaXJlY3RvcnlV
cGxvYWRFbmFibGVkOllFU107Ci0KICAgICBbcHJlZmVyZW5jZXMgc2V0SGlkZGVuUGFnZURPTVRp
bWVyVGhyb3R0bGluZ0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRIaWRkZW5QYWdl
Q1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRS
ZW1vdGVQbGF5YmFja0VuYWJsZWQ6WUVTXTsKLQogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYURl
dmljZXNFbmFibGVkOllFU107Ci0KICAgICBbcHJlZmVyZW5jZXMgc2V0TGFyZ2VJbWFnZUFzeW5j
RGVjb2RpbmdFbmFibGVkOk5PXTsKLQogICAgIFtwcmVmZXJlbmNlcyBzZXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZDpZRVNdOworICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYUNhcGFiaWxpdGll
c0VuYWJsZWQ6WUVTXTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0U2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllc0VuYWJsZWQ6WUVTXTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0RnVsbFNjcmVlbkVu
YWJsZWQ6WUVTXTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0V2ViU1FMRW5hYmxlZDpZRVNdOwogCi0g
ICAgW3ByZWZlcmVuY2VzIHNldENhY2hlQVBJRW5hYmxlZDpOT107Ci0gICAgcHJlZmVyZW5jZXMu
bWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkID0gWUVTOworICAgIGlmIChwZXJzaXN0ZW50VXNlclN0
eWxlU2hlZXRMb2NhdGlvbikgeworICAgICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbjpbTlNVUkwgVVJMV2l0aFN0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilwZXJz
aXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKV1dOworICAgICAgICBbcHJlZmVyZW5j
ZXMgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkOllFU107CisgICAgfSBlbHNlCisgICAgICAgIFtw
cmVmZXJlbmNlcyBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQ6Tk9dOwogCi0gICAgcHJlZmVyZW5j
ZXMuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBZRVM7CisjaWYgVVNF
KENBKQorICAgIFtwcmVmZXJlbmNlcyBzZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nOllF
U107CisgICAgW3ByZWZlcmVuY2VzIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ6dXNlQWNj
ZWxlcmF0ZWREcmF3aW5nXTsKKyNlbmRpZgogCi0gICAgW3ByZWZlcmVuY2VzIHNldFdlYlNRTEVu
YWJsZWQ6WUVTXTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIEVuYWJsZSB0aGUg
dHJhY2tlciBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IFdlYlZpZXcgd2lsbAorICAgIC8vIGNh
dXNlIGluaXRpYWxpemF0aW9uIHRvIHVzZSB0aGUgY29ycmVjdCBkYXRhYmFzZSBwYXRocy4KKyAg
ICBbcHJlZmVyZW5jZXMgc2V0U3RvcmFnZVRyYWNrZXJFbmFibGVkOllFU107CisjZWxzZQorICAg
IFtwcmVmZXJlbmNlcyBzZXRUYWJzVG9MaW5rczpOT107CisgICAgW3ByZWZlcmVuY2VzIHNldFNo
b3VsZFByaW50QmFja2dyb3VuZHM6WUVTXTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0VGV4dEFyZWFz
QXJlUmVzaXphYmxlOllFU107CisjZW5kaWYKIAogICAgIFtXZWJQcmVmZXJlbmNlcyBfY2xlYXJO
ZXR3b3JrTG9hZGVyU2Vzc2lvbl07CiAgICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0
d29ya0xvYWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6TlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW5dOwogfQogCi1zdGF0aWMgdm9pZCBzZXRXZWJQ
cmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMp
CitzdGF0aWMgYm9vbCBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBr
ZXksIGJvb2wgZGVmYXVsdFZhbHVlLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFu
ZGFyZFByZWZlcmVuY2VzXTsKLQotICAgIHByZWZlcmVuY2VzLmF0dGFjaG1lbnRFbGVtZW50RW5h
YmxlZCA9IG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5jZXMu
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQWNjZWxlcmF0ZWREcmF3
aW5nOwotICAgIHByZWZlcmVuY2VzLm1lbnVJdGVtRWxlbWVudEVuYWJsZWQgPSBvcHRpb25zLmVu
YWJsZU1lbnVJdGVtRWxlbWVudDsKLSAgICBwcmVmZXJlbmNlcy5rZXlnZW5FbGVtZW50RW5hYmxl
ZCA9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudDsKLSAgICBwcmVmZXJlbmNlcy5tb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9sczsK
LSAgICBwcmVmZXJlbmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gb3B0aW9ucy5lbmFi
bGVJbnNwZWN0b3JBZGRpdGlvbnM7Ci0gICAgcHJlZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5T
dWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzOwotICAgIHByZWZlcmVuY2VzLmNvbG9yRmls
dGVyRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXI7Ci0gICAgcHJlZmVyZW5jZXMu
c2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNl
bGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXM7Ci0gICAgcHJlZmVyZW5jZXMud2ViR1BVRW5h
YmxlZCA9IG9wdGlvbnMuZW5hYmxlV2ViR1BVOwotICAgIHByZWZlcmVuY2VzLkNTU0xvZ2ljYWxF
bmFibGVkID0gb3B0aW9ucy5lbmFibGVDU1NMb2dpY2FsOwotICAgIHByZWZlcmVuY2VzLmxpbmVI
ZWlnaHRVbml0c0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUxpbmVIZWlnaHRVbml0czsKLSAgICBw
cmVmZXJlbmNlcy5hZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gb3B0aW9ucy5hZENsaWNrQXR0
cmlidXRpb25FbmFibGVkOwotICAgIHByZWZlcmVuY2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9
IG9wdGlvbnMuZW5hYmxlUmVzaXplT2JzZXJ2ZXI7Ci0gICAgcHJlZmVyZW5jZXMuQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Ny
b2xsaW5nOwotICAgIHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVkID0gb3B0aW9ucy5lbmFi
bGVDb3JlTWF0aE1MOwotICAgIHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVk
ID0gb3B0aW9ucy5lbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrOwotICAgIHByZWZlcmVuY2VzLmFz
eW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEk7
Ci0gICAgcHJlZmVyZW5jZXMucHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IG9wdGlvbnMudXNlRXBo
ZW1lcmFsU2Vzc2lvbjsKLSAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNhY2hlID0gb3B0aW9ucy5l
bmFibGVCYWNrRm9yd2FyZENhY2hlOwotICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdD
b250ZXh0SW50ZWdyYXRpb25FbmFibGVkID0gb3B0aW9ucy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZDsKLSAgICBwcmVmZXJlbmNlcy5hc3BlY3RSYXRpb09mSW1nRnJv
bVdpZHRoQW5kSGVpZ2h0RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zy
b21XaWR0aEFuZEhlaWdodDsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzID0gb3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOwotICAgIHByZWZl
cmVuY2VzLmNvbnRhY3RQaWNrZXJBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb250YWN0UGlj
a2VyQVBJOworICAgIGF1dG8gaXQgPSBvcHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMo
KS5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcygpLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVm
YXVsdFZhbHVlOworfQorCitzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRp
b25zKFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcywgY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0
aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisKKyAgICBwcmVmZXJlbmNlcy5hdHRhY2htZW50
RWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNl
cy5tZW51SXRlbUVsZW1lbnRFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUo
Ik1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMua2V5Z2VuRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgi
S2V5Z2VuRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMu
bW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1
ZSgiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7Cisg
ICAgcHJlZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVu
dGlhbHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJl
ZmVyZW5jZXMuY29sb3JGaWx0ZXJFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFs
dWUoIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNl
cy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIs
IHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJsZWQgPSBib29sV2Vi
UHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiV2ViR1BVRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5DU1NMb2dpY2FsRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJDU1NMb2dpY2FsRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5saW5lSGVpZ2h0VW5pdHNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
VmFsdWUoIkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJl
ZmVyZW5jZXMuYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJBZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNl
RmVhdHVyZVZhbHVlKCJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7Cisg
ICAgcHJlZmVyZW5jZXMuQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCA9IGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwg
ZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVkID0gYm9v
bFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNvcmVNYXRoTUxFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpOworICAgIHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkID0gYm9v
bFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwg
ZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxl
ZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBc3luY0NsaXBib2FyZEFQSUVuYWJs
ZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9IGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNl
LCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVn
cmF0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJMYXlvdXRGb3Jt
YXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLmFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gYm9v
bFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRI
ZWlnaHRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxs
b3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVu
Y2VzLmNvbnRhY3RQaWNrZXJBUElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFs
dWUoIkNvbnRhY3RQaWNrZXJBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwogfQogCiAvLyBD
YWxsZWQgb25jZSBvbiBEdW1wUmVuZGVyVHJlZSBzdGFydHVwLgpAQCAtMTAyNCw5ICsxMDA3LDYg
QEAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZQogICAgICAgICBAIkFw
cGxlT3RoZXJIaWdobGlnaHRDb2xvciI6QCIwLjUwMDAwMCAwLjUwMDAwMCAwLjUwMDAwMCIsCiAg
ICAgICAgIEAiQXBwbGVMYW5ndWFnZXMiOiBAWyBAImVuIiBdLAogICAgICAgICBXZWJLaXRFbmFi
bGVGdWxsRG9jdW1lbnRUZWFyZG93blByZWZlcmVuY2VLZXk6IEBZRVMsCi0gICAgICAgIFdlYktp
dEZ1bGxTY3JlZW5FbmFibGVkUHJlZmVyZW5jZUtleTogQFlFUywKLSAgICAgICAgV2ViS2l0QWxs
b3dzSW5saW5lTWVkaWFQbGF5YmFja1ByZWZlcmVuY2VLZXk6IEBZRVMsCi0gICAgICAgIFdlYktp
dElubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlS2V5OiBATk8s
CiAgICAgICAgIEAiVXNlV2ViS2l0V2ViSW5zcGVjdG9yIjogQFlFUywKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAgICAgQCJOU1ByZWZlcnJlZFNwZWxsU2VydmVyTGFuZ3VhZ2UiOiBA
ImVuX1VTIiwKQEAgLTE0MzcsNyArMTQxNyw3IEBAIHN0YXRpYyBOU0ludGVnZXIgY29tcGFyZUhp
c3RvcnlJdGVtcyhpZCAKIAogc3RhdGljIE5TRGF0YSAqZHVtcEF1ZGlvKCkKIHsKLSAgICBjb25z
dCB2ZWN0b3I8Y2hhcj4mIGRhdGFWZWN0b3IgPSBnVGVzdFJ1bm5lci0+YXVkaW9SZXN1bHQoKTsK
KyAgICBjb25zdCBhdXRvJiBkYXRhVmVjdG9yID0gZ1Rlc3RSdW5uZXItPmF1ZGlvUmVzdWx0KCk7
CiAKICAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YVZlY3Rvci5k
YXRhKCkgbGVuZ3RoOmRhdGFWZWN0b3Iuc2l6ZSgpXTsKICAgICByZXR1cm4gZGF0YTsKQEAgLTE2
MzMsNyArMTYxMyw3IEBAIHN0YXRpYyB2b2lkIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRlc3QoKQog
ICAgIFt1aURlbGVnYXRlIHJlc2V0V2luZG93T3JpZ2luXTsKIAogICAgIC8vIFczQyBTVkcgdGVz
dHMgZXhwZWN0IHRvIGJlIDQ4MHgzNjAKLSAgICBib29sIGlzU1ZHVzNDVGVzdCA9IChnVGVzdFJ1
bm5lci0+dGVzdFVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0cmluZzo6bnBvcyk7
CisgICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RVUkwoKS5maW5kKCJz
dmcvVzNDLVNWRy0xLjEiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CiAgICAgTlNTaXplIGZyYW1l
U2l6ZSA9IGlzU1ZHVzNDVGVzdCA/IE5TTWFrZVNpemUoVGVzdFJ1bm5lcjo6dzNjU1ZHVmlld1dp
ZHRoLCBUZXN0UnVubmVyOjp3M2NTVkdWaWV3SGVpZ2h0KSA6IE5TTWFrZVNpemUoVGVzdFJ1bm5l
cjo6dmlld1dpZHRoLCBUZXN0UnVubmVyOjp2aWV3SGVpZ2h0KTsKICAgICBbW21haW5GcmFtZSB3
ZWJWaWV3XSBzZXRGcmFtZVNpemU6ZnJhbWVTaXplXTsKICAgICBbW21haW5GcmFtZSBmcmFtZVZp
ZXddIHNldEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgZnJhbWVTaXplLndpZHRoLCBmcmFtZVNpemUu
aGVpZ2h0KV07CkBAIC0xODMyLDkgKzE4MTIsOSBAQCBzdGF0aWMgdm9pZCBzZXRKU0NPcHRpb25z
KGNvbnN0IFdUUjo6VGVzCiAgICAgICAgIHNhdmVkT3B0aW9ucy5jbGVhcigpOwogICAgIH0KIAot
ICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpIHsKKyAgICBpZiAoIW9wdGlvbnMu
anNjT3B0aW9ucygpLmVtcHR5KCkpIHsKICAgICAgICAgSlNDOjpPcHRpb25zOjpkdW1wQWxsT3B0
aW9uc0luQUxpbmUoc2F2ZWRPcHRpb25zKTsKLSAgICAgICAgSlNDOjpPcHRpb25zOjpzZXRPcHRp
b25zKG9wdGlvbnMuanNjT3B0aW9ucy5jX3N0cigpKTsKKyAgICAgICAgSlNDOjpPcHRpb25zOjpz
ZXRPcHRpb25zKG9wdGlvbnMuanNjT3B0aW9ucygpLmNfc3RyKCkpOwogICAgIH0KIH0KIApAQCAt
MTg0NSw2ICsxODI1LDEwIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0
YXQKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOwogCisgICAg
V2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1tXZWJQcmVmZXJlbmNlcyBhbGxvY10gaW5p
dF07CisgICAgW3ByZWZlcmVuY2VzIHNldEF1dG9zYXZlczpOT107CisgICAgW3dlYlZpZXcgc2V0
UHJlZmVyZW5jZXM6cHJlZmVyZW5jZXNdOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBhZGp1c3RXZWJEb2N1bWVudEZvclN0YW5kYXJkVmlld3BvcnQoZ1dlYkJyb3dzZXJWaWV3LCBn
V2ViU2Nyb2xsVmlldyk7CiAgICAgW3dlYlZpZXcgX3NldEFsbG93c01lc3NhZ2luZzpZRVNdOwpA
QCAtMTg3MywxMCArMTg1NywxMCBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3Rl
bnRTdGF0CiAKICAgICBbV2ViQ2FjaGUgY2xlYXJDYWNoZWRDcmVkZW50aWFsc107CiAKLSAgICBy
ZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7Ci0gICAgc2V0V2ViUHJlZmVy
ZW5jZXNGb3JUZXN0T3B0aW9ucyhvcHRpb25zKTsKKyAgICByZXNldFdlYlByZWZlcmVuY2VzVG9D
b25zaXN0ZW50VmFsdWVzKHByZWZlcmVuY2VzKTsKKyAgICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRl
c3RPcHRpb25zKHByZWZlcmVuY2VzLCBvcHRpb25zKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAg
W3dlYlZpZXcgc2V0V2FudHNMYXllcjpvcHRpb25zLmxheWVyQmFja2VkV2ViVmlld107CisgICAg
W3dlYlZpZXcgc2V0V2FudHNMYXllcjpvcHRpb25zLmxheWVyQmFja2VkV2ViVmlldygpXTsKICNl
bmRpZgogCiAgICAgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGZhbHNlKTsKQEAg
LTE5MjAsNyArMTkwNCw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0
YXQKICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gZGVjbGFyZVR5cGVzOkBb
TlNTdHJpbmdQYm9hcmRUeXBlXSBvd25lcjpuaWxdOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRp
b25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVU
ZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9w
dGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKIAogICAgIFtt
YWluRnJhbWUgX2NsZWFyT3BlbmVyXTsKIApAQCAtMTk3NiwxOSArMTk2MCwxOSBAQCBzdGF0aWMg
TlNVUkwgKmNvbXB1dGVUZXN0VVJMKE5TU3RyaW5nICpwCiAKIHN0YXRpYyBXVFI6OlRlc3RPcHRp
b25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQog
ewotICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIFdUUjo6VGVzdEZlYXR1cmVz
IGZlYXR1cmVzID0gV1RSOjpUZXN0T3B0aW9uczo6ZGVmYXVsdHMoKTsKICAgICBXVFI6Om1lcmdl
KGZlYXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1h
bmQpKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21U
ZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBXVFI6OlRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGlu
ZygpKSk7CiAKICAgICByZXR1cm4gV1RSOjpUZXN0T3B0aW9ucyB7IFdURk1vdmUoZmVhdHVyZXMp
IH07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCitz
dGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAg
QVNTRVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7CiAKICAgICBhdXRvIGNvbW1hbmQgPSBXVFI6OnBh
cnNlSW5wdXRMaW5lKGlucHV0TGluZSk7Ci0gICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBj
b21tYW5kLnBhdGhPclVSTDsKKyAgICBhdXRvIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJM
OwogICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVs
cyB8fCBkdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAKICAgICBOU1N0cmluZyAqcGF0aE9yVVJMU3Ry
aW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnBhdGhPclVSTC5jX3N0cigpXTsK
QEAgLTIwMjMsNyArMjAwNyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBp
bnB1dEwKICAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21t
YW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBnVGVzdFJ1bm5lci0+c2V0QWxsb3dlZEhvc3Rz
KGFsbG93ZWRIb3N0cyk7CiAgICAgZ1Rlc3RSdW5uZXItPnNldEN1c3RvbVRpbWVvdXQoY29tbWFu
ZC50aW1lb3V0Lm1pbGxpc2Vjb25kcygpKTsKLSAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlv
bnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgcmVzZXRXZWJWaWV3VG9D
b25zaXN0ZW50U3RhdGUob3B0aW9ucywgUmVzZXRUaW1lOjpCZWZvcmVUZXN0KTsKIApJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHJldmlzaW9uIDI2ODcz
NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NzYsMTQgKzU3NiwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VQYXVz
ZWQoYm9vbCBwYXVzCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVk
KGJvb2wgZmxhZykKIHsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNd
IHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gcHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgp
CiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoQ0YgPSBhZG9wdENGKEpTU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGgpKTsKICAgICBOU1VSTCAqdXJs
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6KF9fYnJpZGdlIE5TU3RyaW5nICopcGF0aENGLmdldCgp
XTsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb246dXJsXTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb246dXJsXTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCkBAIC02MDksNyArNjA5LDcgQEAgdm9pZCBUZXN0UnVu
bmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dmFsdWVDRiA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdmFsdWUpKTsKICAgICBOU1N0cmluZyAqdmFsdWVOUyA9IChfX2JyaWRnZSBOU1N0cmluZyAq
KXZhbHVlQ0YuZ2V0KCk7CiAKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5j
ZXNdIF9zZXRQcmVmZXJlbmNlRm9yVGVzdFdpdGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107
CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZv
clRlc3RXaXRoVmFsdWU6dmFsdWVOUyBmb3JLZXk6a2V5TlNdOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCkBAIC03MDAsNyArNzAwLDcgQEAgYm9vbCBUZXN0
UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZgogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENh
Y2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCiB7Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFy
ZFByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWxdOwor
ICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0Q2FjaGVNb2RlbDooV2Vi
Q2FjaGVNb2RlbCljYWNoZU1vZGVsXTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRF
bmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlE
ZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY4NzM2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgLSAodm9pZCly
ZXNldFdpbmRvd09yaWdpbgogCiAtICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVU
ZXN0aW5nOihjb25zdCBXVFI6OlRlc3RPcHRpb25zJilvcHRpb25zCiB7Ci0gICAgbV9lbmFibGVE
cmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0gb3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25B
Y3Rpb25Mb2FkOworICAgIG1fZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IG9wdGlv
bnMuZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCgpOwogfQogCiAtICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKilzZW5kZXIgc2V0RnJhbWU6KE5TUmVjdClmcmFtZQpAQCAtMTc5LDcgKzE3
OSw4IEBAIC0gKFdlYlZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGMKICAgICBBU1NF
UlQoZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSk7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0g
Y3JlYXRlV2ViVmlld0FuZE9mZnNjcmVlbldpbmRvdygpOwotICAgIAorICAgIFt3ZWJWaWV3IHNl
dFByZWZlcmVuY2VzOltzZW5kZXIgcHJlZmVyZW5jZXNdXTsKKwogICAgIGlmIChnVGVzdFJ1bm5l
ci0+bmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3QoKSkKICAgICAgICAgW3dlYlZpZXcgX2xv
YWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJWaWV3OnNlbmRlcl07CiAgICAgCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDI2ODcz
NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwNiwyOCArOTA2LDM3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVy
ZW5jZXNUb0NvbnNpc3QKIAogICAgIHByZWZlcmVuY2VzLT5zZXRGb250U21vb3RoaW5nKEZvbnRT
bW9vdGhpbmdUeXBlU3RhbmRhcmQpOwogCisgICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFi
bGVkKHRydWUpOworCiAgICAgcHJlZnNQcml2YXRlLT5zZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJs
ZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uKCk7
CiAKICAgICBzZXRBbHdheXNBY2NlcHRDb29raWVzKGZhbHNlKTsKIH0KIAorc3RhdGljIGJvb2wg
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSwgY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGl0
ID0gb3B0aW9ucy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkuZmluZChrZXkpOworICAgIGlm
IChpdCAhPSBvcHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKwogc3Rh
dGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVyZW5jZXMq
IHByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewogICAgIENP
TVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlOD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZl
cmVuY2VzIH07CiAKLSAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
b3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5
Z2VuRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKLSAgICBwcmVm
c1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5hYmxlTW9k
ZXJuTWVkaWFDb250cm9scyk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRpdGlv
bnNFbmFibGVkKG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKLSAgICBwcmVmc1By
aXZhdGUtPnNldFJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkKG9wdGlvbnMuZW5hYmxlUmVxdWVz
dElkbGVDYWxsYmFjayk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRBc3luY0NsaXBib2FyZEFQSUVu
YWJsZWQob3B0aW9ucy5lbmFibGVBc3luY0NsaXBib2FyZEFQSSk7Ci0gICAgcHJlZnNQcml2YXRl
LT5zZXRDb250YWN0UGlja2VyQVBJRW5hYmxlZChvcHRpb25zLmVuYWJsZUNvbnRhY3RQaWNrZXJB
UEkpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViU1FMRW5hYmxlZChvcHRpb25zLmVuYWJsZVdl
YlNRTCk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
KG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7Ci0gICAgcHJlZmVyZW5jZXMt
PnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKTsK
LSAgICBwcmVmZXJlbmNlcy0+c2V0VXNlc1BhZ2VDYWNoZShvcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5n
RW5hYmxlZChvcHRpb25zLmVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGluZyk7CisgICAgcHJl
ZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQob3B0aW9ucy51c2VFcGhlbWVyYWxT
ZXNzaW9uKCkpOworICAgIHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKGJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlLCBvcHRpb25z
KSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEtleWdlbkVsZW1lbnRFbmFibGVkKGJvb2xX
ZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBv
cHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQiLCB0cnVlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRp
dGlvbnNFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJJbnNwZWN0b3JBZGRp
dGlvbnNFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldFJl
cXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJS
ZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQ
cml2YXRlLT5zZXRBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7Cisg
ICAgcHJlZnNQcml2YXRlLT5zZXRDb250YWN0UGlja2VyQVBJRW5hYmxlZChib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9u
cykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyhi
b29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJM
cyIsIHRydWUsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Ntb290
aFNjcm9sbGluZ0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmll
d1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOwogfQogCiBzdGF0aWMg
U3RyaW5nIGFwcGxpY2F0aW9uSWQoKQpAQCAtOTczLDkgKzk4Miw5IEBAIHN0YXRpYyB2b2lkIHNl
dEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXMKICAgICAgICAgc2F2ZWRPcHRpb25zLmNsZWFyKCk7
CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgeworICAgIGlm
ICghb3B0aW9ucy5qc2NPcHRpb25zKCkuZW1wdHkoKSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6
OmR1bXBBbGxPcHRpb25zSW5BTGluZShzYXZlZE9wdGlvbnMpOwotICAgICAgICBKU0M6Ok9wdGlv
bnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgICAgICBKU0M6
Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zKCkuY19zdHIoKSk7CiAgICAg
fQogfQogCkBAIC0xMTY4LDcgKzExNzcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29t
bWFuZChjb25zdCBjCiAKIHN0YXRpYyBXVFI6OlRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVz
dChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQogewotICAgIFdUUjo6VGVzdEZlYXR1
cmVzIGZlYXR1cmVzOworICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gV1RSOjpUZXN0
T3B0aW9uczo6ZGVmYXVsdHMoKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmhhcmRj
b2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBXVFI6Om1lcmdl
KGZlYXR1cmVzLCBXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21t
YW5kLCBXVFI6OlRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CiAKQEAgLTEyMjksNyAr
MTIzOCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAg
IDo6Z1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTC5kYXRhKCksIGNvbW1h
bmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIDo6Z1Rlc3RSdW5uZXItPnNldEN1c3RvbVRpbWVv
dXQoY29tbWFuZC50aW1lb3V0Lm1pbGxpc2Vjb25kcygpKTsKLSAgICA6OmdUZXN0UnVubmVyLT5z
ZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIDo6Z1Rlc3RSdW5u
ZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAgIHRv
cExvYWRpbmdGcmFtZSA9IG51bGxwdHI7CiAgICAgZG9uZSA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411893</attachid>
            <date>2020-10-20 11:42:06 -0700</date>
            <delta_ts>2020-10-20 12:15:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020114205.patch</filename>
            <type>text/plain</type>
            <size>31003</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzggQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisK
KyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDggKzEzMCw2IEBAIGV4dGVybiAiQyIgewogI2ltcG9ydCA8bWFjaC1vL2dldHNlY3Qu
aD4KIH0KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogQGludGVyZmFjZSBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uIDogTlNBcHBsaWNhdGlvbgog
QGVuZApAQCAtMTUyLDcgKzE1MCw3IEBAIC0gKHZvaWQpdmlldzooVUlXZWJEb2N1bWVudFZpZXcg
Kil2aWV3IGQKICAgICBBU1NFUlQoc2Nyb2xsVmlldyAmJiBbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVdlYlNjcm9sbFZpZXcgY2xhc3NdXSk7CiAgICAgY29uc3QgQ0dTaXplIHNjcm9sbFZp
ZXdTaXplID0gW3Njcm9sbFZpZXcgYm91bmRzXS5zaXplOwogICAgIENHU2l6ZSBjb250ZW50U2l6
ZSA9IG5ld0ZyYW1lLnNpemU7Ci0gICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChtYXgo
Q0dSZWN0R2V0TWF4WShuZXdGcmFtZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworICAgIGNv
bnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQoc3RkOjptYXgoQ0dSZWN0R2V0TWF4WShuZXdGcmFt
ZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwogICAgIFsoVUlXZWJTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyBzZXRDb250ZW50U2l6ZTpjb250ZW50U2l6ZV07CiB9CiBAZW5kCkBAIC0xNzgsNyAr
MTc2LDcgQEAgLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOwogQGVuZAogI2VuZGlm
CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RVUkwpOwogCiAvLyBEZWNpZGluZyB3
aGVuIGl0J3MgT0sgdG8gZHVtcCBvdXQgdGhlIHN0YXRlIGlzIGEgYml0IHRyaWNreS4gIEFsbCB0
aGVzZSBtdXN0IGJlIHRydWU6CiAvLyAtIFRoZXJlIGlzIG5vIGxvYWQgaW4gcHJvZ3Jlc3MKQEAg
LTI0OSw3ICsyNDcsNyBAQCB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
CiAgICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiB1cmxTdHJp
bmcpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNoYXIqIGNvbnN0IGlnbm9yZVNldFtd
ID0gewogICAgICAgICAvLyBLZWVwaW5nIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGluIGNh
c2Ugd2UgZXZlciBuZWVkIGl0IGFnYWluLgpAQCAtMjU4LDcgKzI1Niw3IEBAIHN0YXRpYyBib29s
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGNhc2UKLSAg
ICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOworICAgICAgICBzdGQ6OnN0cmlu
ZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKICAgICAgICAgLy8gTWF0Y2ggYXQgdGhlIGVuZCBv
ZiB0aGUgdXJsU3RyaW5nLgogICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVybFN0cmlu
Zy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgpLCBjdXJJ
Z25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTYsOCArNjE0LDggQEAgLSAo
TlNSZWN0KXJlY3RGb3JQYXJ0OihOU1Njcm9sbGVyUGFydClwYQogICAgIEJPT0wgaXNIb3Jpem9u
dGFsID0gZnJhbWVSZWN0LnNpemUud2lkdGggPiBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CiAgICAg
Q0dGbG9hdCB0cmFja0xlbmd0aCA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLndpZHRoIDog
Ym91bmRzLnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgbWluS25vYlNpemUgPSBpc0hvcml6b250
YWwgPyBib3VuZHMuc2l6ZS5oZWlnaHQgOiBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBDR0Zsb2F0
IGtub2JMZW5ndGggPSBtYXgobWluS25vYlNpemUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOwotICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHJvdW5kKFtzZWxmIGRvdWJsZVZhbHVl
XSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOworICAgIENHRmxvYXQga25vYkxlbmd0
aCA9IHN0ZDo6bWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihzdGQ6OnJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOworICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHN0ZDo6cm91bmQoW3NlbGYgZG91Ymxl
VmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkpKSk7CiAKICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdChib3VuZHMub3JpZ2luLnggKyBrbm9i
UG9zaXRpb24sIGJvdW5kcy5vcmlnaW4ueSwga25vYkxlbmd0aCwgYm91bmRzLnNpemUuaGVpZ2h0
KTsKQEAgLTk3NywzMCArOTc1LDMxIEBAIHN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9y
VGVzdE9wdGkKIHsKICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVy
ZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CiAKLSAgICBwcmVmZXJlbmNlcy5hdHRhY2htZW50
RWxlbWVudEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50OwotICAgIHBy
ZWZlcmVuY2VzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFjY2Vs
ZXJhdGVkRHJhd2luZzsKLSAgICBwcmVmZXJlbmNlcy5tZW51SXRlbUVsZW1lbnRFbmFibGVkID0g
b3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5jZXMua2V5Z2VuRWxl
bWVudEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5j
ZXMubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlh
Q29udHJvbHM7Ci0gICAgcHJlZmVyZW5jZXMuaW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zOwotICAgIHByZWZlcmVuY2VzLmFsbG93Q3Jv
c3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gb3B0aW9ucy5hbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFsczsKLSAgICBwcmVmZXJlbmNl
cy5jb2xvckZpbHRlckVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyOwotICAgIHBy
ZWZlcmVuY2VzLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gb3B0aW9u
cy5lbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzOwotICAgIHByZWZlcmVuY2Vz
LndlYkdQVUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVdlYkdQVTsKLSAgICBwcmVmZXJlbmNlcy5D
U1NMb2dpY2FsRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQ1NTTG9naWNhbDsKLSAgICBwcmVmZXJl
bmNlcy5saW5lSGVpZ2h0VW5pdHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVMaW5lSGVpZ2h0VW5p
dHM7Ci0gICAgcHJlZmVyZW5jZXMuYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IG9wdGlvbnMu
YWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZDsKLSAgICBwcmVmZXJlbmNlcy5yZXNpemVPYnNlcnZl
ckVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVJlc2l6ZU9ic2VydmVyOwotICAgIHByZWZlcmVuY2Vz
LkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNTU09NVmll
d1Ntb290aFNjcm9sbGluZzsKLSAgICBwcmVmZXJlbmNlcy5jb3JlTWF0aE1MRW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlQ29yZU1hdGhNTDsKLSAgICBwcmVmZXJlbmNlcy5yZXF1ZXN0SWRsZUNhbGxi
YWNrRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjazsKLSAgICBwcmVm
ZXJlbmNlcy5hc3luY0NsaXBib2FyZEFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFzeW5jQ2xp
cGJvYXJkQVBJOwotICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBvcHRp
b25zLnVzZUVwaGVtZXJhbFNlc3Npb247Ci0gICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9
IG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZTsKLSAgICBwcmVmZXJlbmNlcy5sYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMubGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMuYXNwZWN0UmF0
aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFzcGVjdFJh
dGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQ7Ci0gICAgcHJlZmVyZW5jZXMuYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyA9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczsK
LSAgICBwcmVmZXJlbmNlcy5jb250YWN0UGlja2VyQVBJRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxl
Q29udGFjdFBpY2tlckFQSTsKKyAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVk
ID0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisKKyAgICBwcmVmZXJlbmNlcy5hdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXR0
YWNobWVudEVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2Vz
LmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1
ZSgiQWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5tZW51SXRlbUVsZW1lbnRFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
VmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJl
ZmVyZW5jZXMua2V5Z2VuRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVW
YWx1ZSgiS2V5Z2VuRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVy
ZW5jZXMubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVWYWx1ZSgiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBvcHRpb25zKTsKKyAg
ICBwcmVmZXJlbmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9u
cyk7CisgICAgcHJlZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dDcm9zc09y
aWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSwgb3B0aW9ucyk7Cisg
ICAgcHJlZmVyZW5jZXMuY29sb3JGaWx0ZXJFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlVmFsdWUoIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5h
YmxlZCIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJsZWQgPSBi
b29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiV2ViR1BVRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5DU1NMb2dpY2FsRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJDU1NMb2dpY2FsRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAg
ICBwcmVmZXJlbmNlcy5saW5lSGVpZ2h0VW5pdHNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlVmFsdWUoIkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7Cisg
ICAgcHJlZmVyZW5jZXMuYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJBZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpOworICAgIHByZWZlcmVuY2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9IGJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZVZhbHVlKCJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCBmYWxzZSwgb3B0aW9u
cyk7CisgICAgcHJlZmVyZW5jZXMuQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCA9IGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFi
bGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVk
ID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNvcmVNYXRoTUxFbmFibGVkIiwgZmFs
c2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVk
ID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFi
bGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFzeW5jQ2xpcGJvYXJkQVBJ
RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBc3luY0NsaXBib2FyZEFQ
SUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNo
ZSA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIs
IGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJMYXlv
dXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVk
ID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lk
dGhBbmRIZWlnaHRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFs
bG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1
ZSgiQWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLmNvbnRhY3RQaWNrZXJBUElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlVmFsdWUoIkNvbnRhY3RQaWNrZXJBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwogfQog
CiAvLyBDYWxsZWQgb25jZSBvbiBEdW1wUmVuZGVyVHJlZSBzdGFydHVwLgpAQCAtMTQzNyw3ICsx
NDM2LDcgQEAgc3RhdGljIE5TSW50ZWdlciBjb21wYXJlSGlzdG9yeUl0ZW1zKGlkIAogCiBzdGF0
aWMgTlNEYXRhICpkdW1wQXVkaW8oKQogewotICAgIGNvbnN0IHZlY3RvcjxjaGFyPiYgZGF0YVZl
Y3RvciA9IGdUZXN0UnVubmVyLT5hdWRpb1Jlc3VsdCgpOworICAgIGNvbnN0IGF1dG8mIGRhdGFW
ZWN0b3IgPSBnVGVzdFJ1bm5lci0+YXVkaW9SZXN1bHQoKTsKIAogICAgIE5TRGF0YSAqZGF0YSA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhVmVjdG9yLmRhdGEoKSBsZW5ndGg6ZGF0YVZlY3Rv
ci5zaXplKCldOwogICAgIHJldHVybiBkYXRhOwpAQCAtMTYzMyw3ICsxNjMyLDcgQEAgc3RhdGlj
IHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdCgpCiAgICAgW3VpRGVsZWdhdGUgcmVzZXRX
aW5kb3dPcmlnaW5dOwogCiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3QgdG8gYmUgNDgweDM2
MAotICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgi
c3ZnL1czQy1TVkctMS4xIikgIT0gc3RyaW5nOjpucG9zKTsKKyAgICBib29sIGlzU1ZHVzNDVGVz
dCA9IChnVGVzdFJ1bm5lci0+dGVzdFVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0
ZDo6c3RyaW5nOjpucG9zKTsKICAgICBOU1NpemUgZnJhbWVTaXplID0gaXNTVkdXM0NUZXN0ID8g
TlNNYWtlU2l6ZShUZXN0UnVubmVyOjp3M2NTVkdWaWV3V2lkdGgsIFRlc3RSdW5uZXI6OnczY1NW
R1ZpZXdIZWlnaHQpIDogTlNNYWtlU2l6ZShUZXN0UnVubmVyOjp2aWV3V2lkdGgsIFRlc3RSdW5u
ZXI6OnZpZXdIZWlnaHQpOwogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldEZyYW1lU2l6ZTpm
cmFtZVNpemVdOwogICAgIFtbbWFpbkZyYW1lIGZyYW1lVmlld10gc2V0RnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCBmcmFtZVNpemUud2lkdGgsIGZyYW1lU2l6ZS5oZWlnaHQpXTsKQEAgLTE4MzIsOSAr
MTgzMSw5IEBAIHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXMKICAgICAg
ICAgc2F2ZWRPcHRpb25zLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbnMuanNjT3B0
aW9ucy5sZW5ndGgoKSkgeworICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMoKS5sZW5ndGgoKSkg
ewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zSW5BTGluZShzYXZlZE9wdGlv
bnMpOwotICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25z
LmNfc3RyKCkpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NP
cHRpb25zKCkuY19zdHIoKSk7CiAgICAgfQogfQogCkBAIC0xODc2LDcgKzE4NzUsNyBAQCBzdGF0
aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgcmVzZXRXZWJQcmVmZXJl
bmNlc1RvQ29uc2lzdGVudFZhbHVlcygpOwogICAgIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9w
dGlvbnMob3B0aW9ucyk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFt3ZWJWaWV3IHNldFdhbnRz
TGF5ZXI6b3B0aW9ucy5sYXllckJhY2tlZFdlYlZpZXddOworICAgIFt3ZWJWaWV3IHNldFdhbnRz
TGF5ZXI6b3B0aW9ucy5sYXllckJhY2tlZFdlYlZpZXcoKV07CiAjZW5kaWYKIAogICAgIFRlc3RS
dW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhmYWxzZSk7CkBAIC0xOTIwLDcgKzE5MTksNyBA
QCBzdGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgW1tOU1Bhc3Rl
Ym9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGRlY2xhcmVUeXBlczpAW05TU3RyaW5nUGJvYXJkVHlw
ZV0gb3duZXI6bmlsXTsKICNlbmRpZgogCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRp
dGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAKICAgICBbbWFpbkZyYW1lIF9jbGVhck9w
ZW5lcl07CiAKQEAgLTE5NzYsMTkgKzE5NzUsMTkgQEAgc3RhdGljIE5TVVJMICpjb21wdXRlVGVz
dFVSTChOU1N0cmluZyAqcAogCiBzdGF0aWMgV1RSOjpUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0Zv
clRlc3QoY29uc3QgV1RSOjpUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsKLSAgICBXVFI6OlRlc3RG
ZWF0dXJlcyBmZWF0dXJlczsKKyAgICBXVFI6OlRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IFdUUjo6
VGVzdE9wdGlvbnM6OmRlZmF1bHRzKCk7CiAgICAgV1RSOjptZXJnZShmZWF0dXJlcywgV1RSOjpo
YXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21tYW5kKSk7CiAgICAgV1RSOjpt
ZXJnZShmZWF0dXJlcywgV1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3Qo
Y29tbWFuZCwgV1RSOjpUZXN0T3B0aW9uczo6a2V5VHlwZU1hcHBpbmcoKSkpOwogCiAgICAgcmV0
dXJuIFdUUjo6VGVzdE9wdGlvbnMgeyBXVEZNb3ZlKGZlYXR1cmVzKSB9OwogfQogCi1zdGF0aWMg
dm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQorc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQogewogICAgIEFTU0VSVCghaW5wdXRMaW5l
LmVtcHR5KCkpOwogCiAgICAgYXV0byBjb21tYW5kID0gV1RSOjpwYXJzZUlucHV0TGluZShpbnB1
dExpbmUpOwotICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7
CisgICAgYXV0byBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKICAgICBkdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgZHVtcFBpeGVsc0Zv
ckFsbFRlc3RzOwogCiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07CkBAIC0yMDIzLDcgKzIwMjIs
NyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgZ1Rlc3RS
dW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVs
SGFzaCk7CiAgICAgZ1Rlc3RSdW5uZXItPnNldEFsbG93ZWRIb3N0cyhhbGxvd2VkSG9zdHMpOwog
ICAgIGdUZXN0UnVubmVyLT5zZXRDdXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dC5taWxsaXNl
Y29uZHMoKSk7Ci0gICAgZ1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihj
b21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVycik7CisgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycigpKTsKIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlKG9w
dGlvbnMsIFJlc2V0VGltZTo6QmVmb3JlVGVzdCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCAt
ICh2b2lkKXJlc2V0V2luZG93T3JpZ2luCiAKIC0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnMKIHsKLSAgICBt
X2VuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0
aW5hdGlvbkFjdGlvbkxvYWQ7CisgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2Fk
ID0gb3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkKCk7CiB9CiAKIC0gKHZv
aWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCkBAIC0x
NzksNyArMTc5LDggQEAgLSAoV2ViVmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgYwog
ICAgIEFTU0VSVChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93KCk7Ci0gICAgCisgICAgW3dl
YlZpZXcgc2V0UHJlZmVyZW5jZXM6W3NlbmRlciBwcmVmZXJlbmNlc11dOworCiAgICAgaWYgKGdU
ZXN0UnVubmVyLT5uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2Vi
VmlldyBfbG9hZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNp
b24gMjY4NzM2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTA2LDI4ICs5MDYsMzcgQEAgc3RhdGljIHZvaWQgcmVzZXRX
ZWJQcmVmZXJlbmNlc1RvQ29uc2lzdAogCiAgICAgcHJlZmVyZW5jZXMtPnNldEZvbnRTbW9vdGhp
bmcoRm9udFNtb290aGluZ1R5cGVTdGFuZGFyZCk7CiAKKyAgICBwcmVmc1ByaXZhdGUtPnNldFdl
YlNRTEVuYWJsZWQodHJ1ZSk7CisKICAgICBwcmVmc1ByaXZhdGUtPnNldERhdGFUcmFuc2Zlckl0
ZW1zRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPmNsZWFyTmV0d29ya0xvYWRlclNl
c3Npb24oKTsKIAogICAgIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOwogfQogCitzdGF0
aWMgYm9vbCBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJv
b2wgZGVmYXVsdFZhbHVlLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAg
IGF1dG8gaXQgPSBvcHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7
CisgICAgaWYgKGl0ICE9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwor
fQorCiBzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVm
ZXJlbmNlcyogcHJlZmVyZW5jZXMsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7
CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBRdWVy
eSwgcHJlZmVyZW5jZXMgfTsKIAotICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50
RW5hYmxlZChvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgcHJlZnNQcml2YXRl
LT5zZXRLZXlnZW5FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwot
ICAgIHByZWZzUHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5l
bmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3Rv
ckFkZGl0aW9uc0VuYWJsZWQob3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOwotICAg
IHByZWZzUHJpdmF0ZS0+c2V0UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQob3B0aW9ucy5lbmFi
bGVSZXF1ZXN0SWRsZUNhbGxiYWNrKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJv
YXJkQVBJRW5hYmxlZChvcHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJKTsKLSAgICBwcmVm
c1ByaXZhdGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ29udGFj
dFBpY2tlckFQSSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKG9wdGlvbnMu
ZW5hYmxlV2ViU1FMKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VG9wTmF2aWdhdGlvblRv
RGF0YVVSTHMob3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKLSAgICBwcmVm
ZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNl
c3Npb24pOwotICAgIHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nKTsK
KyAgICBwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVw
aGVtZXJhbFNlc3Npb24oKSk7CisgICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoYm9v
bFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2Us
IG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJs
ZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIktleWdlbkVsZW1lbnRFbmFibGVkIiwg
ZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEluc3Bl
Y3RvckFkZGl0aW9uc0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkluc3Bl
Y3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0
ZS0+c2V0UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
VmFsdWUoIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAg
ICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKGJvb2xX
ZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJDb250YWN0UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNl
LCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzIiwgdHJ1ZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01W
aWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgi
Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CiB9CiAK
IHN0YXRpYyBTdHJpbmcgYXBwbGljYXRpb25JZCgpCkBAIC05NzMsOSArOTgyLDkgQEAgc3RhdGlj
IHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAgICAgICBzYXZlZE9wdGlvbnMu
Y2xlYXIoKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7
CisgICAgaWYgKCFvcHRpb25zLmpzY09wdGlvbnMoKS5lbXB0eSgpKSB7CiAgICAgICAgIEpTQzo6
T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0aW9ucyk7Ci0gICAgICAgIEpT
Qzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAg
ICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMoKS5jX3N0cigp
KTsKICAgICB9CiB9CiAKQEAgLTExNjgsNyArMTE3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUNv
bnRyb2xDb21tYW5kKGNvbnN0IGMKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlv
bnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpU
ZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBX
VFI6OlRlc3RPcHRpb25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdU
Ujo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdU
Ujo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JU
ZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIApAQCAt
MTIyOSw3ICsxMjM4LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0
TAogCiAgICAgOjpnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLmRhdGEo
KSwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgOjpnVGVzdFJ1bm5lci0+c2V0Q3Vz
dG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwotICAgIDo6Z1Rlc3RS
dW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgOjpn
VGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwog
CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gbnVsbHB0cjsKICAgICBkb25lID0gZmFsc2U7Cg==
</data>
<flag name="commit-queue"
          id="428228"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411895</attachid>
            <date>2020-10-20 12:04:44 -0700</date>
            <delta_ts>2020-10-20 13:04:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020120444.patch</filename>
            <type>text/plain</type>
            <size>31504</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzggQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisK
KyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDggKzEzMCw2IEBAIGV4dGVybiAiQyIgewogI2ltcG9ydCA8bWFjaC1vL2dldHNlY3Qu
aD4KIH0KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogQGludGVyZmFjZSBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uIDogTlNBcHBsaWNhdGlvbgog
QGVuZApAQCAtMTUyLDcgKzE1MCw3IEBAIC0gKHZvaWQpdmlldzooVUlXZWJEb2N1bWVudFZpZXcg
Kil2aWV3IGQKICAgICBBU1NFUlQoc2Nyb2xsVmlldyAmJiBbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVdlYlNjcm9sbFZpZXcgY2xhc3NdXSk7CiAgICAgY29uc3QgQ0dTaXplIHNjcm9sbFZp
ZXdTaXplID0gW3Njcm9sbFZpZXcgYm91bmRzXS5zaXplOwogICAgIENHU2l6ZSBjb250ZW50U2l6
ZSA9IG5ld0ZyYW1lLnNpemU7Ci0gICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChtYXgo
Q0dSZWN0R2V0TWF4WShuZXdGcmFtZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworICAgIGNv
bnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQoc3RkOjptYXgoQ0dSZWN0R2V0TWF4WShuZXdGcmFt
ZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwogICAgIFsoVUlXZWJTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyBzZXRDb250ZW50U2l6ZTpjb250ZW50U2l6ZV07CiB9CiBAZW5kCkBAIC0xNzgsNyAr
MTc2LDcgQEAgLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOwogQGVuZAogI2VuZGlm
CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RVUkwpOwogCiAvLyBEZWNpZGluZyB3
aGVuIGl0J3MgT0sgdG8gZHVtcCBvdXQgdGhlIHN0YXRlIGlzIGEgYml0IHRyaWNreS4gIEFsbCB0
aGVzZSBtdXN0IGJlIHRydWU6CiAvLyAtIFRoZXJlIGlzIG5vIGxvYWQgaW4gcHJvZ3Jlc3MKQEAg
LTI0OSw3ICsyNDcsNyBAQCB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
CiAgICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiB1cmxTdHJp
bmcpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNoYXIqIGNvbnN0IGlnbm9yZVNldFtd
ID0gewogICAgICAgICAvLyBLZWVwaW5nIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGluIGNh
c2Ugd2UgZXZlciBuZWVkIGl0IGFnYWluLgpAQCAtMjU4LDcgKzI1Niw3IEBAIHN0YXRpYyBib29s
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGNhc2UKLSAg
ICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOworICAgICAgICBzdGQ6OnN0cmlu
ZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKICAgICAgICAgLy8gTWF0Y2ggYXQgdGhlIGVuZCBv
ZiB0aGUgdXJsU3RyaW5nLgogICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVybFN0cmlu
Zy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgpLCBjdXJJ
Z25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTYsOCArNjE0LDggQEAgLSAo
TlNSZWN0KXJlY3RGb3JQYXJ0OihOU1Njcm9sbGVyUGFydClwYQogICAgIEJPT0wgaXNIb3Jpem9u
dGFsID0gZnJhbWVSZWN0LnNpemUud2lkdGggPiBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CiAgICAg
Q0dGbG9hdCB0cmFja0xlbmd0aCA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLndpZHRoIDog
Ym91bmRzLnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgbWluS25vYlNpemUgPSBpc0hvcml6b250
YWwgPyBib3VuZHMuc2l6ZS5oZWlnaHQgOiBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBDR0Zsb2F0
IGtub2JMZW5ndGggPSBtYXgobWluS25vYlNpemUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOwotICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHJvdW5kKFtzZWxmIGRvdWJsZVZhbHVl
XSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOworICAgIENHRmxvYXQga25vYkxlbmd0
aCA9IHN0ZDo6bWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihzdGQ6OnJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOworICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHN0ZDo6cm91bmQoW3NlbGYgZG91Ymxl
VmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkpKSk7CiAKICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdChib3VuZHMub3JpZ2luLnggKyBrbm9i
UG9zaXRpb24sIGJvdW5kcy5vcmlnaW4ueSwga25vYkxlbmd0aCwgYm91bmRzLnNpemUuaGVpZ2h0
KTsKQEAgLTk3MywzNCArOTcxLDQzIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNU
b0NvbnNpc3QKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vz
c2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbl07CiB9CiAKK3N0YXRpYyBib29sIGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUsIGNvbnN0IFdUUjo6
VGVzdE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXV0byBpdCA9IG9wdGlvbnMuYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlcygpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gb3B0aW9ucy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25k
OworICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Cit9CisKIHN0YXRpYyB2b2lkIHNldFdlYlByZWZl
cmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVyZW5jZXMgc3RhbmRh
cmRQcmVmZXJlbmNlc107CiAKLSAgICBwcmVmZXJlbmNlcy5hdHRhY2htZW50RWxlbWVudEVuYWJs
ZWQgPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50OwotICAgIHByZWZlcmVuY2VzLmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFjY2VsZXJhdGVkRHJhd2lu
ZzsKLSAgICBwcmVmZXJlbmNlcy5tZW51SXRlbUVsZW1lbnRFbmFibGVkID0gb3B0aW9ucy5lbmFi
bGVNZW51SXRlbUVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5jZXMua2V5Z2VuRWxlbWVudEVuYWJsZWQg
PSBvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5jZXMubW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHM7Ci0g
ICAgcHJlZmVyZW5jZXMuaW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxl
SW5zcGVjdG9yQWRkaXRpb25zOwotICAgIHByZWZlcmVuY2VzLmFsbG93Q3Jvc3NPcmlnaW5TdWJy
ZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3Vi
cmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFsczsKLSAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRl
ckVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyOwotICAgIHByZWZlcmVuY2VzLnNl
bGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVTZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzOwotICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJs
ZWQgPSBvcHRpb25zLmVuYWJsZVdlYkdQVTsKLSAgICBwcmVmZXJlbmNlcy5DU1NMb2dpY2FsRW5h
YmxlZCA9IG9wdGlvbnMuZW5hYmxlQ1NTTG9naWNhbDsKLSAgICBwcmVmZXJlbmNlcy5saW5lSGVp
Z2h0VW5pdHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVMaW5lSGVpZ2h0VW5pdHM7Ci0gICAgcHJl
ZmVyZW5jZXMuYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IG9wdGlvbnMuYWRDbGlja0F0dHJp
YnV0aW9uRW5hYmxlZDsKLSAgICBwcmVmZXJlbmNlcy5yZXNpemVPYnNlcnZlckVuYWJsZWQgPSBv
cHRpb25zLmVuYWJsZVJlc2l6ZU9ic2VydmVyOwotICAgIHByZWZlcmVuY2VzLkNTU09NVmlld1Nt
b290aFNjcm9sbGluZ0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9s
bGluZzsKLSAgICBwcmVmZXJlbmNlcy5jb3JlTWF0aE1MRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxl
Q29yZU1hdGhNTDsKLSAgICBwcmVmZXJlbmNlcy5yZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCA9
IG9wdGlvbnMuZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjazsKLSAgICBwcmVmZXJlbmNlcy5hc3lu
Y0NsaXBib2FyZEFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJOwot
ICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBvcHRpb25zLnVzZUVwaGVt
ZXJhbFNlc3Npb247Ci0gICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9IG9wdGlvbnMuZW5h
YmxlQmFja0ZvcndhcmRDYWNoZTsKLSAgICBwcmVmZXJlbmNlcy5sYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dEludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJ
bnRlZ3JhdGlvbkVuYWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMuYXNwZWN0UmF0aW9PZkltZ0Zyb21X
aWR0aEFuZEhlaWdodEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9t
V2lkdGhBbmRIZWlnaHQ7Ci0gICAgcHJlZmVyZW5jZXMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRh
VVJMcyA9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczsKLSAgICBwcmVmZXJl
bmNlcy5jb250YWN0UGlja2VyQVBJRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQ29udGFjdFBpY2tl
ckFQSTsKKyAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9ucy51
c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisKKyAgICBwcmVmZXJlbmNlcy5hdHRhY2htZW50RWxlbWVu
dEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXR0YWNobWVudEVsZW1l
bnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWNjZWxlcmF0
ZWREcmF3aW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5tZW51
SXRlbUVsZW1lbnRFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIk1lbnVJ
dGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMua2V5
Z2VuRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiS2V5Z2Vu
RWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMubW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNl
cy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFs
dWUoIkluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJl
ZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMg
PSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuY29sb3JGaWx0ZXJFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNv
bG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5zZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIsIHRydWUs
IG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiV2ViR1BVRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBw
cmVmZXJlbmNlcy5DU1NMb2dpY2FsRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJDU1NMb2dpY2FsRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNl
cy5saW5lSGVpZ2h0VW5pdHNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUo
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVy
ZVZhbHVlKCJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJl
ZmVyZW5jZXMuQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwgZmFsc2Us
IG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNvcmVNYXRoTUxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMp
OworICAgIHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2Us
IG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCA9IGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9IGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJMYXlvdXRGb3JtYXR0aW5n
Q29udGV4dEludGVncmF0aW9uRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVu
Y2VzLmFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRF
bmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dUb3BO
YXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmNv
bnRhY3RQaWNrZXJBUElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNv
bnRhY3RQaWNrZXJBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwogfQogCiAvLyBDYWxsZWQg
b25jZSBvbiBEdW1wUmVuZGVyVHJlZSBzdGFydHVwLgpAQCAtMTQzNyw3ICsxNDQ0LDcgQEAgc3Rh
dGljIE5TSW50ZWdlciBjb21wYXJlSGlzdG9yeUl0ZW1zKGlkIAogCiBzdGF0aWMgTlNEYXRhICpk
dW1wQXVkaW8oKQogewotICAgIGNvbnN0IHZlY3RvcjxjaGFyPiYgZGF0YVZlY3RvciA9IGdUZXN0
UnVubmVyLT5hdWRpb1Jlc3VsdCgpOworICAgIGNvbnN0IGF1dG8mIGRhdGFWZWN0b3IgPSBnVGVz
dFJ1bm5lci0+YXVkaW9SZXN1bHQoKTsKIAogICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczpkYXRhVmVjdG9yLmRhdGEoKSBsZW5ndGg6ZGF0YVZlY3Rvci5zaXplKCldOwog
ICAgIHJldHVybiBkYXRhOwpAQCAtMTYzMyw3ICsxNjQwLDcgQEAgc3RhdGljIHZvaWQgc2l6ZVdl
YlZpZXdGb3JDdXJyZW50VGVzdCgpCiAgICAgW3VpRGVsZWdhdGUgcmVzZXRXaW5kb3dPcmlnaW5d
OwogCiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3QgdG8gYmUgNDgweDM2MAotICAgIGJvb2wg
aXNTVkdXM0NUZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgic3ZnL1czQy1TVkct
MS4xIikgIT0gc3RyaW5nOjpucG9zKTsKKyAgICBib29sIGlzU1ZHVzNDVGVzdCA9IChnVGVzdFJ1
bm5lci0+dGVzdFVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKTsKICAgICBOU1NpemUgZnJhbWVTaXplID0gaXNTVkdXM0NUZXN0ID8gTlNNYWtlU2l6ZShU
ZXN0UnVubmVyOjp3M2NTVkdWaWV3V2lkdGgsIFRlc3RSdW5uZXI6OnczY1NWR1ZpZXdIZWlnaHQp
IDogTlNNYWtlU2l6ZShUZXN0UnVubmVyOjp2aWV3V2lkdGgsIFRlc3RSdW5uZXI6OnZpZXdIZWln
aHQpOwogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldEZyYW1lU2l6ZTpmcmFtZVNpemVdOwog
ICAgIFtbbWFpbkZyYW1lIGZyYW1lVmlld10gc2V0RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBmcmFt
ZVNpemUud2lkdGgsIGZyYW1lU2l6ZS5oZWlnaHQpXTsKQEAgLTE4MzIsOSArMTgzOSw5IEBAIHN0
YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXMKICAgICAgICAgc2F2ZWRPcHRp
b25zLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgo
KSkgeworICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMoKS5sZW5ndGgoKSkgewogICAgICAgICBK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zSW5BTGluZShzYXZlZE9wdGlvbnMpOwotICAgICAg
ICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOwor
ICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zKCkuY19z
dHIoKSk7CiAgICAgfQogfQogCkBAIC0xODc2LDcgKzE4ODMsNyBAQCBzdGF0aWMgdm9pZCByZXNl
dFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lz
dGVudFZhbHVlcygpOwogICAgIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMob3B0aW9u
cyk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFt3ZWJWaWV3IHNldFdhbnRzTGF5ZXI6b3B0aW9u
cy5sYXllckJhY2tlZFdlYlZpZXddOworICAgIFt3ZWJWaWV3IHNldFdhbnRzTGF5ZXI6b3B0aW9u
cy5sYXllckJhY2tlZFdlYlZpZXcoKV07CiAjZW5kaWYKIAogICAgIFRlc3RSdW5uZXI6OnNldFNl
cmlhbGl6ZUhUVFBMb2FkcyhmYWxzZSk7CkBAIC0xOTIwLDcgKzE5MjcsNyBAQCBzdGF0aWMgdm9p
ZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgW1tOU1Bhc3RlYm9hcmQgZ2VuZXJh
bFBhc3RlYm9hcmRdIGRlY2xhcmVUeXBlczpAW05TU3RyaW5nUGJvYXJkVHlwZV0gb3duZXI6bmls
XTsKICNlbmRpZgogCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9y
dGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkuY19zdHIoKSk7CiAKICAgICBbbWFpbkZyYW1lIF9jbGVhck9wZW5lcl07CiAKQEAg
LTE5NzYsMTkgKzE5ODMsMTkgQEAgc3RhdGljIE5TVVJMICpjb21wdXRlVGVzdFVSTChOU1N0cmlu
ZyAqcAogCiBzdGF0aWMgV1RSOjpUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3Qg
V1RSOjpUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsKLSAgICBXVFI6OlRlc3RGZWF0dXJlcyBmZWF0
dXJlczsKKyAgICBXVFI6OlRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IFdUUjo6VGVzdE9wdGlvbnM6
OmRlZmF1bHRzKCk7CiAgICAgV1RSOjptZXJnZShmZWF0dXJlcywgV1RSOjpoYXJkY29kZWRGZWF0
dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21tYW5kKSk7CiAgICAgV1RSOjptZXJnZShmZWF0dXJl
cywgV1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCwgV1RS
OjpUZXN0T3B0aW9uczo6a2V5VHlwZU1hcHBpbmcoKSkpOwogCiAgICAgcmV0dXJuIFdUUjo6VGVz
dE9wdGlvbnMgeyBXVEZNb3ZlKGZlYXR1cmVzKSB9OwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdGQ6
OnN0cmluZyYgaW5wdXRMaW5lKQogewogICAgIEFTU0VSVCghaW5wdXRMaW5lLmVtcHR5KCkpOwog
CiAgICAgYXV0byBjb21tYW5kID0gV1RSOjpwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOwotICAg
IGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CisgICAgYXV0byBw
YXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKICAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwog
CiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07CkBAIC0yMDIzLDcgKzIwMzAsNyBAQCBzdGF0aWMg
dm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0
UnVubmVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAg
Z1Rlc3RSdW5uZXItPnNldEFsbG93ZWRIb3N0cyhhbGxvd2VkSG9zdHMpOwogICAgIGdUZXN0UnVu
bmVyLT5zZXRDdXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dC5taWxsaXNlY29uZHMoKSk7Ci0g
ICAgZ1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7
CisgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cigpKTsKIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlKG9wdGlvbnMsIFJlc2V0
VGltZTo6QmVmb3JlVGVzdCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURl
bGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVn
YXRlLm1tCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlE
ZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCAtICh2b2lkKXJlc2V0
V2luZG93T3JpZ2luCiAKIC0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rp
bmc6KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnMKIHsKLSAgICBtX2VuYWJsZURyYWdE
ZXN0aW5hdGlvbkFjdGlvbkxvYWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQ7CisgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0gb3B0aW9ucy5l
bmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkKCk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCkBAIC0xNzksNyArMTc5LDgg
QEAgLSAoV2ViVmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgYwogICAgIEFTU0VSVChn
VGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBjcmVh
dGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93KCk7Ci0gICAgCisgICAgW3dlYlZpZXcgc2V0UHJl
ZmVyZW5jZXM6W3NlbmRlciBwcmVmZXJlbmNlc11dOworCiAgICAgaWYgKGdUZXN0UnVubmVyLT5u
ZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9hZEJh
Y2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMjY4NzM2KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTA2LDI4ICs5MDYsMzcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJlbmNl
c1RvQ29uc2lzdAogCiAgICAgcHJlZmVyZW5jZXMtPnNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290
aGluZ1R5cGVTdGFuZGFyZCk7CiAKKyAgICBwcmVmc1ByaXZhdGUtPnNldFdlYlNRTEVuYWJsZWQo
dHJ1ZSk7CisKICAgICBwcmVmc1ByaXZhdGUtPnNldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxlZChU
UlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPmNsZWFyTmV0d29ya0xvYWRlclNlc3Npb24oKTsKIAog
ICAgIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOwogfQogCitzdGF0aWMgYm9vbCBib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZh
bHVlLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gaXQgPSBv
cHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7CisgICAgaWYgKGl0
ICE9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCiBzdGF0aWMg
dm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJl
ZmVyZW5jZXMsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgQ09NUHRy
PElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBRdWVyeSwgcHJlZmVyZW5j
ZXMgfTsKIAotICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChvcHRp
b25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRLZXlnZW5F
bGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIHByZWZzUHJp
dmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9uc0Vu
YWJsZWQob3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOwotICAgIHByZWZzUHJpdmF0
ZS0+c2V0UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQob3B0aW9ucy5lbmFibGVSZXF1ZXN0SWRs
ZUNhbGxiYWNrKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxl
ZChvcHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNl
dENvbnRhY3RQaWNrZXJBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ29udGFjdFBpY2tlckFQSSk7
Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViU1FM
KTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMob3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pOwotICAg
IHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRD
YWNoZSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFi
bGVkKG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nKTsKKyAgICBwcmVmZXJl
bmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Np
b24oKSk7CisgICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UsIG9wdGlvbnMpKTsK
KyAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9u
cykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQoYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIktleWdlbkVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIs
IHRydWUsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9u
c0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0aW9u
c0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVxdWVz
dElkbGVDYWxsYmFja0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVl
c3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZh
dGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVW
YWx1ZSgiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBw
cmVmc1ByaXZhdGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNl
RmVhdHVyZVZhbHVlKCJDb250YWN0UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7
CisgICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKGJvb2xX
ZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwg
dHJ1ZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Ny
b2xsaW5nRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ1NTT01WaWV3U21v
b3RoU2Nyb2xsaW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CiB9CiAKIHN0YXRpYyBTdHJp
bmcgYXBwbGljYXRpb25JZCgpCkBAIC05NzMsOSArOTgyLDkgQEAgc3RhdGljIHZvaWQgc2V0SlND
T3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAgICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAg
ICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKCFv
cHRpb25zLmpzY09wdGlvbnMoKS5lbXB0eSgpKSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVt
cEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6
c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0
aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9
CiAKQEAgLTExNjgsNyArMTE3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUNvbnRyb2xDb21tYW5k
KGNvbnN0IGMKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNv
bnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpUZXN0RmVhdHVyZXMg
ZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBXVFI6OlRlc3RPcHRp
b25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6aGFyZGNvZGVk
RmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdUUjo6bWVyZ2UoZmVh
dHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQs
IFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIApAQCAtMTIyOSw3ICsxMjM4
LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAgOjpn
VGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLmRhdGEoKSwgY29tbWFuZC5l
eHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgOjpnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChj
b21tYW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwotICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1
bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8
fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgOjpnVGVzdFJ1bm5lci0+
c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgdG9wTG9h
ZGluZ0ZyYW1lID0gbnVsbHB0cjsKICAgICBkb25lID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411902</attachid>
            <date>2020-10-20 13:04:19 -0700</date>
            <delta_ts>2020-10-20 13:14:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020130418.patch</filename>
            <type>text/plain</type>
            <size>37309</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzggQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisK
KyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDggKzEzMCw2IEBAIGV4dGVybiAiQyIgewogI2ltcG9ydCA8bWFjaC1vL2dldHNlY3Qu
aD4KIH0KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogQGludGVyZmFjZSBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uIDogTlNBcHBsaWNhdGlvbgog
QGVuZApAQCAtMTUyLDcgKzE1MCw3IEBAIC0gKHZvaWQpdmlldzooVUlXZWJEb2N1bWVudFZpZXcg
Kil2aWV3IGQKICAgICBBU1NFUlQoc2Nyb2xsVmlldyAmJiBbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVdlYlNjcm9sbFZpZXcgY2xhc3NdXSk7CiAgICAgY29uc3QgQ0dTaXplIHNjcm9sbFZp
ZXdTaXplID0gW3Njcm9sbFZpZXcgYm91bmRzXS5zaXplOwogICAgIENHU2l6ZSBjb250ZW50U2l6
ZSA9IG5ld0ZyYW1lLnNpemU7Ci0gICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChtYXgo
Q0dSZWN0R2V0TWF4WShuZXdGcmFtZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworICAgIGNv
bnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQoc3RkOjptYXgoQ0dSZWN0R2V0TWF4WShuZXdGcmFt
ZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwogICAgIFsoVUlXZWJTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyBzZXRDb250ZW50U2l6ZTpjb250ZW50U2l6ZV07CiB9CiBAZW5kCkBAIC0xNzgsNyAr
MTc2LDcgQEAgLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOwogQGVuZAogI2VuZGlm
CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RVUkwpOwogCiAvLyBEZWNpZGluZyB3
aGVuIGl0J3MgT0sgdG8gZHVtcCBvdXQgdGhlIHN0YXRlIGlzIGEgYml0IHRyaWNreS4gIEFsbCB0
aGVzZSBtdXN0IGJlIHRydWU6CiAvLyAtIFRoZXJlIGlzIG5vIGxvYWQgaW4gcHJvZ3Jlc3MKQEAg
LTI0OSw3ICsyNDcsNyBAQCB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
CiAgICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiB1cmxTdHJp
bmcpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNoYXIqIGNvbnN0IGlnbm9yZVNldFtd
ID0gewogICAgICAgICAvLyBLZWVwaW5nIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGluIGNh
c2Ugd2UgZXZlciBuZWVkIGl0IGFnYWluLgpAQCAtMjU4LDcgKzI1Niw3IEBAIHN0YXRpYyBib29s
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGNhc2UKLSAg
ICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOworICAgICAgICBzdGQ6OnN0cmlu
ZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKICAgICAgICAgLy8gTWF0Y2ggYXQgdGhlIGVuZCBv
ZiB0aGUgdXJsU3RyaW5nLgogICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVybFN0cmlu
Zy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgpLCBjdXJJ
Z25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTYsOCArNjE0LDggQEAgLSAo
TlNSZWN0KXJlY3RGb3JQYXJ0OihOU1Njcm9sbGVyUGFydClwYQogICAgIEJPT0wgaXNIb3Jpem9u
dGFsID0gZnJhbWVSZWN0LnNpemUud2lkdGggPiBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CiAgICAg
Q0dGbG9hdCB0cmFja0xlbmd0aCA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLndpZHRoIDog
Ym91bmRzLnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgbWluS25vYlNpemUgPSBpc0hvcml6b250
YWwgPyBib3VuZHMuc2l6ZS5oZWlnaHQgOiBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBDR0Zsb2F0
IGtub2JMZW5ndGggPSBtYXgobWluS25vYlNpemUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOwotICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHJvdW5kKFtzZWxmIGRvdWJsZVZhbHVl
XSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOworICAgIENHRmxvYXQga25vYkxlbmd0
aCA9IHN0ZDo6bWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihzdGQ6OnJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOworICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHN0ZDo6cm91bmQoW3NlbGYgZG91Ymxl
VmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkpKSk7CiAKICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdChib3VuZHMub3JpZ2luLnggKyBrbm9i
UG9zaXRpb24sIGJvdW5kcy5vcmlnaW4ueSwga25vYkxlbmd0aCwgYm91bmRzLnNpemUuaGVpZ2h0
KTsKQEAgLTY4Niw4ICs2ODQsNiBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVu
V2luZG93CiAgICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHMiXTsK
ICAgICBbV2ViVmlldyByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWw6QCJmZWVkc2VhcmNoIl07CiAK
LSAgICBbW3dlYlZpZXcgcHJlZmVyZW5jZXNdIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNd
OwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNldFdpbmRvd09jY2x1c2lvbkRl
dGVjdGlvbkVuYWJsZWQ6Tk9dOwogICAgIFtXZWJWaWV3IF9zZXRGb250QWxsb3dMaXN0OmZvbnRB
bGxvd0xpc3QoKV07CkBAIC03NTcsOCArNzUzLDYgQEAgV2ViVmlldyAqY3JlYXRlV2ViVmlld0Fu
ZE9mZnNjcmVlbldpbmRvdwogICAgIE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwID0gW3dlYlZp
ZXcgYml0bWFwSW1hZ2VSZXBGb3JDYWNoaW5nRGlzcGxheUluUmVjdDpbd2ViVmlldyBib3VuZHNd
XTsKICAgICBbd2ViVmlldyBjYWNoZURpc3BsYXlJblJlY3Q6W3dlYlZpZXcgYm91bmRzXSB0b0Jp
dG1hcEltYWdlUmVwOmltYWdlUmVwXTsKICNlbHNlCi0gICAgW1t3ZWJWaWV3IHByZWZlcmVuY2Vz
XSBfc2V0VGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQ6Tk9dOwotCiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZ2xvYmFsIFVJVmlld3MsIGFuZCBzZXQgdGhlIGtleSBVSVdpbmRvdyB0byBiZSBw
YWludGVkLgogICAgIGlmICghZ1dlYkJyb3dzZXJWaWV3KSB7CiAgICAgICAgIGdXZWJCcm93c2Vy
VmlldyA9IFt3ZWJCcm93c2VyVmlldyByZXRhaW5dOwpAQCAtODI3LDE0ICs4MjEsMTQgQEAgc3Rh
dGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoVwogICAgIFtwcmVmZXJlbmNlcyBz
ZXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNl
dFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRUcmFu
c2Zvcm1TdHJlYW1BUElFbmFibGVkOllFU107Ci0gICAgcHJlZmVyZW5jZXMuZW5jcnlwdGVkTWVk
aWFBUElFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRFbmNyeXB0ZWRNZWRpYUFQ
SUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0QWNjZXNzaWJpbGl0eU9iamVjdE1v
ZGVsRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBcmlhUmVmbGVjdGlvbkVuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VmlzdWFsVmlld3BvcnRBUElFbmFibGVkOllF
U107CiAgICAgW3ByZWZlcmVuY2VzIHNldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogICAgIFtw
cmVmZXJlbmNlcyBzZXRTZXJ2ZXJUaW1pbmdFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDpZRVNdOwotICAgIHByZWZlcmVuY2VzLnNv
dXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRT
b3VyY2VCdWZmZXJDaGFuZ2VUeXBlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRD
U1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1l
ZGlhUmVjb3JkZXJFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFJlZmVycmVyUG9s
aWN5QXR0cmlidXRlRW5hYmxlZDpZRVNdOwpAQCAtODUwLDkgKzg0NCw4IEBAIHN0YXRpYyB2b2lk
IGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFcKIH0KIAogLy8gQ2FsbGVkIGJlZm9yZSBlYWNo
IHRlc3QuCi1zdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVz
KCkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoV2Vi
UHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzKQogewotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJl
bmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKICAgICBlbmFibGVF
eHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBbcHJlZmVyZW5jZXMgc2V0
TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcms6IE5PXTsKQEAgLTkyMCw2ICs5MTMs
NyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgLy8gRW5h
YmxlIHRoZSB0cmFja2VyIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3QgV2ViVmlldyB3aWxsCiAg
ICAgLy8gY2F1c2UgaW5pdGlhbGl6YXRpb24gdG8gdXNlIHRoZSBjb3JyZWN0IGRhdGFiYXNlIHBh
dGhzLgogICAgIFtwcmVmZXJlbmNlcyBzZXRTdG9yYWdlVHJhY2tlckVuYWJsZWQ6WUVTXTsKKyAg
ICBbcHJlZmVyZW5jZXMgX3NldFRlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkOk5PXTsKICNl
bmRpZgogCiAgICAgW3ByZWZlcmVuY2VzIF9zZXRUZXh0QXV0b3NpemluZ0VuYWJsZWQ6Tk9dOwpA
QCAtOTM1LDcgKzkyOSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNp
c3QKICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3M6Tk9dOwogICAg
IFtwcmVmZXJlbmNlcyBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDpOT107CiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQVNTRVJUKFtwcmVmZXJlbmNlcyBtb2NrU2Ny
b2xsYmFyc0VuYWJsZWRdKTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0TW9ja1Njcm9sbGJhcnNFbmFi
bGVkOllFU107CiAjZW5kaWYKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBdWRpb0VuYWJsZWQ6
WUVTXTsKQEAgLTk2Myw0NCArOTU3LDUyIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5j
ZXNUb0NvbnNpc3QKICAgICBbcHJlZmVyZW5jZXMgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQ6WUVTXTsKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRDYWNoZUFQSUVuYWJsZWQ6Tk9dOwotICAg
IHByZWZlcmVuY2VzLm1lZGlhQ2FwYWJpbGl0aWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJlZmVy
ZW5jZXMgc2V0TWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkOllFU107CiAKLSAgICBwcmVmZXJlbmNl
cy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJl
ZmVyZW5jZXMgc2V0U2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQ6WUVTXTsK
IAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJTUUxFbmFibGVkOllFU107CisgICAgW3ByZWZlcmVu
Y2VzIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXTsKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1
cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbl07CiB9CiAKLXN0YXRpYyB2b2lk
IHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKK3N0YXRpYyBib29sIGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKHN0ZDo6
c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVu
Y2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwotCi0gICAgcHJlZmVyZW5jZXMuYXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudDsKLSAgICBwcmVm
ZXJlbmNlcy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBY2NlbGVy
YXRlZERyYXdpbmc7Ci0gICAgcHJlZmVyZW5jZXMubWVudUl0ZW1FbGVtZW50RW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50OwotICAgIHByZWZlcmVuY2VzLmtleWdlbkVsZW1l
bnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50OwotICAgIHByZWZlcmVuY2Vz
Lm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzOwotICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9uczsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMu
Y29sb3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKLSAgICBwcmVm
ZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKLSAgICBwcmVmZXJlbmNlcy53
ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7Ci0gICAgcHJlZmVyZW5jZXMuQ1NT
TG9naWNhbEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNTU0xvZ2ljYWw7Ci0gICAgcHJlZmVyZW5j
ZXMubGluZUhlaWdodFVuaXRzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTGluZUhlaWdodFVuaXRz
OwotICAgIHByZWZlcmVuY2VzLmFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBvcHRpb25zLmFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJF
bmFibGVkID0gb3B0aW9ucy5lbmFibGVSZXNpemVPYnNlcnZlcjsKLSAgICBwcmVmZXJlbmNlcy5D
U1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDU1NPTVZpZXdT
bW9vdGhTY3JvbGxpbmc7Ci0gICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUNvcmVNYXRoTUw7Ci0gICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFj
a0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2s7Ci0gICAgcHJlZmVy
ZW5jZXMuYXN5bmNDbGlwYm9hcmRBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3luY0NsaXBi
b2FyZEFQSTsKLSAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uOwotICAgIHByZWZlcmVuY2VzLnVzZXNQYWdlQ2FjaGUgPSBv
cHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU7Ci0gICAgcHJlZmVyZW5jZXMubGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmxheW91dEZvcm1hdHRp
bmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkOwotICAgIHByZWZlcmVuY2VzLmFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3BlY3RSYXRp
b09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0OwotICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgPSBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM7Ci0g
ICAgcHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNv
bnRhY3RQaWNrZXJBUEk7CisgICAgYXV0byBpdCA9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcygpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gb3B0aW9ucy5ib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVzKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBkZWZhdWx0VmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9y
VGVzdE9wdGlvbnMoV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRlc3RP
cHRpb25zJiBvcHRpb25zKQoreworICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKworICAgIHByZWZlcmVuY2VzLmF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJB
dHRhY2htZW50RWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLm1lbnVJdGVtRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVWYWx1ZSgiTWVudUl0ZW1FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBw
cmVmZXJlbmNlcy5rZXlnZW5FbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVy
ZVZhbHVlKCJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiSW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRlckVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29sb3JGaWx0ZXJFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gYm9vbFdl
YlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNF
bmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9
IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJXZWJHUFVFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpOworICAgIHByZWZlcmVuY2VzLkNTU0xvZ2ljYWxFbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkNTU0xvZ2ljYWxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmxpbmVIZWlnaHRVbml0c0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5j
ZUZlYXR1cmVWYWx1ZSgiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5hZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0g
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29yZU1hdGhNTEVuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFja0VuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiUmVxdWVzdElkbGVDYWxsYmFja0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJk
QVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNh
Y2hlID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hl
IiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdDb250
ZXh0SW50ZWdyYXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkxh
eW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7
CisgICAgcHJlZmVyZW5jZXMuYXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXNwZWN0UmF0aW9PZkltZ0Zyb21X
aWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAg
cHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CiB9
CiAKIC8vIENhbGxlZCBvbmNlIG9uIER1bXBSZW5kZXJUcmVlIHN0YXJ0dXAuCkBAIC0xNDM3LDcg
KzE0MzksNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIGNvbXBhcmVIaXN0b3J5SXRlbXMoaWQgCiAKIHN0
YXRpYyBOU0RhdGEgKmR1bXBBdWRpbygpCiB7Ci0gICAgY29uc3QgdmVjdG9yPGNoYXI+JiBkYXRh
VmVjdG9yID0gZ1Rlc3RSdW5uZXItPmF1ZGlvUmVzdWx0KCk7CisgICAgY29uc3QgYXV0byYgZGF0
YVZlY3RvciA9IGdUZXN0UnVubmVyLT5hdWRpb1Jlc3VsdCgpOwogCiAgICAgTlNEYXRhICpkYXRh
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGFWZWN0b3IuZGF0YSgpIGxlbmd0aDpkYXRhVmVj
dG9yLnNpemUoKV07CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0xNjMzLDcgKzE2MzUsNyBAQCBzdGF0
aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KCkKICAgICBbdWlEZWxlZ2F0ZSByZXNl
dFdpbmRvd09yaWdpbl07CiAKICAgICAvLyBXM0MgU1ZHIHRlc3RzIGV4cGVjdCB0byBiZSA0ODB4
MzYwCi0gICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RVUkwoKS5maW5k
KCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBzdHJpbmc6Om5wb3MpOworICAgIGJvb2wgaXNTVkdXM0NU
ZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgic3ZnL1czQy1TVkctMS4xIikgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpOwogICAgIE5TU2l6ZSBmcmFtZVNpemUgPSBpc1NWR1czQ1Rlc3Qg
PyBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnczY1NWR1ZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6dzNj
U1ZHVmlld0hlaWdodCkgOiBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnZpZXdXaWR0aCwgVGVzdFJ1
bm5lcjo6dmlld0hlaWdodCk7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0RnJhbWVTaXpl
OmZyYW1lU2l6ZV07CiAgICAgW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBzZXRGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIGZyYW1lU2l6ZS53aWR0aCwgZnJhbWVTaXplLmhlaWdodCldOwpAQCAtMTgzMiw5
ICsxODM0LDkgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAg
ICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NP
cHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucygpLmxlbmd0aCgp
KSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0
aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlv
bnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpz
Y09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9CiAKQEAgLTE4NDUsNiArMTg0NywxMCBAQCBz
dGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAKICAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW21haW5GcmFtZSB3ZWJWaWV3XTsKIAorICAgIFdlYlByZWZlcmVuY2VzICpwcmVm
ZXJlbmNlcyA9IFtbV2ViUHJlZmVyZW5jZXMgYWxsb2NdIGluaXRdOworICAgIFt3ZWJWaWV3IHNl
dFByZWZlcmVuY2VzOnByZWZlcmVuY2VzXTsKKyAgICBbcHJlZmVyZW5jZXMgcmVsZWFzZV0KKwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYWRqdXN0V2ViRG9jdW1lbnRGb3JTdGFuZGFy
ZFZpZXdwb3J0KGdXZWJCcm93c2VyVmlldywgZ1dlYlNjcm9sbFZpZXcpOwogICAgIFt3ZWJWaWV3
IF9zZXRBbGxvd3NNZXNzYWdpbmc6WUVTXTsKQEAgLTE4NzMsMTAgKzE4NzksMTAgQEAgc3RhdGlj
IHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogCiAgICAgW1dlYkNhY2hlIGNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHNdOwogCi0gICAgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdGVu
dFZhbHVlcygpOwotICAgIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMob3B0aW9ucyk7
CisgICAgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyh3ZWJWaWV3LnByZWZl
cmVuY2VzKTsKKyAgICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKHdlYlZpZXcucHJl
ZmVyZW5jZXMsIG9wdGlvbnMpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbd2ViVmlldyBzZXRX
YW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3XTsKKyAgICBbd2ViVmlldyBzZXRX
YW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3KCldOwogI2VuZGlmCiAKICAgICBU
ZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoZmFsc2UpOwpAQCAtMTkyMCw3ICsxOTI2
LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAgIFtbTlNQ
YXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBkZWNsYXJlVHlwZXM6QFtOU1N0cmluZ1Bib2Fy
ZFR5cGVdIG93bmVyOm5pbF07CiAjZW5kaWYKIAotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpz
ZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogCiAgICAgW21haW5GcmFtZSBfY2xl
YXJPcGVuZXJdOwogCkBAIC0xOTc2LDE5ICsxOTgyLDE5IEBAIHN0YXRpYyBOU1VSTCAqY29tcHV0
ZVRlc3RVUkwoTlNTdHJpbmcgKnAKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlv
bnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpU
ZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBX
VFI6OlRlc3RPcHRpb25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdU
Ujo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdU
Ujo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JU
ZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIAogICAg
IHJldHVybiBXVFI6OlRlc3RPcHRpb25zIHsgV1RGTW92ZShmZWF0dXJlcykgfTsKIH0KIAotc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKK3N0YXRpYyB2b2lkIHJ1
blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQoIWlucHV0
TGluZS5lbXB0eSgpKTsKIAogICAgIGF1dG8gY29tbWFuZCA9IFdUUjo6cGFyc2VJbnB1dExpbmUo
aW5wdXRMaW5lKTsKLSAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9y
VVJMOworICAgIGF1dG8gcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CiAgICAgZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IGR1bXBQaXhl
bHNGb3JBbGxUZXN0czsKIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwpAQCAtMjAyMyw3ICsy
MDI5LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAgIGdU
ZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQ
aXhlbEhhc2gpOwogICAgIGdUZXN0UnVubmVyLT5zZXRBbGxvd2VkSG9zdHMoYWxsb3dlZEhvc3Rz
KTsKICAgICBnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQubWls
bGlzZWNvbmRzKCkpOwotICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIpOworICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0
ZShvcHRpb25zLCBSZXNldFRpbWU6OkJlZm9yZVRlc3QpOwogCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2aXNpb24gMjY4NzM2KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU3
NiwxNCArNTc2LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVBhdXNlZChib29sIHBhdXMK
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQog
ewotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkOmZsYWddOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNl
c10gc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkOmZsYWddOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRiA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgcGF0aCkpOwogICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilwYXRoQ0YuZ2V0KCldOwotICAgIFtbV2Vi
UHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bjp1cmxdOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbjp1cmxdOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9y
VXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmlu
Z1JlZiB2YWx1ZSkKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRl
UHJlZmVyZW5jZShKU1N0CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGID0gYWRv
cHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2YWx1ZSkpOwog
ICAgIE5TU3RyaW5nICp2YWx1ZU5TID0gKF9fYnJpZGdlIE5TU3RyaW5nICopdmFsdWVDRi5nZXQo
KTsKIAotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gX3NldFByZWZl
cmVuY2VGb3JUZXN0V2l0aFZhbHVlOnZhbHVlTlMgZm9yS2V5OmtleU5TXTsKKyAgICBbW1ttYWlu
RnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIF9zZXRQcmVmZXJlbmNlRm9yVGVzdFdpdGhWYWx1
ZTp2YWx1ZU5TIGZvcktleTprZXlOU107CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxs
VmlzaXRlZExpbmtzKCkKQEAgLTcwMCw3ICs3MDAsNyBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRT
dHJpbmcoSlNDb250ZXh0UmVmCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQg
Y2FjaGVNb2RlbCkKIHsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNd
IHNldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbF07CisgICAgW1tbbWFpbkZy
YW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNh
Y2hlTW9kZWxdOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJp
bmdSZWYgbmFtZSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCShy
ZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCAtICh2b2lkKXJlc2V0V2luZG93T3Jp
Z2luCiAKIC0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6KGNvbnN0
IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnMKIHsKLSAgICBtX2VuYWJsZURyYWdEZXN0aW5hdGlv
bkFjdGlvbkxvYWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQ7Cisg
ICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0gb3B0aW9ucy5lbmFibGVEcmFn
RGVzdGluYXRpb25BY3Rpb25Mb2FkKCk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXNlbmRlciBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCkBAIC0xNzksNyArMTc5LDggQEAgLSAoV2Vi
VmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgYwogICAgIEFTU0VSVChnVGVzdFJ1bm5l
ci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBjcmVhdGVXZWJWaWV3
QW5kT2Zmc2NyZWVuV2luZG93KCk7Ci0gICAgCisgICAgW3dlYlZpZXcgc2V0UHJlZmVyZW5jZXM6
W3NlbmRlciBwcmVmZXJlbmNlc11dOworCiAgICAgaWYgKGdUZXN0UnVubmVyLT5uZXdXaW5kb3dz
Q29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9hZEJhY2tGb3J3YXJk
TGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMjY4NzM2KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTA2LDI4ICs5MDYsMzcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lz
dAogCiAgICAgcHJlZmVyZW5jZXMtPnNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290aGluZ1R5cGVT
dGFuZGFyZCk7CiAKKyAgICBwcmVmc1ByaXZhdGUtPnNldFdlYlNRTEVuYWJsZWQodHJ1ZSk7CisK
ICAgICBwcmVmc1ByaXZhdGUtPnNldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxlZChUUlVFKTsKICAg
ICBwcmVmc1ByaXZhdGUtPmNsZWFyTmV0d29ya0xvYWRlclNlc3Npb24oKTsKIAogICAgIHNldEFs
d2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOwogfQogCitzdGF0aWMgYm9vbCBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZhbHVlLCBjb25z
dCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gaXQgPSBvcHRpb25zLmJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9IG9wdGlv
bnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCiBzdGF0aWMgdm9pZCBzZXRX
ZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMs
IGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgQ09NUHRyPElXZWJQcmVm
ZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBRdWVyeSwgcHJlZmVyZW5jZXMgfTsKIAot
ICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJs
ZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRLZXlnZW5FbGVtZW50RW5h
YmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRy
b2xzKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQob3B0
aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVx
dWVzdElkbGVDYWxsYmFja0VuYWJsZWQob3B0aW9ucy5lbmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNr
KTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChvcHRpb25z
LmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldENvbnRhY3RQ
aWNrZXJBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ29udGFjdFBpY2tlckFQSSk7Ci0gICAgcHJl
ZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViU1FMKTsKLSAgICBw
cmVmc1ByaXZhdGUtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMob3B0aW9ucy5hbGxv
d1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pOwotICAgIHByZWZlcmVu
Y2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSk7Ci0g
ICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKG9wdGlv
bnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSk7Cisg
ICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
VmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVm
c1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlVmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAg
IHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlVmFsdWUoIktleWdlbkVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAg
ICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRydWUsIG9w
dGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQo
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQi
LCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJZGxlQ2Fs
bGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEFz
eW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXN5
bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZh
dGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJDb250YWN0UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJl
ZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSwgb3B0
aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5h
YmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ1NTT01WaWV3U21vb3RoU2Nyb2xs
aW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgYXBwbGlj
YXRpb25JZCgpCkBAIC05NzMsOSArOTgyLDkgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhj
b25zdCBXVFI6OlRlcwogICAgICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAgICB9CiAKLSAg
ICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKCFvcHRpb25zLmpz
Y09wdGlvbnMoKS5lbXB0eSgpKSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlv
bnNJbkFMaW5lKHNhdmVkT3B0aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9u
cyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0aW9uczo6c2V0
T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9CiAKQEAgLTEx
NjgsNyArMTE3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUNvbnRyb2xDb21tYW5kKGNvbnN0IGMK
IAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFdUUjo6
VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXM7
CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBXVFI6OlRlc3RPcHRpb25zOjpkZWZh
dWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNC
YXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdU
Ujo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQsIFdUUjo6VGVz
dE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIApAQCAtMTIyOSw3ICsxMjM4LDcgQEAgc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAgOjpnVGVzdFJ1bm5l
ciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLmRhdGEoKSwgY29tbWFuZC5leHBlY3RlZFBp
eGVsSGFzaCk7CiAgICAgOjpnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRp
bWVvdXQubWlsbGlzZWNvbmRzKCkpOwotICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25z
LmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgOjpnVGVzdFJ1bm5lci0+c2V0RHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgdG9wTG9hZGluZ0ZyYW1l
ID0gbnVsbHB0cjsKICAgICBkb25lID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411906</attachid>
            <date>2020-10-20 13:14:05 -0700</date>
            <delta_ts>2020-10-20 14:37:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020131405.patch</filename>
            <type>text/plain</type>
            <size>37310</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzggQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisK
KyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDggKzEzMCw2IEBAIGV4dGVybiAiQyIgewogI2ltcG9ydCA8bWFjaC1vL2dldHNlY3Qu
aD4KIH0KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogQGludGVyZmFjZSBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uIDogTlNBcHBsaWNhdGlvbgog
QGVuZApAQCAtMTUyLDcgKzE1MCw3IEBAIC0gKHZvaWQpdmlldzooVUlXZWJEb2N1bWVudFZpZXcg
Kil2aWV3IGQKICAgICBBU1NFUlQoc2Nyb2xsVmlldyAmJiBbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVdlYlNjcm9sbFZpZXcgY2xhc3NdXSk7CiAgICAgY29uc3QgQ0dTaXplIHNjcm9sbFZp
ZXdTaXplID0gW3Njcm9sbFZpZXcgYm91bmRzXS5zaXplOwogICAgIENHU2l6ZSBjb250ZW50U2l6
ZSA9IG5ld0ZyYW1lLnNpemU7Ci0gICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChtYXgo
Q0dSZWN0R2V0TWF4WShuZXdGcmFtZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworICAgIGNv
bnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQoc3RkOjptYXgoQ0dSZWN0R2V0TWF4WShuZXdGcmFt
ZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwogICAgIFsoVUlXZWJTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyBzZXRDb250ZW50U2l6ZTpjb250ZW50U2l6ZV07CiB9CiBAZW5kCkBAIC0xNzgsNyAr
MTc2LDcgQEAgLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOwogQGVuZAogI2VuZGlm
CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RVUkwpOwogCiAvLyBEZWNpZGluZyB3
aGVuIGl0J3MgT0sgdG8gZHVtcCBvdXQgdGhlIHN0YXRlIGlzIGEgYml0IHRyaWNreS4gIEFsbCB0
aGVzZSBtdXN0IGJlIHRydWU6CiAvLyAtIFRoZXJlIGlzIG5vIGxvYWQgaW4gcHJvZ3Jlc3MKQEAg
LTI0OSw3ICsyNDcsNyBAQCB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
CiAgICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiB1cmxTdHJp
bmcpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNoYXIqIGNvbnN0IGlnbm9yZVNldFtd
ID0gewogICAgICAgICAvLyBLZWVwaW5nIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGluIGNh
c2Ugd2UgZXZlciBuZWVkIGl0IGFnYWluLgpAQCAtMjU4LDcgKzI1Niw3IEBAIHN0YXRpYyBib29s
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGNhc2UKLSAg
ICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOworICAgICAgICBzdGQ6OnN0cmlu
ZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKICAgICAgICAgLy8gTWF0Y2ggYXQgdGhlIGVuZCBv
ZiB0aGUgdXJsU3RyaW5nLgogICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVybFN0cmlu
Zy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgpLCBjdXJJ
Z25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTYsOCArNjE0LDggQEAgLSAo
TlNSZWN0KXJlY3RGb3JQYXJ0OihOU1Njcm9sbGVyUGFydClwYQogICAgIEJPT0wgaXNIb3Jpem9u
dGFsID0gZnJhbWVSZWN0LnNpemUud2lkdGggPiBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CiAgICAg
Q0dGbG9hdCB0cmFja0xlbmd0aCA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLndpZHRoIDog
Ym91bmRzLnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgbWluS25vYlNpemUgPSBpc0hvcml6b250
YWwgPyBib3VuZHMuc2l6ZS5oZWlnaHQgOiBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBDR0Zsb2F0
IGtub2JMZW5ndGggPSBtYXgobWluS25vYlNpemUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOwotICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHJvdW5kKFtzZWxmIGRvdWJsZVZhbHVl
XSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOworICAgIENHRmxvYXQga25vYkxlbmd0
aCA9IHN0ZDo6bWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihzdGQ6OnJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOworICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHN0ZDo6cm91bmQoW3NlbGYgZG91Ymxl
VmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkpKSk7CiAKICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdChib3VuZHMub3JpZ2luLnggKyBrbm9i
UG9zaXRpb24sIGJvdW5kcy5vcmlnaW4ueSwga25vYkxlbmd0aCwgYm91bmRzLnNpemUuaGVpZ2h0
KTsKQEAgLTY4Niw4ICs2ODQsNiBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVu
V2luZG93CiAgICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHMiXTsK
ICAgICBbV2ViVmlldyByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWw6QCJmZWVkc2VhcmNoIl07CiAK
LSAgICBbW3dlYlZpZXcgcHJlZmVyZW5jZXNdIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNd
OwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNldFdpbmRvd09jY2x1c2lvbkRl
dGVjdGlvbkVuYWJsZWQ6Tk9dOwogICAgIFtXZWJWaWV3IF9zZXRGb250QWxsb3dMaXN0OmZvbnRB
bGxvd0xpc3QoKV07CkBAIC03NTcsOCArNzUzLDYgQEAgV2ViVmlldyAqY3JlYXRlV2ViVmlld0Fu
ZE9mZnNjcmVlbldpbmRvdwogICAgIE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwID0gW3dlYlZp
ZXcgYml0bWFwSW1hZ2VSZXBGb3JDYWNoaW5nRGlzcGxheUluUmVjdDpbd2ViVmlldyBib3VuZHNd
XTsKICAgICBbd2ViVmlldyBjYWNoZURpc3BsYXlJblJlY3Q6W3dlYlZpZXcgYm91bmRzXSB0b0Jp
dG1hcEltYWdlUmVwOmltYWdlUmVwXTsKICNlbHNlCi0gICAgW1t3ZWJWaWV3IHByZWZlcmVuY2Vz
XSBfc2V0VGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQ6Tk9dOwotCiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZ2xvYmFsIFVJVmlld3MsIGFuZCBzZXQgdGhlIGtleSBVSVdpbmRvdyB0byBiZSBw
YWludGVkLgogICAgIGlmICghZ1dlYkJyb3dzZXJWaWV3KSB7CiAgICAgICAgIGdXZWJCcm93c2Vy
VmlldyA9IFt3ZWJCcm93c2VyVmlldyByZXRhaW5dOwpAQCAtODI3LDE0ICs4MjEsMTQgQEAgc3Rh
dGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoVwogICAgIFtwcmVmZXJlbmNlcyBz
ZXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNl
dFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRUcmFu
c2Zvcm1TdHJlYW1BUElFbmFibGVkOllFU107Ci0gICAgcHJlZmVyZW5jZXMuZW5jcnlwdGVkTWVk
aWFBUElFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRFbmNyeXB0ZWRNZWRpYUFQ
SUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0QWNjZXNzaWJpbGl0eU9iamVjdE1v
ZGVsRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBcmlhUmVmbGVjdGlvbkVuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VmlzdWFsVmlld3BvcnRBUElFbmFibGVkOllF
U107CiAgICAgW3ByZWZlcmVuY2VzIHNldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogICAgIFtw
cmVmZXJlbmNlcyBzZXRTZXJ2ZXJUaW1pbmdFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDpZRVNdOwotICAgIHByZWZlcmVuY2VzLnNv
dXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRT
b3VyY2VCdWZmZXJDaGFuZ2VUeXBlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRD
U1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1l
ZGlhUmVjb3JkZXJFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFJlZmVycmVyUG9s
aWN5QXR0cmlidXRlRW5hYmxlZDpZRVNdOwpAQCAtODUwLDkgKzg0NCw4IEBAIHN0YXRpYyB2b2lk
IGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFcKIH0KIAogLy8gQ2FsbGVkIGJlZm9yZSBlYWNo
IHRlc3QuCi1zdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVz
KCkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoV2Vi
UHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzKQogewotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJl
bmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKICAgICBlbmFibGVF
eHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBbcHJlZmVyZW5jZXMgc2V0
TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcms6IE5PXTsKQEAgLTkyMCw2ICs5MTMs
NyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgLy8gRW5h
YmxlIHRoZSB0cmFja2VyIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3QgV2ViVmlldyB3aWxsCiAg
ICAgLy8gY2F1c2UgaW5pdGlhbGl6YXRpb24gdG8gdXNlIHRoZSBjb3JyZWN0IGRhdGFiYXNlIHBh
dGhzLgogICAgIFtwcmVmZXJlbmNlcyBzZXRTdG9yYWdlVHJhY2tlckVuYWJsZWQ6WUVTXTsKKyAg
ICBbcHJlZmVyZW5jZXMgX3NldFRlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkOk5PXTsKICNl
bmRpZgogCiAgICAgW3ByZWZlcmVuY2VzIF9zZXRUZXh0QXV0b3NpemluZ0VuYWJsZWQ6Tk9dOwpA
QCAtOTM1LDcgKzkyOSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNp
c3QKICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3M6Tk9dOwogICAg
IFtwcmVmZXJlbmNlcyBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDpOT107CiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQVNTRVJUKFtwcmVmZXJlbmNlcyBtb2NrU2Ny
b2xsYmFyc0VuYWJsZWRdKTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0TW9ja1Njcm9sbGJhcnNFbmFi
bGVkOllFU107CiAjZW5kaWYKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBdWRpb0VuYWJsZWQ6
WUVTXTsKQEAgLTk2Myw0NCArOTU3LDUyIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5j
ZXNUb0NvbnNpc3QKICAgICBbcHJlZmVyZW5jZXMgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQ6WUVTXTsKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRDYWNoZUFQSUVuYWJsZWQ6Tk9dOwotICAg
IHByZWZlcmVuY2VzLm1lZGlhQ2FwYWJpbGl0aWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJlZmVy
ZW5jZXMgc2V0TWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkOllFU107CiAKLSAgICBwcmVmZXJlbmNl
cy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJl
ZmVyZW5jZXMgc2V0U2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQ6WUVTXTsK
IAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJTUUxFbmFibGVkOllFU107CisgICAgW3ByZWZlcmVu
Y2VzIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXTsKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1
cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbl07CiB9CiAKLXN0YXRpYyB2b2lk
IHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKK3N0YXRpYyBib29sIGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKHN0ZDo6
c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVu
Y2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwotCi0gICAgcHJlZmVyZW5jZXMuYXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudDsKLSAgICBwcmVm
ZXJlbmNlcy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBY2NlbGVy
YXRlZERyYXdpbmc7Ci0gICAgcHJlZmVyZW5jZXMubWVudUl0ZW1FbGVtZW50RW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50OwotICAgIHByZWZlcmVuY2VzLmtleWdlbkVsZW1l
bnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50OwotICAgIHByZWZlcmVuY2Vz
Lm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzOwotICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9uczsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMu
Y29sb3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKLSAgICBwcmVm
ZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKLSAgICBwcmVmZXJlbmNlcy53
ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7Ci0gICAgcHJlZmVyZW5jZXMuQ1NT
TG9naWNhbEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNTU0xvZ2ljYWw7Ci0gICAgcHJlZmVyZW5j
ZXMubGluZUhlaWdodFVuaXRzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTGluZUhlaWdodFVuaXRz
OwotICAgIHByZWZlcmVuY2VzLmFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBvcHRpb25zLmFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJF
bmFibGVkID0gb3B0aW9ucy5lbmFibGVSZXNpemVPYnNlcnZlcjsKLSAgICBwcmVmZXJlbmNlcy5D
U1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDU1NPTVZpZXdT
bW9vdGhTY3JvbGxpbmc7Ci0gICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUNvcmVNYXRoTUw7Ci0gICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFj
a0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2s7Ci0gICAgcHJlZmVy
ZW5jZXMuYXN5bmNDbGlwYm9hcmRBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3luY0NsaXBi
b2FyZEFQSTsKLSAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uOwotICAgIHByZWZlcmVuY2VzLnVzZXNQYWdlQ2FjaGUgPSBv
cHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU7Ci0gICAgcHJlZmVyZW5jZXMubGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmxheW91dEZvcm1hdHRp
bmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkOwotICAgIHByZWZlcmVuY2VzLmFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3BlY3RSYXRp
b09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0OwotICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgPSBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM7Ci0g
ICAgcHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNv
bnRhY3RQaWNrZXJBUEk7CisgICAgYXV0byBpdCA9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcygpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gb3B0aW9ucy5ib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVzKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBkZWZhdWx0VmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9y
VGVzdE9wdGlvbnMoV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRlc3RP
cHRpb25zJiBvcHRpb25zKQoreworICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKworICAgIHByZWZlcmVuY2VzLmF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJB
dHRhY2htZW50RWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLm1lbnVJdGVtRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVWYWx1ZSgiTWVudUl0ZW1FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBw
cmVmZXJlbmNlcy5rZXlnZW5FbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVy
ZVZhbHVlKCJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiSW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRlckVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29sb3JGaWx0ZXJFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gYm9vbFdl
YlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNF
bmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9
IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJXZWJHUFVFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpOworICAgIHByZWZlcmVuY2VzLkNTU0xvZ2ljYWxFbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkNTU0xvZ2ljYWxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmxpbmVIZWlnaHRVbml0c0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5j
ZUZlYXR1cmVWYWx1ZSgiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5hZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0g
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29yZU1hdGhNTEVuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFja0VuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiUmVxdWVzdElkbGVDYWxsYmFja0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJk
QVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNh
Y2hlID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hl
IiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdDb250
ZXh0SW50ZWdyYXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkxh
eW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7
CisgICAgcHJlZmVyZW5jZXMuYXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXNwZWN0UmF0aW9PZkltZ0Zyb21X
aWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAg
cHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CiB9
CiAKIC8vIENhbGxlZCBvbmNlIG9uIER1bXBSZW5kZXJUcmVlIHN0YXJ0dXAuCkBAIC0xNDM3LDcg
KzE0MzksNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIGNvbXBhcmVIaXN0b3J5SXRlbXMoaWQgCiAKIHN0
YXRpYyBOU0RhdGEgKmR1bXBBdWRpbygpCiB7Ci0gICAgY29uc3QgdmVjdG9yPGNoYXI+JiBkYXRh
VmVjdG9yID0gZ1Rlc3RSdW5uZXItPmF1ZGlvUmVzdWx0KCk7CisgICAgY29uc3QgYXV0byYgZGF0
YVZlY3RvciA9IGdUZXN0UnVubmVyLT5hdWRpb1Jlc3VsdCgpOwogCiAgICAgTlNEYXRhICpkYXRh
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGFWZWN0b3IuZGF0YSgpIGxlbmd0aDpkYXRhVmVj
dG9yLnNpemUoKV07CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0xNjMzLDcgKzE2MzUsNyBAQCBzdGF0
aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KCkKICAgICBbdWlEZWxlZ2F0ZSByZXNl
dFdpbmRvd09yaWdpbl07CiAKICAgICAvLyBXM0MgU1ZHIHRlc3RzIGV4cGVjdCB0byBiZSA0ODB4
MzYwCi0gICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RVUkwoKS5maW5k
KCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBzdHJpbmc6Om5wb3MpOworICAgIGJvb2wgaXNTVkdXM0NU
ZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgic3ZnL1czQy1TVkctMS4xIikgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpOwogICAgIE5TU2l6ZSBmcmFtZVNpemUgPSBpc1NWR1czQ1Rlc3Qg
PyBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnczY1NWR1ZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6dzNj
U1ZHVmlld0hlaWdodCkgOiBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnZpZXdXaWR0aCwgVGVzdFJ1
bm5lcjo6dmlld0hlaWdodCk7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0RnJhbWVTaXpl
OmZyYW1lU2l6ZV07CiAgICAgW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBzZXRGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIGZyYW1lU2l6ZS53aWR0aCwgZnJhbWVTaXplLmhlaWdodCldOwpAQCAtMTgzMiw5
ICsxODM0LDkgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAg
ICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NP
cHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucygpLmxlbmd0aCgp
KSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0
aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlv
bnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpz
Y09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9CiAKQEAgLTE4NDUsNiArMTg0NywxMCBAQCBz
dGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAKICAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW21haW5GcmFtZSB3ZWJWaWV3XTsKIAorICAgIFdlYlByZWZlcmVuY2VzICpwcmVm
ZXJlbmNlcyA9IFtbV2ViUHJlZmVyZW5jZXMgYWxsb2NdIGluaXRdOworICAgIFt3ZWJWaWV3IHNl
dFByZWZlcmVuY2VzOnByZWZlcmVuY2VzXTsKKyAgICBbcHJlZmVyZW5jZXMgcmVsZWFzZV07CisK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGFkanVzdFdlYkRvY3VtZW50Rm9yU3RhbmRh
cmRWaWV3cG9ydChnV2ViQnJvd3NlclZpZXcsIGdXZWJTY3JvbGxWaWV3KTsKICAgICBbd2ViVmll
dyBfc2V0QWxsb3dzTWVzc2FnaW5nOllFU107CkBAIC0xODczLDEwICsxODc5LDEwIEBAIHN0YXRp
YyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKIAogICAgIFtXZWJDYWNoZSBjbGVh
ckNhY2hlZENyZWRlbnRpYWxzXTsKIAotICAgIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3Rl
bnRWYWx1ZXMoKTsKLSAgICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKG9wdGlvbnMp
OworICAgIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMod2ViVmlldy5wcmVm
ZXJlbmNlcyk7CisgICAgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyh3ZWJWaWV3LnBy
ZWZlcmVuY2VzLCBvcHRpb25zKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgW3dlYlZpZXcgc2V0
V2FudHNMYXllcjpvcHRpb25zLmxheWVyQmFja2VkV2ViVmlld107CisgICAgW3dlYlZpZXcgc2V0
V2FudHNMYXllcjpvcHRpb25zLmxheWVyQmFja2VkV2ViVmlldygpXTsKICNlbmRpZgogCiAgICAg
VGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGZhbHNlKTsKQEAgLTE5MjAsNyArMTky
Niw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKICAgICBbW05T
UGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gZGVjbGFyZVR5cGVzOkBbTlNTdHJpbmdQYm9h
cmRUeXBlXSBvd25lcjpuaWxdOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNl
dEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6
c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKIAogICAgIFttYWluRnJhbWUgX2Ns
ZWFyT3BlbmVyXTsKIApAQCAtMTk3NiwxOSArMTk4MiwxOSBAQCBzdGF0aWMgTlNVUkwgKmNvbXB1
dGVUZXN0VVJMKE5TU3RyaW5nICpwCiAKIHN0YXRpYyBXVFI6OlRlc3RPcHRpb25zIHRlc3RPcHRp
b25zRm9yVGVzdChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQogewotICAgIFdUUjo6
VGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzID0g
V1RSOjpUZXN0T3B0aW9uczo6ZGVmYXVsdHMoKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBX
VFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBX
VFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9y
VGVzdChjb21tYW5kLCBXVFI6OlRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CiAKICAg
ICByZXR1cm4gV1RSOjpUZXN0T3B0aW9ucyB7IFdURk1vdmUoZmVhdHVyZXMpIH07CiB9CiAKLXN0
YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCitzdGF0aWMgdm9pZCBy
dW5UZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCFpbnB1
dExpbmUuZW1wdHkoKSk7CiAKICAgICBhdXRvIGNvbW1hbmQgPSBXVFI6OnBhcnNlSW5wdXRMaW5l
KGlucHV0TGluZSk7Ci0gICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhP
clVSTDsKKyAgICBhdXRvIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOwogICAgIGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBkdW1wUGl4
ZWxzRm9yQWxsVGVzdHM7CiAKICAgICBOU1N0cmluZyAqcGF0aE9yVVJMU3RyaW5nID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnBhdGhPclVSTC5jX3N0cigpXTsKQEAgLTIwMjMsNyAr
MjAyOSw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBn
VGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVk
UGl4ZWxIYXNoKTsKICAgICBnVGVzdFJ1bm5lci0+c2V0QWxsb3dlZEhvc3RzKGFsbG93ZWRIb3N0
cyk7CiAgICAgZ1Rlc3RSdW5uZXItPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0Lm1p
bGxpc2Vjb25kcygpKTsKLSAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3Rh
dGUob3B0aW9ucywgUmVzZXRUaW1lOjpCZWZvcmVUZXN0KTsKIApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
NzYsMTQgKzU3NiwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VQYXVzZWQoYm9vbCBwYXVz
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykK
IHsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZDpmbGFnXTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCiB7CiAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoQ0YgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGgpKTsKICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6KF9fYnJpZGdlIE5TU3RyaW5nICopcGF0aENGLmdldCgpXTsKLSAgICBbW1dl
YlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b246dXJsXTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb246dXJsXTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZv
clVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJp
bmdSZWYgdmFsdWUpCkBAIC02MDksNyArNjA5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpvdmVycmlk
ZVByZWZlcmVuY2UoSlNTdAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdmFsdWVDRiA9IGFk
b3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmFsdWUpKTsK
ICAgICBOU1N0cmluZyAqdmFsdWVOUyA9IChfX2JyaWRnZSBOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0
KCk7CiAKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIF9zZXRQcmVm
ZXJlbmNlRm9yVGVzdFdpdGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107CisgICAgW1tbbWFp
bkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZvclRlc3RXaXRoVmFs
dWU6dmFsdWVOUyBmb3JLZXk6a2V5TlNdOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCkBAIC03MDAsNyArNzAwLDcgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5k
U3RyaW5nKEpTQ29udGV4dFJlZgogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhY2hlTW9kZWwoaW50
IGNhY2hlTW9kZWwpCiB7Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2Vz
XSBzZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWxdOworICAgIFtbW21haW5G
cmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbClj
YWNoZU1vZGVsXTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3Ry
aW5nUmVmIG5hbWUpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQko
cmV2aXNpb24gMjY4NzM2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgLSAodm9pZClyZXNldFdpbmRvd09y
aWdpbgogCiAtICh2b2lkKXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nOihjb25z
dCBXVFI6OlRlc3RPcHRpb25zJilvcHRpb25zCiB7Ci0gICAgbV9lbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkID0gb3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkOwor
ICAgIG1fZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IG9wdGlvbnMuZW5hYmxlRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCgpOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgc2V0RnJhbWU6KE5TUmVjdClmcmFtZQpAQCAtMTc5LDcgKzE3OSw4IEBAIC0gKFdl
YlZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGMKICAgICBBU1NFUlQoZ1Rlc3RSdW5u
ZXItPndhaXRUb0R1bXAoKSk7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gY3JlYXRlV2ViVmll
d0FuZE9mZnNjcmVlbldpbmRvdygpOwotICAgIAorICAgIFt3ZWJWaWV3IHNldFByZWZlcmVuY2Vz
OltzZW5kZXIgcHJlZmVyZW5jZXNdXTsKKwogICAgIGlmIChnVGVzdFJ1bm5lci0+bmV3V2luZG93
c0NvcHlCYWNrRm9yd2FyZExpc3QoKSkKICAgICAgICAgW3dlYlZpZXcgX2xvYWRCYWNrRm9yd2Fy
ZExpc3RGcm9tT3RoZXJWaWV3OnNlbmRlcl07CiAgICAgCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwNiwyOCArOTA2LDM3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNp
c3QKIAogICAgIHByZWZlcmVuY2VzLT5zZXRGb250U21vb3RoaW5nKEZvbnRTbW9vdGhpbmdUeXBl
U3RhbmRhcmQpOwogCisgICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKHRydWUpOwor
CiAgICAgcHJlZnNQcml2YXRlLT5zZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJsZWQoVFJVRSk7CiAg
ICAgcHJlZnNQcml2YXRlLT5jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uKCk7CiAKICAgICBzZXRB
bHdheXNBY2NlcHRDb29raWVzKGZhbHNlKTsKIH0KIAorc3RhdGljIGJvb2wgYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSwgY29u
c3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGl0ID0gb3B0aW9ucy5i
b29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkuZmluZChrZXkpOworICAgIGlmIChpdCAhPSBvcHRp
b25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKwogc3RhdGljIHZvaWQgc2V0
V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2Vz
LCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewogICAgIENPTVB0cjxJV2ViUHJl
ZmVyZW5jZXNQcml2YXRlOD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZlcmVuY2VzIH07CiAK
LSAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFi
bGVNZW51SXRlbUVsZW1lbnQpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVu
YWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKLSAgICBwcmVmc1ByaXZhdGUtPnNl
dE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250
cm9scyk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKG9w
dGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldFJl
cXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkKG9wdGlvbnMuZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFj
ayk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQob3B0aW9u
cy5lbmFibGVBc3luY0NsaXBib2FyZEFQSSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDb250YWN0
UGlja2VyQVBJRW5hYmxlZChvcHRpb25zLmVuYWJsZUNvbnRhY3RQaWNrZXJBUEkpOwotICAgIHBy
ZWZzUHJpdmF0ZS0+c2V0V2ViU1FMRW5hYmxlZChvcHRpb25zLmVuYWJsZVdlYlNRTCk7Ci0gICAg
cHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKG9wdGlvbnMuYWxs
b3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKTsKLSAgICBwcmVmZXJl
bmNlcy0+c2V0VXNlc1BhZ2VDYWNoZShvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwot
ICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZChvcHRp
b25zLmVuYWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGluZyk7CisgICAgcHJlZmVyZW5jZXMtPnNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpOwor
ICAgIHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVy
ZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJl
ZnNQcml2YXRlLT5zZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAg
ICBwcmVmc1ByaXZhdGUtPnNldEtleWdlbkVsZW1lbnRFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNl
RmVhdHVyZVZhbHVlKCJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7Cisg
ICAgcHJlZnNQcml2YXRlLT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBv
cHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVk
KGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVk
IiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldFJlcXVlc3RJZGxlQ2Fs
bGJhY2tFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJSZXF1ZXN0SWRsZUNh
bGxiYWNrRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRB
c3luY0NsaXBib2FyZEFQSUVuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFz
eW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2
YXRlLT5zZXRDb250YWN0UGlja2VyQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVW
YWx1ZSgiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHBy
ZWZzUHJpdmF0ZS0+c2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyhib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9w
dGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Ntb290aFNjcm9sbGluZ0Vu
YWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9s
bGluZ0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOwogfQogCiBzdGF0aWMgU3RyaW5nIGFwcGxp
Y2F0aW9uSWQoKQpAQCAtOTczLDkgKzk4Miw5IEBAIHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMo
Y29uc3QgV1RSOjpUZXMKICAgICAgICAgc2F2ZWRPcHRpb25zLmNsZWFyKCk7CiAgICAgfQogCi0g
ICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgeworICAgIGlmICghb3B0aW9ucy5q
c2NPcHRpb25zKCkuZW1wdHkoKSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRp
b25zSW5BTGluZShzYXZlZE9wdGlvbnMpOwotICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlv
bnMob3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OnNl
dE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zKCkuY19zdHIoKSk7CiAgICAgfQogfQogCkBAIC0x
MTY4LDcgKzExNzcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBj
CiAKIHN0YXRpYyBXVFI6OlRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBXVFI6
OlRlc3RDb21tYW5kJiBjb21tYW5kKQogewotICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gV1RSOjpUZXN0T3B0aW9uczo6ZGVm
YXVsdHMoKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZlYXR1cmVz
QmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBX
VFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBXVFI6OlRl
c3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CiAKQEAgLTEyMjksNyArMTIzOCw3IEBAIHN0
YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIDo6Z1Rlc3RSdW5u
ZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTC5kYXRhKCksIGNvbW1hbmQuZXhwZWN0ZWRQ
aXhlbEhhc2gpOwogICAgIDo6Z1Rlc3RSdW5uZXItPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50
aW1lb3V0Lm1pbGxpc2Vjb25kcygpKTsKLSAgICA6OmdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9u
cy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBv
cHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAgIHRvcExvYWRpbmdGcmFt
ZSA9IG51bGxwdHI7CiAgICAgZG9uZSA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411916</attachid>
            <date>2020-10-20 14:37:53 -0700</date>
            <delta_ts>2020-10-20 16:24:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020143752.patch</filename>
            <type>text/plain</type>
            <size>36916</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBT
dG9wIHVzaW5nIFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSwgYWxsb3dpbmcg
Y29tcGxldGUgcmVzZXRpbmcgb2YgcHJlZmVyZW5jZXMgYnkKKyAgICAgICAgICBhbGxvY2F0aW5n
IGEgbmV3IHdoZW4gbmVlZGVkLiBSZW1vdmUgYWxsIHVzZXMgb2YgW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIGFuZCByZXBsYWNlCisgICAgICAgICAgYnkgZ2V0dGluZyB0aGUg
cHJlZmVyZW5jZXMgZnJvbSB0aGUgV2ViVmlldyBleHBsaWNpdGx5LiBUaGlzIGFsc28gbWVhbnMg
bWFraW5nIHN1cmUgb3RoZXIgV2ViVmlldydzCisgICAgICAgICAgY3JlYXRlZCAoc3VjaCBhcyB0
aGUgb25lcyBtYWRlIGluIHRoZSBVSURlbGVnYXRlKSBzaGFyZSB0aGUgc2FtZSBXZWJQcmVmZXJl
bmNlcy4KKworICAgICAgICAtIE1vdmUgc29tZSByYW5kb20gc2V0dGluZyBvZiBwcmVmZXJlbmNl
cyB0byBjZW50cmFsaXplZCByZXNldCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKwogMjAyMC0xMC0xNiAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc2tlbGV0b24gaW1wbGVtZW50YXRpb24g
b2YgTWVkaWEgU2Vzc2lvbiBBUEkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDQgQEAKIAogbmFtZXNwYWNlIFdUUiB7
CiAKK2NvbnN0IFRlc3RGZWF0dXJlcyYgVGVzdE9wdGlvbnM6OmRlZmF1bHRzKCkKK3sKKyAgICBz
dGF0aWMgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmIChmZWF0dXJlcy5ib29sV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgZmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyA9IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBXZWJQcmVmZXJlbmNl
IHZhbHVlcyB0aGF0IG11c3QgYWx3YXlzIGJlIHNldCBhcyB0aGV5IG1heQorICAgICAgICAgICAg
Ly8gZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBXZWJQcmVmZXJlbmNlcyoueWFt
bCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgeyAiQWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUgfSwKKyAgICAgICAgICAgIHsgIkFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlVzZXNCYWNrRm9yd2FyZENh
Y2hlIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbG9yRmlsdGVyRW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAg
ICB7ICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIk1v
ZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJDU1NM
b2dpY2FsRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJMaW5lSGVpZ2h0VW5pdHNF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkIiwgdHJ1ZSB9LAorICAgICAgICAgICAgeyAiTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0cnVlIH0sCisKKyAgICAgICAgICAgIHsgIkFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQXNwZWN0
UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAg
ICAgeyAiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsg
IkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAg
eyAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiQ29y
ZU1hdGhNTEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVxdWVzdElkbGVDYWxs
YmFja0VuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiUmVzaXplT2JzZXJ2ZXJFbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIldlYkdQVUVuYWJsZWQiLCBmYWxzZSB9LAor
ICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBUZXN0T3B0aW9u
czo6a2V5VHlwZU1hcHBpbmcoKQogewogICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiBtYXAgewpAQCAtNDcsNTYgKzg1LDQ3
IEBAIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGUKICAgICByZXR1cm4g
bWFwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBzZXRWYWx1ZUlmU2V0
SW5NYXAoVCYgdmFsdWVUb1NldCwgc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApCitib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgaWYgKG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJl
cy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mZWF0dXJlcy51aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0
aW9ucy5tX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJl
cyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlVGVzdFJ1bm5lckZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZl
YXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0
UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvclRlc3RSdW5u
ZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIFQg
ZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFQ+JiBt
YXApCiB7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlVG9TZXQgPSBpdC0+c2Vjb25kOwotfQot
Ci1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIHRlc3RGZWF0dXJlcykKLXsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMsICJBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcywgIkFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0
dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZywg
IkFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50LCAiQXR0YWNobWVudEVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlLCAiVXNlc0JhY2tGb3J3YXJkQ2FjaGUiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbG9yRmlsdGVy
LCAiQ29sb3JGaWx0ZXJFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMs
ICJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVJbnRlcnNlY3Rpb25P
YnNlcnZlciwgIkludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlS2V5
Z2VuRWxlbWVudCwgIktleWdlbkVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNZW51SXRl
bUVsZW1lbnQsICJNZW51SXRlbUVsZW1lbnRFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzLCAiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5h
YmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlv
bkxvYWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciwgImR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIHRlc3RGZWF0dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAobGF5ZXJCYWNrZWRXZWJWaWV3LCAibGF5ZXJCYWNrZWRXZWJWaWV3Iiwg
dGVzdEZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcCh1c2VFcGhlbWVyYWxTZXNzaW9uLCAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRlc3RGZWF0
dXJlcy5ib29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgdGVzdEZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGpzY09wdGlvbnMsICJqc2NPcHRpb25zIiwgdGVzdEZlYXR1cmVzLnN0cmlu
Z1Rlc3RSdW5uZXJGZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NT
TG9naWNhbCwgIkNTU0xvZ2ljYWxFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUxpbmVIZWlnaHRVbml0cywg
IkxpbmVIZWlnaHRVbml0c0VuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllcywgInNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIiwgdGVz
dEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFw
KGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkLCAiTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKTsKLQotICAgIHNldFZhbHVlSWZTZXRJbk1hcChhZENsaWNrQXR0cmlidXRpb25F
bmFibGVkLCAiQWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHQsICJBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0
VmFsdWVJZlNldEluTWFwKGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJLCAiQXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRW
YWx1ZUlmU2V0SW5NYXAoZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nLCAiQ1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvbnRhY3RQaWNrZXJBUEksICJDb250
YWN0UGlja2VyQVBJRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7
Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNvcmVNYXRoTUwsICJDb3JlTWF0aE1MRW5h
YmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2ssICJSZXF1ZXN0SWRsZUNhbGxiYWNr
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFs
dWVJZlNldEluTWFwKGVuYWJsZVJlc2l6ZU9ic2VydmVyLCAiUmVzaXplT2JzZXJ2ZXJFbmFibGVk
IiwgdGVzdEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0
SW5NYXAoZW5hYmxlV2ViR1BVLCAiV2ViR1BVRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcyk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworYm9vbCBUZXN0T3B0
aW9uczo6Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwogfQogCi1ib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ1Rlc3RSdW5u
ZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwor
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3Ry
aW5nVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1MyArMzEsMzggQEAKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBhbmQgcmVwbGFjZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIFdl
YiBQcmVmZXJlbmNlcwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNv
bG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFj
ZSB3aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEludGVybmFsIEZlYXR1
cmVzCi0gICAgYm9vbCBlbmFibGVDU1NMb2dpY2FsIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUxpbmVIZWlnaHRVbml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZWxlY3Rpb25BY3Jv
c3NTaGFkb3dCb3VuZGFyaWVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGFuZCByZXBsYWNlIHdpdGggYWNjZXNzIHRvIFRlc3RGZWF0dXJlcyBzZXQuCi0gICAg
Ly8gRXhwZXJpbWVudGFsIEZlYXR1cmVzCi0gICAgYm9vbCBhZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUNvbnRhY3RQaWNrZXJBUEkgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ29yZU1hdGhNTCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVJlc2l6ZU9ic2VydmVyIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkdQVSB7IGZhbHNlIH07CitjbGFzcyBUZXN0T3B0aW9ucyB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFRlc3RGZWF0dXJlcyYgZGVmYXVsdHMoKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVy
S2V5VHlwZT4mIGtleVR5cGVNYXBwaW5nKCk7CiAKLSAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZp
YyBGZWF0dXJlcwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlV2ViU1FMIHsgdHJ1ZSB9OwotICAgIGJvb2wgbGF5ZXJCYWNrZWRXZWJWaWV3
IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwotICAg
IHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgICAgICA6IG1fZmVhdHVyZXMoc3RkOjptb3ZlKGZlYXR1cmVzKSkKKyAgICB7
CisgICAgfQogCi0gICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKICAgICBi
b29sIHdlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpIGNv
bnN0OwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYga2V5VHlwZU1hcHBpbmcoKTsKKworICAgIC8vIFRlc3Qg
UnVubmVyIFNwZWNpZmljIEZlYXR1cmVzCisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkKCkgY29uc3QgeyByZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUo
ImVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQiLCBmYWxzZSk7IH0KKyAgICBib29sIGxh
eWVyQmFja2VkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZh
bHVlKCJsYXllckJhY2tlZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgidXNl
RXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVGVzdFJ1bm5lckZlYXR1
cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0pOyB9CisgICAgc3Rk
OjpzdHJpbmcganNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0
dXJlVmFsdWUoImpzY09wdGlvbnMiLCB7IH0pOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV9mZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzOyB9CisgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+JiBkb3VibGVXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmRvdWJsZVdlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+JiB1aW50MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzLnVpbnQzMldlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBzdHJpbmdXZWJQ
cmVmZXJlbmNlRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnN0cmluZ1dlYlBy
ZWZlcmVuY2VGZWF0dXJlczsgfQorCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvV2ViS2l0TGVn
YWN5UHJlZmVyZW5jZUtleShjb25zdCBzdGQ6OnN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisK
KyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDggKzEzMCw2IEBAIGV4dGVybiAiQyIgewogI2ltcG9ydCA8bWFjaC1vL2dldHNlY3Qu
aD4KIH0KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogQGludGVyZmFjZSBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uIDogTlNBcHBsaWNhdGlvbgog
QGVuZApAQCAtMTUyLDcgKzE1MCw3IEBAIC0gKHZvaWQpdmlldzooVUlXZWJEb2N1bWVudFZpZXcg
Kil2aWV3IGQKICAgICBBU1NFUlQoc2Nyb2xsVmlldyAmJiBbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVdlYlNjcm9sbFZpZXcgY2xhc3NdXSk7CiAgICAgY29uc3QgQ0dTaXplIHNjcm9sbFZp
ZXdTaXplID0gW3Njcm9sbFZpZXcgYm91bmRzXS5zaXplOwogICAgIENHU2l6ZSBjb250ZW50U2l6
ZSA9IG5ld0ZyYW1lLnNpemU7Ci0gICAgY29udGVudFNpemUuaGVpZ2h0ID0gQ0dSb3VuZChtYXgo
Q0dSZWN0R2V0TWF4WShuZXdGcmFtZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOworICAgIGNv
bnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQoc3RkOjptYXgoQ0dSZWN0R2V0TWF4WShuZXdGcmFt
ZSksIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwogICAgIFsoVUlXZWJTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyBzZXRDb250ZW50U2l6ZTpjb250ZW50U2l6ZV07CiB9CiBAZW5kCkBAIC0xNzgsNyAr
MTc2LDcgQEAgLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOwogQGVuZAogI2VuZGlm
CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0VVJMKTsKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RVUkwpOwogCiAvLyBEZWNpZGluZyB3
aGVuIGl0J3MgT0sgdG8gZHVtcCBvdXQgdGhlIHN0YXRlIGlzIGEgYml0IHRyaWNreS4gIEFsbCB0
aGVzZSBtdXN0IGJlIHRydWU6CiAvLyAtIFRoZXJlIGlzIG5vIGxvYWQgaW4gcHJvZ3Jlc3MKQEAg
LTI0OSw3ICsyNDcsNyBAQCB2b2lkIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
CiAgICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiB1cmxTdHJp
bmcpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNoYXIqIGNvbnN0IGlnbm9yZVNldFtd
ID0gewogICAgICAgICAvLyBLZWVwaW5nIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGluIGNh
c2Ugd2UgZXZlciBuZWVkIGl0IGFnYWluLgpAQCAtMjU4LDcgKzI1Niw3IEBAIHN0YXRpYyBib29s
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTogaWdub3JlIGNhc2UKLSAg
ICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOworICAgICAgICBzdGQ6OnN0cmlu
ZyBjdXJJZ25vcmUoaWdub3JlU2V0W2ldKTsKICAgICAgICAgLy8gTWF0Y2ggYXQgdGhlIGVuZCBv
ZiB0aGUgdXJsU3RyaW5nLgogICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVybFN0cmlu
Zy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgpLCBjdXJJ
Z25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MTYsOCArNjE0LDggQEAgLSAo
TlNSZWN0KXJlY3RGb3JQYXJ0OihOU1Njcm9sbGVyUGFydClwYQogICAgIEJPT0wgaXNIb3Jpem9u
dGFsID0gZnJhbWVSZWN0LnNpemUud2lkdGggPiBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CiAgICAg
Q0dGbG9hdCB0cmFja0xlbmd0aCA9IGlzSG9yaXpvbnRhbCA/IGJvdW5kcy5zaXplLndpZHRoIDog
Ym91bmRzLnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgbWluS25vYlNpemUgPSBpc0hvcml6b250
YWwgPyBib3VuZHMuc2l6ZS5oZWlnaHQgOiBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBDR0Zsb2F0
IGtub2JMZW5ndGggPSBtYXgobWluS25vYlNpemUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOwotICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHJvdW5kKFtzZWxmIGRvdWJsZVZhbHVl
XSAqICh0cmFja0xlbmd0aCAtIGtub2JMZW5ndGgpKSkpOworICAgIENHRmxvYXQga25vYkxlbmd0
aCA9IHN0ZDo6bWF4KG1pbktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihzdGQ6OnJvdW5k
KHRyYWNrTGVuZ3RoICogW3NlbGYga25vYlByb3BvcnRpb25dKSkpOworICAgIENHRmxvYXQga25v
YlBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oKHN0ZDo6cm91bmQoW3NlbGYgZG91Ymxl
VmFsdWVdICogKHRyYWNrTGVuZ3RoIC0ga25vYkxlbmd0aCkpKSk7CiAKICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdChib3VuZHMub3JpZ2luLnggKyBrbm9i
UG9zaXRpb24sIGJvdW5kcy5vcmlnaW4ueSwga25vYkxlbmd0aCwgYm91bmRzLnNpemUuaGVpZ2h0
KTsKQEAgLTY4Niw4ICs2ODQsNiBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVu
V2luZG93CiAgICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHMiXTsK
ICAgICBbV2ViVmlldyByZWdpc3RlclVSTFNjaGVtZUFzTG9jYWw6QCJmZWVkc2VhcmNoIl07CiAK
LSAgICBbW3dlYlZpZXcgcHJlZmVyZW5jZXNdIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNd
OwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNldFdpbmRvd09jY2x1c2lvbkRl
dGVjdGlvbkVuYWJsZWQ6Tk9dOwogICAgIFtXZWJWaWV3IF9zZXRGb250QWxsb3dMaXN0OmZvbnRB
bGxvd0xpc3QoKV07CkBAIC03NTcsOCArNzUzLDYgQEAgV2ViVmlldyAqY3JlYXRlV2ViVmlld0Fu
ZE9mZnNjcmVlbldpbmRvdwogICAgIE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwID0gW3dlYlZp
ZXcgYml0bWFwSW1hZ2VSZXBGb3JDYWNoaW5nRGlzcGxheUluUmVjdDpbd2ViVmlldyBib3VuZHNd
XTsKICAgICBbd2ViVmlldyBjYWNoZURpc3BsYXlJblJlY3Q6W3dlYlZpZXcgYm91bmRzXSB0b0Jp
dG1hcEltYWdlUmVwOmltYWdlUmVwXTsKICNlbHNlCi0gICAgW1t3ZWJWaWV3IHByZWZlcmVuY2Vz
XSBfc2V0VGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQ6Tk9dOwotCiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZ2xvYmFsIFVJVmlld3MsIGFuZCBzZXQgdGhlIGtleSBVSVdpbmRvdyB0byBiZSBw
YWludGVkLgogICAgIGlmICghZ1dlYkJyb3dzZXJWaWV3KSB7CiAgICAgICAgIGdXZWJCcm93c2Vy
VmlldyA9IFt3ZWJCcm93c2VyVmlldyByZXRhaW5dOwpAQCAtODI3LDE0ICs4MjEsMTQgQEAgc3Rh
dGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoVwogICAgIFtwcmVmZXJlbmNlcyBz
ZXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNl
dFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRUcmFu
c2Zvcm1TdHJlYW1BUElFbmFibGVkOllFU107Ci0gICAgcHJlZmVyZW5jZXMuZW5jcnlwdGVkTWVk
aWFBUElFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRFbmNyeXB0ZWRNZWRpYUFQ
SUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0QWNjZXNzaWJpbGl0eU9iamVjdE1v
ZGVsRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRBcmlhUmVmbGVjdGlvbkVuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VmlzdWFsVmlld3BvcnRBUElFbmFibGVkOllF
U107CiAgICAgW3ByZWZlcmVuY2VzIHNldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogICAgIFtw
cmVmZXJlbmNlcyBzZXRTZXJ2ZXJUaW1pbmdFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDpZRVNdOwotICAgIHByZWZlcmVuY2VzLnNv
dXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkID0gWUVTOworICAgIFtwcmVmZXJlbmNlcyBzZXRT
b3VyY2VCdWZmZXJDaGFuZ2VUeXBlRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRD
U1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1l
ZGlhUmVjb3JkZXJFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFJlZmVycmVyUG9s
aWN5QXR0cmlidXRlRW5hYmxlZDpZRVNdOwpAQCAtODUwLDkgKzg0NCw4IEBAIHN0YXRpYyB2b2lk
IGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFcKIH0KIAogLy8gQ2FsbGVkIGJlZm9yZSBlYWNo
IHRlc3QuCi1zdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVz
KCkKK3N0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoV2Vi
UHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzKQogewotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJl
bmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKICAgICBlbmFibGVF
eHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBbcHJlZmVyZW5jZXMgc2V0
TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcms6IE5PXTsKQEAgLTkyMCw2ICs5MTMs
NyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgLy8gRW5h
YmxlIHRoZSB0cmFja2VyIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3QgV2ViVmlldyB3aWxsCiAg
ICAgLy8gY2F1c2UgaW5pdGlhbGl6YXRpb24gdG8gdXNlIHRoZSBjb3JyZWN0IGRhdGFiYXNlIHBh
dGhzLgogICAgIFtwcmVmZXJlbmNlcyBzZXRTdG9yYWdlVHJhY2tlckVuYWJsZWQ6WUVTXTsKKyAg
ICBbcHJlZmVyZW5jZXMgX3NldFRlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkOk5PXTsKICNl
bmRpZgogCiAgICAgW3ByZWZlcmVuY2VzIF9zZXRUZXh0QXV0b3NpemluZ0VuYWJsZWQ6Tk9dOwpA
QCAtOTM1LDcgKzkyOSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNp
c3QKICAgICBbcHJlZmVyZW5jZXMgc2V0VXNlUHJlSFRNTDVQYXJzZXJRdWlya3M6Tk9dOwogICAg
IFtwcmVmZXJlbmNlcyBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDpOT107CiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQVNTRVJUKFtwcmVmZXJlbmNlcyBtb2NrU2Ny
b2xsYmFyc0VuYWJsZWRdKTsKKyAgICBbcHJlZmVyZW5jZXMgc2V0TW9ja1Njcm9sbGJhcnNFbmFi
bGVkOllFU107CiAjZW5kaWYKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBdWRpb0VuYWJsZWQ6
WUVTXTsKQEAgLTk2Myw0NCArOTU3LDUyIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5j
ZXNUb0NvbnNpc3QKICAgICBbcHJlZmVyZW5jZXMgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQ6WUVTXTsKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRDYWNoZUFQSUVuYWJsZWQ6Tk9dOwotICAg
IHByZWZlcmVuY2VzLm1lZGlhQ2FwYWJpbGl0aWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJlZmVy
ZW5jZXMgc2V0TWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkOllFU107CiAKLSAgICBwcmVmZXJlbmNl
cy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IFlFUzsKKyAgICBbcHJl
ZmVyZW5jZXMgc2V0U2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQ6WUVTXTsK
IAogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJTUUxFbmFibGVkOllFU107CisgICAgW3ByZWZlcmVu
Y2VzIF9zZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW1dlYlByZWZlcmVuY2Vz
IF9jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uXTsKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1
cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbl07CiB9CiAKLXN0YXRpYyB2b2lk
IHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYg
b3B0aW9ucykKK3N0YXRpYyBib29sIGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKHN0ZDo6
c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVu
Y2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwotCi0gICAgcHJlZmVyZW5jZXMuYXR0YWNobWVudEVs
ZW1lbnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudDsKLSAgICBwcmVm
ZXJlbmNlcy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBY2NlbGVy
YXRlZERyYXdpbmc7Ci0gICAgcHJlZmVyZW5jZXMubWVudUl0ZW1FbGVtZW50RW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50OwotICAgIHByZWZlcmVuY2VzLmtleWdlbkVsZW1l
bnRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50OwotICAgIHByZWZlcmVuY2Vz
Lm1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzOwotICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9uczsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMu
Y29sb3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKLSAgICBwcmVm
ZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKLSAgICBwcmVmZXJlbmNlcy53
ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7Ci0gICAgcHJlZmVyZW5jZXMuQ1NT
TG9naWNhbEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNTU0xvZ2ljYWw7Ci0gICAgcHJlZmVyZW5j
ZXMubGluZUhlaWdodFVuaXRzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTGluZUhlaWdodFVuaXRz
OwotICAgIHByZWZlcmVuY2VzLmFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQgPSBvcHRpb25zLmFk
Q2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQ7Ci0gICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJF
bmFibGVkID0gb3B0aW9ucy5lbmFibGVSZXNpemVPYnNlcnZlcjsKLSAgICBwcmVmZXJlbmNlcy5D
U1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDU1NPTVZpZXdT
bW9vdGhTY3JvbGxpbmc7Ci0gICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUNvcmVNYXRoTUw7Ci0gICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFj
a0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVJlcXVlc3RJZGxlQ2FsbGJhY2s7Ci0gICAgcHJlZmVy
ZW5jZXMuYXN5bmNDbGlwYm9hcmRBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3luY0NsaXBi
b2FyZEFQSTsKLSAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uOwotICAgIHByZWZlcmVuY2VzLnVzZXNQYWdlQ2FjaGUgPSBv
cHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU7Ci0gICAgcHJlZmVyZW5jZXMubGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmxheW91dEZvcm1hdHRp
bmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkOwotICAgIHByZWZlcmVuY2VzLmFzcGVjdFJhdGlv
T2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gb3B0aW9ucy5lbmFibGVBc3BlY3RSYXRp
b09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0OwotICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgPSBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM7Ci0g
ICAgcHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNv
bnRhY3RQaWNrZXJBUEk7CisgICAgYXV0byBpdCA9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcygpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gb3B0aW9ucy5ib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVzKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBkZWZhdWx0VmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9y
VGVzdE9wdGlvbnMoV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRlc3RP
cHRpb25zJiBvcHRpb25zKQoreworICAgIHByZWZlcmVuY2VzLnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKworICAgIHByZWZlcmVuY2VzLmF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJB
dHRhY2htZW50RWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLm1lbnVJdGVtRWxlbWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1
cmVWYWx1ZSgiTWVudUl0ZW1FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBw
cmVmZXJlbmNlcy5rZXlnZW5FbGVtZW50RW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVy
ZVZhbHVlKCJLZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVm
ZXJlbmNlcy5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBib29sV2ViUHJlZmVy
ZW5jZUZlYXR1cmVWYWx1ZSgiSW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRlckVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29sb3JGaWx0ZXJFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHBy
ZWZlcmVuY2VzLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gYm9vbFdl
YlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNF
bmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9
IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJXZWJHUFVFbmFibGVkIiwgZmFsc2UsIG9w
dGlvbnMpOworICAgIHByZWZlcmVuY2VzLkNTU0xvZ2ljYWxFbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkNTU0xvZ2ljYWxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwor
ICAgIHByZWZlcmVuY2VzLmxpbmVIZWlnaHRVbml0c0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5j
ZUZlYXR1cmVWYWx1ZSgiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5hZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIkFkQ2xpY2tBdHRyaWJ1dGlvbkVuYWJsZWQiLCBmYWxzZSwgb3B0
aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVzaXplT2JzZXJ2ZXJFbmFibGVkID0gYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIGZhbHNlLCBvcHRp
b25zKTsKKyAgICBwcmVmZXJlbmNlcy5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkID0g
Ym9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29yZU1hdGhNTEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29yZU1hdGhNTEVuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMucmVxdWVzdElkbGVDYWxsYmFja0VuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiUmVxdWVzdElkbGVDYWxsYmFja0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYXN5bmNDbGlwYm9hcmRB
UElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJk
QVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNh
Y2hlID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hl
IiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdDb250
ZXh0SW50ZWdyYXRpb25FbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkxh
eW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkIiwgdHJ1ZSwgb3B0aW9ucyk7
CisgICAgcHJlZmVyZW5jZXMuYXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXNwZWN0UmF0aW9PZkltZ0Zyb21X
aWR0aEFuZEhlaWdodEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSwgb3B0aW9ucyk7CisgICAg
cHJlZmVyZW5jZXMuY29udGFjdFBpY2tlckFQSUVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CiB9
CiAKIC8vIENhbGxlZCBvbmNlIG9uIER1bXBSZW5kZXJUcmVlIHN0YXJ0dXAuCkBAIC0xNDM3LDcg
KzE0MzksNyBAQCBzdGF0aWMgTlNJbnRlZ2VyIGNvbXBhcmVIaXN0b3J5SXRlbXMoaWQgCiAKIHN0
YXRpYyBOU0RhdGEgKmR1bXBBdWRpbygpCiB7Ci0gICAgY29uc3QgdmVjdG9yPGNoYXI+JiBkYXRh
VmVjdG9yID0gZ1Rlc3RSdW5uZXItPmF1ZGlvUmVzdWx0KCk7CisgICAgY29uc3QgYXV0byYgZGF0
YVZlY3RvciA9IGdUZXN0UnVubmVyLT5hdWRpb1Jlc3VsdCgpOwogCiAgICAgTlNEYXRhICpkYXRh
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGFWZWN0b3IuZGF0YSgpIGxlbmd0aDpkYXRhVmVj
dG9yLnNpemUoKV07CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0xNjMzLDcgKzE2MzUsNyBAQCBzdGF0
aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KCkKICAgICBbdWlEZWxlZ2F0ZSByZXNl
dFdpbmRvd09yaWdpbl07CiAKICAgICAvLyBXM0MgU1ZHIHRlc3RzIGV4cGVjdCB0byBiZSA0ODB4
MzYwCi0gICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RVUkwoKS5maW5k
KCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBzdHJpbmc6Om5wb3MpOworICAgIGJvb2wgaXNTVkdXM0NU
ZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgic3ZnL1czQy1TVkctMS4xIikgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpOwogICAgIE5TU2l6ZSBmcmFtZVNpemUgPSBpc1NWR1czQ1Rlc3Qg
PyBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnczY1NWR1ZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6dzNj
U1ZHVmlld0hlaWdodCkgOiBOU01ha2VTaXplKFRlc3RSdW5uZXI6OnZpZXdXaWR0aCwgVGVzdFJ1
bm5lcjo6dmlld0hlaWdodCk7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0RnJhbWVTaXpl
OmZyYW1lU2l6ZV07CiAgICAgW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBzZXRGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIGZyYW1lU2l6ZS53aWR0aCwgZnJhbWVTaXplLmhlaWdodCldOwpAQCAtMTgzMiw5
ICsxODM0LDkgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0aW9ucyhjb25zdCBXVFI6OlRlcwogICAg
ICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9ucy5qc2NP
cHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucygpLmxlbmd0aCgp
KSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0
aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlv
bnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLmpz
Y09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9CiAKQEAgLTE4NzMsMTAgKzE4NzUsMTAgQEAg
c3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogCiAgICAgW1dlYkNhY2hl
IGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHNdOwogCi0gICAgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29u
c2lzdGVudFZhbHVlcygpOwotICAgIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMob3B0
aW9ucyk7CisgICAgcmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyh3ZWJWaWV3
LnByZWZlcmVuY2VzKTsKKyAgICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKHdlYlZp
ZXcucHJlZmVyZW5jZXMsIG9wdGlvbnMpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbd2ViVmll
dyBzZXRXYW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3XTsKKyAgICBbd2ViVmll
dyBzZXRXYW50c0xheWVyOm9wdGlvbnMubGF5ZXJCYWNrZWRXZWJWaWV3KCldOwogI2VuZGlmCiAK
ICAgICBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoZmFsc2UpOwpAQCAtMTkyMCw3
ICsxOTIyLDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAg
IFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBkZWNsYXJlVHlwZXM6QFtOU1N0cmlu
Z1Bib2FyZFR5cGVdIG93bmVyOm5pbF07CiAjZW5kaWYKIAotICAgIFdlYkNvcmVUZXN0U3VwcG9y
dDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5h
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogCiAgICAgW21haW5GcmFt
ZSBfY2xlYXJPcGVuZXJdOwogCkBAIC0xOTc2LDE5ICsxOTc4LDE5IEBAIHN0YXRpYyBOU1VSTCAq
Y29tcHV0ZVRlc3RVUkwoTlNTdHJpbmcgKnAKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVz
dE9wdGlvbnNGb3JUZXN0KGNvbnN0IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAg
V1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVy
ZXMgPSBXVFI6OlRlc3RPcHRpb25zOjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVy
ZXMsIFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwog
ICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFk
ZXJGb3JUZXN0KGNvbW1hbmQsIFdUUjo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsK
IAogICAgIHJldHVybiBXVFI6OlRlc3RPcHRpb25zIHsgV1RGTW92ZShmZWF0dXJlcykgfTsKIH0K
IAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQo
IWlucHV0TGluZS5lbXB0eSgpKTsKIAogICAgIGF1dG8gY29tbWFuZCA9IFdUUjo6cGFyc2VJbnB1
dExpbmUoaW5wdXRMaW5lKTsKLSAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQu
cGF0aE9yVVJMOworICAgIGF1dG8gcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CiAgICAg
ZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IGR1
bXBQaXhlbHNGb3JBbGxUZXN0czsKIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwpAQCAtMjAy
Myw3ICsyMDI1LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAog
ICAgIGdUZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhw
ZWN0ZWRQaXhlbEhhc2gpOwogICAgIGdUZXN0UnVubmVyLT5zZXRBbGxvd2VkSG9zdHMoYWxsb3dl
ZEhvc3RzKTsKICAgICBnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVv
dXQubWlsbGlzZWNvbmRzKCkpOwotICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIGdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5k
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3Rl
bnRTdGF0ZShvcHRpb25zLCBSZXNldFRpbWU6OkJlZm9yZVRlc3QpOwogCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2aXNpb24gMjY4NzM2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTU3NiwxNCArNTc2LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVBhdXNlZChib29s
IHBhdXMKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBm
bGFnKQogewotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNl
clN0eWxlU2hlZXRFbmFibGVkOmZsYWddOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVm
ZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkOmZsYWddOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRiA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGF0aCkpOwogICAgIE5TVVJMICp1cmwgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilwYXRoQ0YuZ2V0KCldOwotICAg
IFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbjp1cmxdOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbjp1cmxdOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFZh
bHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBK
U1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIFRlc3RSdW5uZXI6Om92
ZXJyaWRlUHJlZmVyZW5jZShKU1N0CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNG
ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2YWx1
ZSkpOwogICAgIE5TU3RyaW5nICp2YWx1ZU5TID0gKF9fYnJpZGdlIE5TU3RyaW5nICopdmFsdWVD
Ri5nZXQoKTsKIAotICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gX3Nl
dFByZWZlcmVuY2VGb3JUZXN0V2l0aFZhbHVlOnZhbHVlTlMgZm9yS2V5OmtleU5TXTsKKyAgICBb
W1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIF9zZXRQcmVmZXJlbmNlRm9yVGVzdFdp
dGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlQWxsVmlzaXRlZExpbmtzKCkKQEAgLTcwMCw3ICs3MDAsNyBAQCBib29sIFRlc3RSdW5uZXI6
OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2Rl
bChpbnQgY2FjaGVNb2RlbCkKIHsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVy
ZW5jZXNdIHNldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbF07CisgICAgW1tb
bWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1v
ZGVsKWNhY2hlTW9kZWxdOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQo
SlNTdHJpbmdSZWYgbmFtZSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVn
YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRl
Lm1tCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxl
Z2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCAtICh2b2lkKXJlc2V0V2lu
ZG93T3JpZ2luCiAKIC0gKHZvaWQpcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rpbmc6
KGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmKW9wdGlvbnMKIHsKLSAgICBtX2VuYWJsZURyYWdEZXN0
aW5hdGlvbkFjdGlvbkxvYWQgPSBvcHRpb25zLmVuYWJsZURyYWdEZXN0aW5hdGlvbkFjdGlvbkxv
YWQ7CisgICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0gb3B0aW9ucy5lbmFi
bGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkKCk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXNlbmRlciBzZXRGcmFtZTooTlNSZWN0KWZyYW1lCkBAIC0xNzksNyArMTc5LDggQEAg
LSAoV2ViVmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgYwogICAgIEFTU0VSVChnVGVz
dFJ1bm5lci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBjcmVhdGVX
ZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93KCk7Ci0gICAgCisgICAgW3dlYlZpZXcgc2V0UHJlZmVy
ZW5jZXM6W3NlbmRlciBwcmVmZXJlbmNlc11dOworCiAgICAgaWYgKGdUZXN0UnVubmVyLT5uZXdX
aW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9hZEJhY2tG
b3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMjY4NzM2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTA2LDI4ICs5MDYsMzcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJQcmVmZXJlbmNlc1Rv
Q29uc2lzdAogCiAgICAgcHJlZmVyZW5jZXMtPnNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290aGlu
Z1R5cGVTdGFuZGFyZCk7CiAKKyAgICBwcmVmc1ByaXZhdGUtPnNldFdlYlNRTEVuYWJsZWQodHJ1
ZSk7CisKICAgICBwcmVmc1ByaXZhdGUtPnNldERhdGFUcmFuc2Zlckl0ZW1zRW5hYmxlZChUUlVF
KTsKICAgICBwcmVmc1ByaXZhdGUtPmNsZWFyTmV0d29ya0xvYWRlclNlc3Npb24oKTsKIAogICAg
IHNldEFsd2F5c0FjY2VwdENvb2tpZXMoZmFsc2UpOwogfQogCitzdGF0aWMgYm9vbCBib29sV2Vi
UHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZhbHVl
LCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAgIGF1dG8gaXQgPSBvcHRp
b25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9
IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgpKQorICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCiBzdGF0aWMgdm9p
ZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJlZmVy
ZW5jZXMsIGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgQ09NUHRyPElX
ZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBRdWVyeSwgcHJlZmVyZW5jZXMg
fTsKIAotICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChvcHRpb25z
LmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRLZXlnZW5FbGVt
ZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIHByZWZzUHJpdmF0
ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJs
ZWQob3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOwotICAgIHByZWZzUHJpdmF0ZS0+
c2V0UmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQob3B0aW9ucy5lbmFibGVSZXF1ZXN0SWRsZUNh
bGxiYWNrKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChv
cHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldENv
bnRhY3RQaWNrZXJBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQ29udGFjdFBpY2tlckFQSSk7Ci0g
ICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViU1FMKTsK
LSAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMob3B0aW9u
cy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pOwotICAgIHBy
ZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVk
KG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nKTsKKyAgICBwcmVmZXJlbmNl
cy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24o
KSk7CisgICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlVmFsdWUoIlVzZXNCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAg
ICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIk1lbnVJdGVtRWxlbWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykp
OworICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQoYm9vbFdlYlByZWZl
cmVuY2VGZWF0dXJlVmFsdWUoIktleWdlbkVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMp
KTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJvb2xX
ZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIsIHRy
dWUsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldEluc3BlY3RvckFkZGl0aW9uc0Vu
YWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkluc3BlY3RvckFkZGl0aW9uc0Vu
YWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVxdWVzdElk
bGVDYWxsYmFja0VuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJ
ZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUt
PnNldEFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1
ZSgiQXN5bmNDbGlwYm9hcmRBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVm
c1ByaXZhdGUtPnNldENvbnRhY3RQaWNrZXJBUElFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJDb250YWN0UGlja2VyQVBJRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7Cisg
ICAgcHJlZnNQcml2YXRlLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1
ZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xs
aW5nRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ1NTT01WaWV3U21vb3Ro
U2Nyb2xsaW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
YXBwbGljYXRpb25JZCgpCkBAIC05NzMsOSArOTgyLDkgQEAgc3RhdGljIHZvaWQgc2V0SlNDT3B0
aW9ucyhjb25zdCBXVFI6OlRlcwogICAgICAgICBzYXZlZE9wdGlvbnMuY2xlYXIoKTsKICAgICB9
CiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7CisgICAgaWYgKCFvcHRp
b25zLmpzY09wdGlvbnMoKS5lbXB0eSgpKSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFs
bE9wdGlvbnNJbkFMaW5lKHNhdmVkT3B0aW9ucyk7Ci0gICAgICAgIEpTQzo6T3B0aW9uczo6c2V0
T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAgICAgIEpTQzo6T3B0aW9u
czo6c2V0T3B0aW9ucyhvcHRpb25zLmpzY09wdGlvbnMoKS5jX3N0cigpKTsKICAgICB9CiB9CiAK
QEAgLTExNjgsNyArMTE3Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUNvbnRyb2xDb21tYW5kKGNv
bnN0IGMKIAogc3RhdGljIFdUUjo6VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0
IFdUUjo6VGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVh
dHVyZXM7CisgICAgV1RSOjpUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBXVFI6OlRlc3RPcHRpb25z
OjpkZWZhdWx0cygpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVyZXMsIFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwogICAgIFdUUjo6bWVyZ2UoZmVhdHVy
ZXMsIFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQsIFdU
Ujo6VGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkpKTsKIApAQCAtMTIyOSw3ICsxMjM4LDcg
QEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAgOjpnVGVz
dFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLmRhdGEoKSwgY29tbWFuZC5leHBl
Y3RlZFBpeGVsSGFzaCk7CiAgICAgOjpnVGVzdFJ1bm5lci0+c2V0Q3VzdG9tVGltZW91dChjb21t
YW5kLnRpbWVvdXQubWlsbGlzZWNvbmRzKCkpOwotICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBv
cHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgOjpnVGVzdFJ1bm5lci0+c2V0
RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
IHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgdG9wTG9hZGlu
Z0ZyYW1lID0gbnVsbHB0cjsKICAgICBkb25lID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411937</attachid>
            <date>2020-10-20 16:24:05 -0700</date>
            <delta_ts>2020-10-20 18:51:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217962-20201020162404.patch</filename>
            <type>text/plain</type>
            <size>36497</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDIwLTEwLTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDbGVhbnVwIER1bXBSZW5kZXJUcmVlIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0
aW5nIGFyYml0cmFyeSB0ZXN0IGhlYWRlciBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3OTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNb3ZlcyBEdW1wUmVuZGVyVHJlZSdzIFRlc3RP
cHRpb25zIHRvIGJlIGZ1bGx5IGJhY2tlZCBieSBUZXN0RmVhdHVyZXMgbGlrZSBXZWJLaXRUZXN0
UnVubm5lciwKKyAgICAgICAgICBhbGxvd2luZyBmdXR1cmUgY2hhbmdlcyB0byB1dGlsaXplIGFu
eSBXZWJQcmVmZXJlbmNlIG9uY2UgU1BJIGlzIGF2YWlsYWJsZSBmcm9tIFdlYktpdExlZ2FjeS4K
KworICAgICAgICAtIFJlbW92ZXMgdXNlIG9mIHVzaW5nIG5hbWVzcGFjZSBzdGQ7IGZyb20gRHVt
cFJlbmRlclRyZWUubW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgd2Ugbm9ybWFsbHkKKyAgICAg
ICAgICBkbyBhbmQgbWFkZSB0aGUgY29kZSBhIGJpdCBjb25mdXNpbmcuCisKKyAgICAgICAgLSBN
b3ZlIHNvbWUgcmFuZG9tIHNldHRpbmcgb2YgcHJlZmVyZW5jZXMgdG8gY2VudHJhbGl6ZWQgcmVz
ZXQgZnVuY3Rpb25zLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3Bw
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS5jcHA6CisKIDIwMjAtMTAtMTYgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHNrZWxldG9uIGltcGxlbWVudGF0aW9uIG9mIE1lZGlhIFNlc3Npb24gQVBJ
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjg3MzYp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDQ0IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCitjb25zdCBUZXN0RmVhdHVy
ZXMmIFRlc3RPcHRpb25zOjpkZWZhdWx0cygpCit7CisgICAgc3RhdGljIFRlc3RGZWF0dXJlcyBm
ZWF0dXJlczsKKyAgICBpZiAoZmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcy5lbXB0
eSgpKSB7CisgICAgICAgIGZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMgPSB7Cisg
ICAgICAgICAgICAvLyBUaGVzZSBhcmUgV2ViUHJlZmVyZW5jZSB2YWx1ZXMgdGhhdCBtdXN0IGFs
d2F5cyBiZSBzZXQgYXMgdGhleSBtYXkKKyAgICAgICAgICAgIC8vIGRpZmZlciBmcm9tIHRoZSBk
ZWZhdWx0IHNldCBpbiB0aGUgV2ViUHJlZmVyZW5jZXMqLnlhbWwgY29uZmlndXJhdGlvbi4KKyAg
ICAgICAgICAgIHsgIkFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRp
YWxzIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVS
THMiLCB0cnVlIH0sCisgICAgICAgICAgICB7ICJBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkIiwg
ZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCIsIGZhbHNl
IH0sCisgICAgICAgICAgICB7ICJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlIH0sCisgICAg
ICAgICAgICB7ICJDb2xvckZpbHRlckVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAi
SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJJbnRl
cnNlY3Rpb25PYnNlcnZlckVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiS2V5Z2Vu
RWxlbWVudEVuYWJsZWQiLCBmYWxzZSB9LAorICAgICAgICAgICAgeyAiTWVudUl0ZW1FbGVtZW50
RW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJNb2Rlcm5NZWRpYUNvbnRyb2xzRW5h
YmxlZCIsIHRydWUgfSwKKworICAgICAgICAgICAgeyAiQ1NTTG9naWNhbEVuYWJsZWQiLCBmYWxz
ZSB9LAorICAgICAgICAgICAgeyAiTGluZUhlaWdodFVuaXRzRW5hYmxlZCIsIGZhbHNlIH0sCisg
ICAgICAgICAgICB7ICJTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIsIHRy
dWUgfSwKKyAgICAgICAgICAgIHsgIkxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25F
bmFibGVkIiwgdHJ1ZSB9LAorCisgICAgICAgICAgICB7ICJBZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhB
bmRIZWlnaHRFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkFzeW5jQ2xpcGJvYXJk
QVBJRW5hYmxlZCIsIGZhbHNlIH0sCisgICAgICAgICAgICB7ICJDU1NPTVZpZXdTbW9vdGhTY3Jv
bGxpbmdFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvbnRhY3RQaWNrZXJBUElF
bmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgICAgIHsgIkNvcmVNYXRoTUxFbmFibGVkIiwgZmFs
c2UgfSwKKyAgICAgICAgICAgIHsgIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2Ug
fSwKKyAgICAgICAgICAgIHsgIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIGZhbHNlIH0sCisgICAg
ICAgICAgICB7ICJXZWJHUFVFbmFibGVkIiwgZmFsc2UgfSwKKyAgICAgICAgfTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZlYXR1cmVzOworfQorCiBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIFRlc3RIZWFkZXJLZXlUeXBlPiYgVGVzdE9wdGlvbnM6OmtleVR5cGVNYXBwaW5nKCkK
IHsKICAgICBzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0
SGVhZGVyS2V5VHlwZT4gbWFwIHsKQEAgLTQ3LDU2ICs4NSw0NyBAQCBjb25zdCBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFRlCiAgICAgcmV0dXJuIG1hcDsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgc2V0VmFsdWVJZlNldEluTWFwKFQmIHZhbHVlVG9TZXQs
IHN0ZDo6c3RyaW5nIGtleSwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBU
PiYgbWFwKQorYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25z
KGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAoreworICAgIGlmIChtX2ZlYXR1cmVz
LmV4cGVyaW1lbnRhbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVyZXMuYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VG
ZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJs
ZVdlYlByZWZlcmVuY2VGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlV2ViUHJl
ZmVyZW5jZUZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmVhdHVy
ZXMudWludDMyV2ViUHJlZmVyZW5jZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy51aW50
MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9mZWF0dXJlcy5zdHJpbmdXZWJQcmVmZXJlbmNlRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1
cmVzLnN0cmluZ1dlYlByZWZlcmVuY2VGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX2ZlYXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9mZWF0dXJlcy5kb3VibGVUZXN0UnVubmVyRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmRvdWJsZVRlc3RSdW5uZXJGZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlcyAhPSBvcHRpb25zLm1f
ZmVhdHVyZXMuc3RyaW5nVGVzdFJ1bm5lckZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yVGVzdFJ1bm5lckZlYXR1cmVzICE9IG9w
dGlvbnMubV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JUZXN0UnVubmVyRmVhdHVyZXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gVCBmZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBUIGRlZmF1bHRWYWx1ZSwgY29uc3Qg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUPiYgbWFwKQogewogICAgIGF1dG8gaXQg
PSBtYXAuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICB2YWx1ZVRvU2V0ID0gaXQtPnNlY29uZDsKLX0KLQotVGVzdE9wdGlvbnM6OlRlc3RP
cHRpb25zKFRlc3RGZWF0dXJlcyB0ZXN0RmVhdHVyZXMpCi17Ci0gICAgc2V0VmFsdWVJZlNldElu
TWFwKGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzLCAiQWxs
b3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCB0ZXN0RmVhdHVy
ZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGFs
bG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMsICJBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
IiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNldFZhbHVl
SWZTZXRJbk1hcChlbmFibGVBY2NlbGVyYXRlZERyYXdpbmcsICJBY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMpOwotICAgIHNl
dFZhbHVlSWZTZXRJbk1hcChlbmFibGVBdHRhY2htZW50RWxlbWVudCwgIkF0dGFjaG1lbnRFbGVt
ZW50RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAg
ICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlQmFja0ZvcndhcmRDYWNoZSwgIlVzZXNCYWNrRm9y
d2FyZENhY2hlIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMpOwotICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVDb2xvckZpbHRlciwgIkNvbG9yRmlsdGVyRW5hYmxl
ZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBzZXRWYWx1
ZUlmU2V0SW5NYXAoZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zLCAiSW5zcGVjdG9yQWRkaXRpb25z
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsKLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsICJJbnRlcnNlY3Rp
b25PYnNlcnZlckVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJl
cyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUtleWdlbkVsZW1lbnQsICJLZXlnZW5F
bGVtZW50RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlTWVudUl0ZW1FbGVtZW50LCAiTWVudUl0ZW1F
bGVtZW50RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5ib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVzKTsK
LSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scywgIk1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkIiwgdGVzdEZlYXR1cmVzLmJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZXMpOwotCi0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZURyYWdEZXN0aW5hdGlvbkFj
dGlvbkxvYWQsICJlbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkIiwgdGVzdEZlYXR1cmVz
LmJvb2xUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIsICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0ZXN0RmVhdHVy
ZXMuYm9vbFRlc3RSdW5uZXJGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGxheWVy
QmFja2VkV2ViVmlldywgImxheWVyQmFja2VkV2ViVmlldyIsIHRlc3RGZWF0dXJlcy5ib29sVGVz
dFJ1bm5lckZlYXR1cmVzKTsKLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAodXNlRXBoZW1lcmFsU2Vz
c2lvbiwgInVzZUVwaGVtZXJhbFNlc3Npb24iLCB0ZXN0RmVhdHVyZXMuYm9vbFRlc3RSdW5uZXJG
ZWF0dXJlcyk7Ci0KLSAgICBzZXRWYWx1ZUlmU2V0SW5NYXAoYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHRlc3RGZWF0dXJlcy5z
dHJpbmdUZXN0UnVubmVyRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChqc2NPcHRp
b25zLCAianNjT3B0aW9ucyIsIHRlc3RGZWF0dXJlcy5zdHJpbmdUZXN0UnVubmVyRmVhdHVyZXMp
OwotCi0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZUNTU0xvZ2ljYWwsICJDU1NMb2dpY2Fs
RW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOwotICAgIHNldFZh
bHVlSWZTZXRJbk1hcChlbmFibGVMaW5lSGVpZ2h0VW5pdHMsICJMaW5lSGVpZ2h0VW5pdHNFbmFi
bGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJ
ZlNldEluTWFwKGVuYWJsZVNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMsICJzZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5pbnRlcm5hbERl
YnVnRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dEludGVncmF0aW9uRW5hYmxlZCwgIkxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRp
b25FbmFibGVkIiwgdGVzdEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyk7Ci0KLSAgICBz
ZXRWYWx1ZUlmU2V0SW5NYXAoYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCwgIkFkQ2xpY2tBdHRy
aWJ1dGlvbkVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAg
IHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0LCAiQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhlaWdodEVuYWJsZWQiLCB0ZXN0RmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFi
bGVBc3luY0NsaXBib2FyZEFQSSwgIkFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCIsIHRlc3RGZWF0
dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJs
ZUNTU09NVmlld1Ntb290aFNjcm9sbGluZywgIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJs
ZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZT
ZXRJbk1hcChlbmFibGVDb250YWN0UGlja2VyQVBJLCAiQ29udGFjdFBpY2tlckFQSUVuYWJsZWQi
LCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJ
bk1hcChlbmFibGVDb3JlTWF0aE1MLCAiQ29yZU1hdGhNTEVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMu
ZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVSZXF1
ZXN0SWRsZUNhbGxiYWNrLCAiUmVxdWVzdElkbGVDYWxsYmFja0VuYWJsZWQiLCB0ZXN0RmVhdHVy
ZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOwotICAgIHNldFZhbHVlSWZTZXRJbk1hcChlbmFibGVS
ZXNpemVPYnNlcnZlciwgIlJlc2l6ZU9ic2VydmVyRW5hYmxlZCIsIHRlc3RGZWF0dXJlcy5leHBl
cmltZW50YWxGZWF0dXJlcyk7Ci0gICAgc2V0VmFsdWVJZlNldEluTWFwKGVuYWJsZVdlYkdQVSwg
IldlYkdQVUVuYWJsZWQiLCB0ZXN0RmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpOworICAg
IGlmIChpdCAhPSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJl
dHVybiBkZWZhdWx0VmFsdWU7Cit9CisKK2Jvb2wgVGVzdE9wdGlvbnM6OmJvb2xUZXN0UnVubmVy
RmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5i
b29sVGVzdFJ1bm5lckZlYXR1cmVzKTsKIH0KIAotYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lz
Q29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29uc3QKK3N0
ZDo6c3RyaW5nIFRlc3RPcHRpb25zOjpzdHJpbmdUZXN0UnVubmVyRmVhdHVyZVZhbHVlKHN0ZDo6
c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZhbHVlKSBjb25zdAogewotICAgIHJldHVy
biBvdGhlci5sYXllckJhY2tlZFdlYlZpZXcgPT0gbGF5ZXJCYWNrZWRXZWJWaWV3Ci0gICAgICAg
ICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNjT3B0aW9uczsKKyAgICByZXR1cm4gZmVhdHVyZVZh
bHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLnN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJl
cyk7CiB9CiAKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24g
MjY4NzM2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNTMgKzMxLDM4IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdHJ1Y3QgVGVz
dE9wdGlvbnMgewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgYW5kIHJlcGxhY2Ugd2l0aCBh
Y2Nlc3MgdG8gVGVzdEZlYXR1cmVzIHNldC4KLSAgICAvLyBXZWIgUHJlZmVyZW5jZXMKLSAgICBi
b29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIHsgZmFs
c2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgeyB0cnVlIH07Ci0g
ICAgYm9vbCBlbmFibGVBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRlciB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlS2V5
Z2VuRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyB7IHRydWUgfTsKLQot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgYW5kIHJlcGxhY2Ugd2l0aCBhY2Nlc3MgdG8gVGVz
dEZlYXR1cmVzIHNldC4KLSAgICAvLyBJbnRlcm5hbCBGZWF0dXJlcwotICAgIGJvb2wgZW5hYmxl
Q1NTTG9naWNhbCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVMaW5lSGVpZ2h0VW5pdHMgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllcyB7
IHRydWUgfTsKLSAgICBib29sIGxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBhbmQgcmVwbGFjZSB3
aXRoIGFjY2VzcyB0byBUZXN0RmVhdHVyZXMgc2V0LgotICAgIC8vIEV4cGVyaW1lbnRhbCBGZWF0
dXJlcwotICAgIGJvb2wgYWRDbGlja0F0dHJpYnV0aW9uRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVBc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVpZ2h0IHsgZmFsc2UgfTsK
LSAgICBib29sIGVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJIHsgZmFsc2UgfTsKLSAgICBib29sIGVu
YWJsZUNTU09NVmlld1Ntb290aFNjcm9sbGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVD
b250YWN0UGlja2VyQVBJIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNvcmVNYXRoTUwgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjayB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBlbmFibGVSZXNpemVPYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVX
ZWJHUFUgeyBmYWxzZSB9OworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGljOgorICAgIHN0YXRp
YyBjb25zdCBUZXN0RmVhdHVyZXMmIGRlZmF1bHRzKCk7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVGVzdEhlYWRlcktleVR5cGU+JiBrZXlUeXBlTWFw
cGluZygpOwogCi0gICAgLy8gVGVzdCBSdW5uZXIgU3BlY2lmaWMgRmVhdHVyZXMKLSAgICBib29s
IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVEcmFn
RGVzdGluYXRpb25BY3Rpb25Mb2FkIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVdlYlNRTCB7
IHRydWUgfTsKLSAgICBib29sIGxheWVyQmFja2VkV2ViVmlldyB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBzdGQ6OnN0cmluZyBhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlczsKLSAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zOworICAg
IGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyBmZWF0dXJlcykKKyAgICAgICAgOiBt
X2ZlYXR1cmVzKHN0ZDo6bW92ZShmZWF0dXJlcykpCisgICAgeworICAgIH0KIAotICAgIGV4cGxp
Y2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAgICAgYm9vbCB3ZWJWaWV3SXNDb21wYXRp
YmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKSBjb25zdDsKLSAgICAKLSAgICBzdGF0
aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUZXN0SGVhZGVyS2V5VHlw
ZT4mIGtleVR5cGVNYXBwaW5nKCk7CisKKyAgICAvLyBUZXN0IFJ1bm5lciBTcGVjaWZpYyBGZWF0
dXJlcworICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3QgeyByZXR1cm4g
Ym9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIGZh
bHNlKTsgfQorICAgIGJvb2wgZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCgpIGNvbnN0
IHsgcmV0dXJuIGJvb2xUZXN0UnVubmVyRmVhdHVyZVZhbHVlKCJlbmFibGVEcmFnRGVzdGluYXRp
b25BY3Rpb25Mb2FkIiwgZmFsc2UpOyB9CisgICAgYm9vbCBsYXllckJhY2tlZFdlYlZpZXcoKSBj
b25zdCB7IHJldHVybiBib29sVGVzdFJ1bm5lckZlYXR1cmVWYWx1ZSgibGF5ZXJCYWNrZWRXZWJW
aWV3IiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbFRlc3RSdW5uZXJGZWF0dXJlVmFsdWUoInVzZUVwaGVtZXJhbFNlc3Npb24iLCBm
YWxzZSk7IH0KKyAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlVmFsdWUoImFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIGpzY09wdGlvbnMo
KSBjb25zdCB7IHJldHVybiBzdHJpbmdUZXN0UnVubmVyRmVhdHVyZVZhbHVlKCJqc2NPcHRpb25z
IiwgeyB9KTsgfQorCisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBi
b29sPiYgYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiYgZG91YmxlV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5kb3VibGVXZWJQcmVmZXJlbmNlRmVhdHVyZXM7IH0K
KyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiYgdWlu
dDMyV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy51aW50
MzJXZWJQcmVmZXJlbmNlRmVhdHVyZXM7IH0KKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgc3RyaW5nV2ViUHJlZmVyZW5jZUZlYXR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5zdHJpbmdXZWJQcmVmZXJlbmNlRmVhdHVyZXM7IH0K
KworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB0b1dlYktpdExlZ2FjeVByZWZlcmVuY2VLZXkoY29u
c3Qgc3RkOjpzdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBib29sIGJvb2xUZXN0UnVubmVyRmVh
dHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0OworICAg
IHN0ZDo6c3RyaW5nIHN0cmluZ1Rlc3RSdW5uZXJGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5
LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUpIGNvbnN0OworCisgICAgVGVzdEZlYXR1cmVzIG1f
ZmVhdHVyZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyNjg3MzYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMCw4ICsxMzAsNiBAQCBl
eHRlcm4gIkMiIHsKICNpbXBvcnQgPG1hY2gtby9nZXRzZWN0Lmg+CiB9CiAKLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci0KICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIEBpbnRlcmZhY2UgRHVtcFJl
bmRlclRyZWVBcHBsaWNhdGlvbiA6IE5TQXBwbGljYXRpb24KIEBlbmQKQEAgLTE1Miw3ICsxNTAs
NyBAQCAtICh2b2lkKXZpZXc6KFVJV2ViRG9jdW1lbnRWaWV3ICopdmlldyBkCiAgICAgQVNTRVJU
KHNjcm9sbFZpZXcgJiYgW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlXZWJTY3JvbGxWaWV3
IGNsYXNzXV0pOwogICAgIGNvbnN0IENHU2l6ZSBzY3JvbGxWaWV3U2l6ZSA9IFtzY3JvbGxWaWV3
IGJvdW5kc10uc2l6ZTsKICAgICBDR1NpemUgY29udGVudFNpemUgPSBuZXdGcmFtZS5zaXplOwot
ICAgIGNvbnRlbnRTaXplLmhlaWdodCA9IENHUm91bmQobWF4KENHUmVjdEdldE1heFkobmV3RnJh
bWUpLCBzY3JvbGxWaWV3U2l6ZS5oZWlnaHQpKTsKKyAgICBjb250ZW50U2l6ZS5oZWlnaHQgPSBD
R1JvdW5kKHN0ZDo6bWF4KENHUmVjdEdldE1heFkobmV3RnJhbWUpLCBzY3JvbGxWaWV3U2l6ZS5o
ZWlnaHQpKTsKICAgICBbKFVJV2ViU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgc2V0Q29udGVudFNp
emU6Y29udGVudFNpemVdOwogfQogQGVuZApAQCAtMTc4LDcgKzE3Niw3IEBAIC0gKFdlYkNvcmU6
OkZyYW1lKilfbWFpbkNvcmVGcmFtZTsKIEBlbmQKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IHN0cmluZyYgdGVzdFVSTCk7CitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXN0VVJMKTsKIAogLy8gRGVjaWRpbmcgd2hlbiBpdCdzIE9LIHRvIGR1bXAg
b3V0IHRoZSBzdGF0ZSBpcyBhIGJpdCB0cmlja3kuICBBbGwgdGhlc2UgbXVzdCBiZSB0cnVlOgog
Ly8gLSBUaGVyZSBpcyBubyBsb2FkIGluIHByb2dyZXNzCkBAIC0yNDksNyArMjQ3LDcgQEAgdm9p
ZCBzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbgogICAgIHBlcnNpc3RlbnRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uID0gdXJsOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVX
ZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0cmluZyYgdXJsU3RyaW5nKQorc3RhdGljIGJvb2wgc2hv
dWxkSWdub3JlV2ViQ29yZU5vZGVMZWFrcyhjb25zdCBzdGQ6OnN0cmluZyYgdXJsU3RyaW5nKQog
ewogICAgIHN0YXRpYyBjaGFyKiBjb25zdCBpZ25vcmVTZXRbXSA9IHsKICAgICAgICAgLy8gS2Vl
cGluZyB0aGlzIGluZnJhc3RydWN0dXJlIGFyb3VuZCBpbiBjYXNlIHdlIGV2ZXIgbmVlZCBpdCBh
Z2Fpbi4KQEAgLTI1OCw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3Jl
Tm9kZUxlYWtzCiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlnbm9yZVNldENvdW50OyBpKysp
IHsKICAgICAgICAgLy8gRklYTUU6IGlnbm9yZSBjYXNlCi0gICAgICAgIHN0cmluZyBjdXJJZ25v
cmUoaWdub3JlU2V0W2ldKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgY3VySWdub3JlKGlnbm9yZVNl
dFtpXSk7CiAgICAgICAgIC8vIE1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHVybFN0cmluZy4KICAg
ICAgICAgaWYgKCF1cmxTdHJpbmcuY29tcGFyZSh1cmxTdHJpbmcubGVuZ3RoKCkgLSBjdXJJZ25v
cmUubGVuZ3RoKCksIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNjE2LDggKzYxNCw4IEBAIC0gKE5TUmVjdClyZWN0Rm9yUGFydDoo
TlNTY3JvbGxlclBhcnQpcGEKICAgICBCT09MIGlzSG9yaXpvbnRhbCA9IGZyYW1lUmVjdC5zaXpl
LndpZHRoID4gZnJhbWVSZWN0LnNpemUuaGVpZ2h0OwogICAgIENHRmxvYXQgdHJhY2tMZW5ndGgg
PSBpc0hvcml6b250YWwgPyBib3VuZHMuc2l6ZS53aWR0aCA6IGJvdW5kcy5zaXplLmhlaWdodDsK
ICAgICBDR0Zsb2F0IG1pbktub2JTaXplID0gaXNIb3Jpem9udGFsID8gYm91bmRzLnNpemUuaGVp
Z2h0IDogYm91bmRzLnNpemUud2lkdGg7Ci0gICAgQ0dGbG9hdCBrbm9iTGVuZ3RoID0gbWF4KG1p
bktub2JTaXplLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pihyb3VuZCh0cmFja0xlbmd0aCAqIFtzZWxm
IGtub2JQcm9wb3J0aW9uXSkpKTsKLSAgICBDR0Zsb2F0IGtub2JQb3NpdGlvbiA9IHN0YXRpY19j
YXN0PENHRmxvYXQ+KChyb3VuZChbc2VsZiBkb3VibGVWYWx1ZV0gKiAodHJhY2tMZW5ndGggLSBr
bm9iTGVuZ3RoKSkpKTsKKyAgICBDR0Zsb2F0IGtub2JMZW5ndGggPSBzdGQ6Om1heChtaW5Lbm9i
U2l6ZSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc3RkOjpyb3VuZCh0cmFja0xlbmd0aCAqIFtzZWxm
IGtub2JQcm9wb3J0aW9uXSkpKTsKKyAgICBDR0Zsb2F0IGtub2JQb3NpdGlvbiA9IHN0YXRpY19j
YXN0PENHRmxvYXQ+KChzdGQ6OnJvdW5kKFtzZWxmIGRvdWJsZVZhbHVlXSAqICh0cmFja0xlbmd0
aCAtIGtub2JMZW5ndGgpKSkpOwogCiAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgcmV0
dXJuIE5TTWFrZVJlY3QoYm91bmRzLm9yaWdpbi54ICsga25vYlBvc2l0aW9uLCBib3VuZHMub3Jp
Z2luLnksIGtub2JMZW5ndGgsIGJvdW5kcy5zaXplLmhlaWdodCk7CkBAIC02ODYsOCArNjg0LDYg
QEAgV2ViVmlldyAqY3JlYXRlV2ViVmlld0FuZE9mZnNjcmVlbldpbmRvdwogICAgIFtXZWJWaWV3
IHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbDpAImZlZWRzIl07CiAgICAgW1dlYlZpZXcgcmVnaXN0
ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHNlYXJjaCJdOwogCi0gICAgW1t3ZWJWaWV3IHByZWZl
cmVuY2VzXSBfc2V0TWVkaWFSZWNvcmRlckVuYWJsZWQ6WUVTXTsKLQogI2lmIFBMQVRGT1JNKE1B
QykKICAgICBbd2ViVmlldyBzZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOk5PXTsK
ICAgICBbV2ViVmlldyBfc2V0Rm9udEFsbG93TGlzdDpmb250QWxsb3dMaXN0KCldOwpAQCAtNzU3
LDggKzc1Myw2IEBAIFdlYlZpZXcgKmNyZWF0ZVdlYlZpZXdBbmRPZmZzY3JlZW5XaW5kb3cKICAg
ICBOU0JpdG1hcEltYWdlUmVwICppbWFnZVJlcCA9IFt3ZWJWaWV3IGJpdG1hcEltYWdlUmVwRm9y
Q2FjaGluZ0Rpc3BsYXlJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CiAgICAgW3dlYlZpZXcgY2Fj
aGVEaXNwbGF5SW5SZWN0Olt3ZWJWaWV3IGJvdW5kc10gdG9CaXRtYXBJbWFnZVJlcDppbWFnZVJl
cF07CiAjZWxzZQotICAgIFtbd2ViVmlldyBwcmVmZXJlbmNlc10gX3NldFRlbGVwaG9uZU51bWJl
clBhcnNpbmdFbmFibGVkOk5PXTsKLQogICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBVSVZp
ZXdzLCBhbmQgc2V0IHRoZSBrZXkgVUlXaW5kb3cgdG8gYmUgcGFpbnRlZC4KICAgICBpZiAoIWdX
ZWJCcm93c2VyVmlldykgewogICAgICAgICBnV2ViQnJvd3NlclZpZXcgPSBbd2ViQnJvd3NlclZp
ZXcgcmV0YWluXTsKQEAgLTgyNywxNCArODIxLDE0IEBAIHN0YXRpYyB2b2lkIGVuYWJsZUV4cGVy
aW1lbnRhbEZlYXR1cmVzKFcKICAgICBbcHJlZmVyZW5jZXMgc2V0UmVhZGFibGVCeXRlU3RyZWFt
QVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXcml0YWJsZVN0cmVhbUFQSUVu
YWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxl
ZDpZRVNdOwotICAgIHByZWZlcmVuY2VzLmVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCA9IFlFUzsK
KyAgICBbcHJlZmVyZW5jZXMgc2V0RW5jcnlwdGVkTWVkaWFBUElFbmFibGVkOllFU107CiAgICAg
W3ByZWZlcmVuY2VzIHNldEFjY2Vzc2liaWxpdHlPYmplY3RNb2RlbEVuYWJsZWQ6WUVTXTsKICAg
ICBbcHJlZmVyZW5jZXMgc2V0QXJpYVJlZmxlY3Rpb25FbmFibGVkOllFU107CiAgICAgW3ByZWZl
cmVuY2VzIHNldFZpc3VhbFZpZXdwb3J0QVBJRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNl
cyBzZXRDb2xvckZpbHRlckVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0U2VydmVy
VGltaW5nRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRJbnRlcnNlY3Rpb25PYnNl
cnZlckVuYWJsZWQ6WUVTXTsKLSAgICBwcmVmZXJlbmNlcy5zb3VyY2VCdWZmZXJDaGFuZ2VUeXBl
RW5hYmxlZCA9IFlFUzsKKyAgICBbcHJlZmVyZW5jZXMgc2V0U291cmNlQnVmZmVyQ2hhbmdlVHlw
ZUVuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0Q1NTT01WaWV3U2Nyb2xsaW5nQVBJ
RW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYVJlY29yZGVyRW5hYmxlZDpZ
RVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRSZWZlcnJlclBvbGljeUF0dHJpYnV0ZUVuYWJsZWQ6
WUVTXTsKQEAgLTg1MCw5ICs4NDQsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxG
ZWF0dXJlcyhXCiB9CiAKIC8vIENhbGxlZCBiZWZvcmUgZWFjaCB0ZXN0Lgotc3RhdGljIHZvaWQg
cmVzZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcygpCitzdGF0aWMgdm9pZCByZXNl
dFdlYlByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKFdlYlByZWZlcmVuY2VzICpwcmVmZXJl
bmNlcykKIHsKLSAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbV2ViUHJlZmVyZW5j
ZXMgc3RhbmRhcmRQcmVmZXJlbmNlc107CiAgICAgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMo
cHJlZmVyZW5jZXMpOwogCiAgICAgW3ByZWZlcmVuY2VzIHNldE5lZWRzU3RvcmFnZUFjY2Vzc0Zy
b21GaWxlVVJMc1F1aXJrOiBOT107CkBAIC05MjAsNiArOTEzLDcgQEAgc3RhdGljIHZvaWQgcmVz
ZXRXZWJQcmVmZXJlbmNlc1RvQ29uc2lzdAogICAgIC8vIEVuYWJsZSB0aGUgdHJhY2tlciBiZWZv
cmUgY3JlYXRpbmcgdGhlIGZpcnN0IFdlYlZpZXcgd2lsbAogICAgIC8vIGNhdXNlIGluaXRpYWxp
emF0aW9uIHRvIHVzZSB0aGUgY29ycmVjdCBkYXRhYmFzZSBwYXRocy4KICAgICBbcHJlZmVyZW5j
ZXMgc2V0U3RvcmFnZVRyYWNrZXJFbmFibGVkOllFU107CisgICAgW3ByZWZlcmVuY2VzIF9zZXRU
ZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZDpOT107CiAjZW5kaWYKIAogICAgIFtwcmVmZXJl
bmNlcyBfc2V0VGV4dEF1dG9zaXppbmdFbmFibGVkOk5PXTsKQEAgLTkzNSw3ICs5MjksNyBAQCBz
dGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgW3ByZWZlcmVuY2Vz
IHNldFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzOk5PXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ6Tk9dOwogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIEFTU0VSVChbcHJlZmVyZW5jZXMgbW9ja1Njcm9sbGJhcnNFbmFibGVkXSk7Cisg
ICAgW3ByZWZlcmVuY2VzIHNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZDpZRVNdOwogI2VuZGlmCiAK
ICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQXVkaW9FbmFibGVkOllFU107CkBAIC05NjMsNDQgKzk1
Nyw1MiBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlByZWZlcmVuY2VzVG9Db25zaXN0CiAgICAgW3By
ZWZlcmVuY2VzIHNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOllFU107CiAKICAgICBbcHJl
ZmVyZW5jZXMgc2V0Q2FjaGVBUElFbmFibGVkOk5PXTsKLSAgICBwcmVmZXJlbmNlcy5tZWRpYUNh
cGFiaWxpdGllc0VuYWJsZWQgPSBZRVM7CisgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhQ2FwYWJp
bGl0aWVzRW5hYmxlZDpZRVNdOwogCi0gICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQgPSBZRVM7CisgICAgW3ByZWZlcmVuY2VzIHNldFNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkOllFU107CiAKICAgICBbcHJlZmVyZW5jZXMg
c2V0V2ViU1FMRW5hYmxlZDpZRVNdOworICAgIFtwcmVmZXJlbmNlcyBfc2V0TWVkaWFSZWNvcmRl
ckVuYWJsZWQ6WUVTXTsKIAogICAgIFtXZWJQcmVmZXJlbmNlcyBfY2xlYXJOZXR3b3JrTG9hZGVy
U2Vzc2lvbl07CiAgICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNl
c3Npb25Db29raWVBY2NlcHRQb2xpY3k6TlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW5dOwogfQogCi1zdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0Zv
clRlc3RPcHRpb25zKGNvbnN0IFdUUjo6VGVzdE9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgYm9v
bCBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVm
YXVsdFZhbHVlLCBjb25zdCBXVFI6OlRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIFdlYlBy
ZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVu
Y2VzXTsKLQotICAgIHByZWZlcmVuY2VzLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCA9IG9wdGlv
bnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQ7Ci0gICAgcHJlZmVyZW5jZXMuYWNjZWxlcmF0ZWRE
cmF3aW5nRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIHBy
ZWZlcmVuY2VzLm1lbnVJdGVtRWxlbWVudEVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZU1lbnVJdGVt
RWxlbWVudDsKLSAgICBwcmVmZXJlbmNlcy5rZXlnZW5FbGVtZW50RW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlS2V5Z2VuRWxlbWVudDsKLSAgICBwcmVmZXJlbmNlcy5tb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9sczsKLSAgICBwcmVmZXJl
bmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JB
ZGRpdGlvbnM7Ci0gICAgcHJlZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1Rv
QXNrRm9yQ3JlZGVudGlhbHMgPSBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNU
b0Fza0ZvckNyZWRlbnRpYWxzOwotICAgIHByZWZlcmVuY2VzLmNvbG9yRmlsdGVyRW5hYmxlZCA9
IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXI7Ci0gICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9uQWNy
b3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNlbGVjdGlvbkFjcm9z
c1NoYWRvd0JvdW5kYXJpZXM7Ci0gICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IG9wdGlv
bnMuZW5hYmxlV2ViR1BVOwotICAgIHByZWZlcmVuY2VzLkNTU0xvZ2ljYWxFbmFibGVkID0gb3B0
aW9ucy5lbmFibGVDU1NMb2dpY2FsOwotICAgIHByZWZlcmVuY2VzLmxpbmVIZWlnaHRVbml0c0Vu
YWJsZWQgPSBvcHRpb25zLmVuYWJsZUxpbmVIZWlnaHRVbml0czsKLSAgICBwcmVmZXJlbmNlcy5h
ZENsaWNrQXR0cmlidXRpb25FbmFibGVkID0gb3B0aW9ucy5hZENsaWNrQXR0cmlidXRpb25FbmFi
bGVkOwotICAgIHByZWZlcmVuY2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9IG9wdGlvbnMuZW5h
YmxlUmVzaXplT2JzZXJ2ZXI7Ci0gICAgcHJlZmVyZW5jZXMuQ1NTT01WaWV3U21vb3RoU2Nyb2xs
aW5nRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nOwotICAg
IHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb3JlTWF0aE1M
OwotICAgIHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkID0gb3B0aW9ucy5l
bmFibGVSZXF1ZXN0SWRsZUNhbGxiYWNrOwotICAgIHByZWZlcmVuY2VzLmFzeW5jQ2xpcGJvYXJk
QVBJRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEk7Ci0gICAgcHJlZmVy
ZW5jZXMucHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lv
bjsKLSAgICBwcmVmZXJlbmNlcy51c2VzUGFnZUNhY2hlID0gb3B0aW9ucy5lbmFibGVCYWNrRm9y
d2FyZENhY2hlOwotICAgIHByZWZlcmVuY2VzLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdy
YXRpb25FbmFibGVkID0gb3B0aW9ucy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9u
RW5hYmxlZDsKLSAgICBwcmVmZXJlbmNlcy5hc3BlY3RSYXRpb09mSW1nRnJvbVdpZHRoQW5kSGVp
Z2h0RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlQXNwZWN0UmF0aW9PZkltZ0Zyb21XaWR0aEFuZEhl
aWdodDsKLSAgICBwcmVmZXJlbmNlcy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0gb3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOwotICAgIHByZWZlcmVuY2VzLmNvbnRh
Y3RQaWNrZXJBUElFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb250YWN0UGlja2VyQVBJOworICAg
IGF1dG8gaXQgPSBvcHRpb25zLmJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZXMoKS5maW5kKGtleSk7
CisgICAgaWYgKGl0ICE9IG9wdGlvbnMuYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlcygpLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwor
fQorCitzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKFdlYlByZWZl
cmVuY2VzICpwcmVmZXJlbmNlcywgY29uc3QgV1RSOjpUZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sK
KyAgICBwcmVmZXJlbmNlcy5wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gb3B0aW9ucy51c2VFcGhl
bWVyYWxTZXNzaW9uKCk7CisKKyAgICBwcmVmZXJlbmNlcy5hdHRhY2htZW50RWxlbWVudEVuYWJs
ZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQXR0YWNobWVudEVsZW1lbnRFbmFi
bGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5tZW51SXRlbUVs
ZW1lbnRFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIk1lbnVJdGVtRWxl
bWVudEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMua2V5Z2VuRWxl
bWVudEVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiS2V5Z2VuRWxlbWVu
dEVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMubW9kZXJuTWVkaWFD
b250cm9sc0VuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiTW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5pbnNw
ZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIklu
c3BlY3RvckFkZGl0aW9uc0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBib29s
V2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1Rv
QXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuY29s
b3JGaWx0ZXJFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNvbG9yRmls
dGVyRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5zZWxlY3Rpb25B
Y3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZh
bHVlKCJTZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIsIHRydWUsIG9wdGlv
bnMpOworICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJsZWQgPSBib29sV2ViUHJlZmVyZW5jZUZl
YXR1cmVWYWx1ZSgiV2ViR1BVRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJl
bmNlcy5DU1NMb2dpY2FsRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJD
U1NMb2dpY2FsRW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKTsKKyAgICBwcmVmZXJlbmNlcy5saW5l
SGVpZ2h0VW5pdHNFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkxpbmVI
ZWlnaHRVbml0c0VuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMuYWRD
bGlja0F0dHJpYnV0aW9uRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJB
ZENsaWNrQXR0cmlidXRpb25FbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVu
Y2VzLnJlc2l6ZU9ic2VydmVyRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVl
KCJSZXNpemVPYnNlcnZlckVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucyk7CisgICAgcHJlZmVyZW5j
ZXMuQ1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVh
dHVyZVZhbHVlKCJDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpOworICAgIHByZWZlcmVuY2VzLmNvcmVNYXRoTUxFbmFibGVkID0gYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIkNvcmVNYXRoTUxFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOworICAg
IHByZWZlcmVuY2VzLnJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkID0gYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIlJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpOworICAgIHByZWZlcmVuY2VzLmFzeW5jQ2xpcGJvYXJkQVBJRW5hYmxlZCA9IGJvb2xXZWJQ
cmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQiLCBmYWxzZSwg
b3B0aW9ucyk7CisgICAgcHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9IGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlLCBvcHRpb25zKTsK
KyAgICBwcmVmZXJlbmNlcy5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCA9IGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJMYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZCIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFz
cGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVkID0gYm9vbFdlYlByZWZlcmVu
Y2VGZWF0dXJlVmFsdWUoIkFzcGVjdFJhdGlvT2ZJbWdGcm9tV2lkdGhBbmRIZWlnaHRFbmFibGVk
IiwgZmFsc2UsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmFsbG93VG9wTmF2aWdhdGlvblRv
RGF0YVVSTHMgPSBib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQWxsb3dUb3BOYXZpZ2F0
aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9wdGlvbnMpOworICAgIHByZWZlcmVuY2VzLmNvbnRhY3RQ
aWNrZXJBUElFbmFibGVkID0gYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNvbnRhY3RQ
aWNrZXJBUElFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpOwogfQogCiAvLyBDYWxsZWQgb25jZSBv
biBEdW1wUmVuZGVyVHJlZSBzdGFydHVwLgpAQCAtMTQzNyw3ICsxNDM5LDcgQEAgc3RhdGljIE5T
SW50ZWdlciBjb21wYXJlSGlzdG9yeUl0ZW1zKGlkIAogCiBzdGF0aWMgTlNEYXRhICpkdW1wQXVk
aW8oKQogewotICAgIGNvbnN0IHZlY3RvcjxjaGFyPiYgZGF0YVZlY3RvciA9IGdUZXN0UnVubmVy
LT5hdWRpb1Jlc3VsdCgpOworICAgIGNvbnN0IGF1dG8mIGRhdGFWZWN0b3IgPSBnVGVzdFJ1bm5l
ci0+YXVkaW9SZXN1bHQoKTsKIAogICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhC
eXRlczpkYXRhVmVjdG9yLmRhdGEoKSBsZW5ndGg6ZGF0YVZlY3Rvci5zaXplKCldOwogICAgIHJl
dHVybiBkYXRhOwpAQCAtMTYzMyw3ICsxNjM1LDcgQEAgc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdG
b3JDdXJyZW50VGVzdCgpCiAgICAgW3VpRGVsZWdhdGUgcmVzZXRXaW5kb3dPcmlnaW5dOwogCiAg
ICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3QgdG8gYmUgNDgweDM2MAotICAgIGJvb2wgaXNTVkdX
M0NUZXN0ID0gKGdUZXN0UnVubmVyLT50ZXN0VVJMKCkuZmluZCgic3ZnL1czQy1TVkctMS4xIikg
IT0gc3RyaW5nOjpucG9zKTsKKyAgICBib29sIGlzU1ZHVzNDVGVzdCA9IChnVGVzdFJ1bm5lci0+
dGVzdFVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsK
ICAgICBOU1NpemUgZnJhbWVTaXplID0gaXNTVkdXM0NUZXN0ID8gTlNNYWtlU2l6ZShUZXN0UnVu
bmVyOjp3M2NTVkdWaWV3V2lkdGgsIFRlc3RSdW5uZXI6OnczY1NWR1ZpZXdIZWlnaHQpIDogTlNN
YWtlU2l6ZShUZXN0UnVubmVyOjp2aWV3V2lkdGgsIFRlc3RSdW5uZXI6OnZpZXdIZWlnaHQpOwog
ICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldEZyYW1lU2l6ZTpmcmFtZVNpemVdOwogICAgIFtb
bWFpbkZyYW1lIGZyYW1lVmlld10gc2V0RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBmcmFtZVNpemUu
d2lkdGgsIGZyYW1lU2l6ZS5oZWlnaHQpXTsKQEAgLTE4MzIsOSArMTgzNCw5IEBAIHN0YXRpYyB2
b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXMKICAgICAgICAgc2F2ZWRPcHRpb25zLmNs
ZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgewor
ICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMoKS5sZW5ndGgoKSkgewogICAgICAgICBKU0M6Ok9w
dGlvbnM6OmR1bXBBbGxPcHRpb25zSW5BTGluZShzYXZlZE9wdGlvbnMpOwotICAgICAgICBKU0M6
Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgICAg
ICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NPcHRpb25zKCkuY19zdHIoKSk7
CiAgICAgfQogfQogCkBAIC0xODczLDEwICsxODc1LDEwIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2Vi
Vmlld1RvQ29uc2lzdGVudFN0YXQKIAogICAgIFtXZWJDYWNoZSBjbGVhckNhY2hlZENyZWRlbnRp
YWxzXTsKIAotICAgIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKLSAg
ICBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKG9wdGlvbnMpOworICAgIHJlc2V0V2Vi
UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMod2ViVmlldy5wcmVmZXJlbmNlcyk7CisgICAg
c2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyh3ZWJWaWV3LnByZWZlcmVuY2VzLCBvcHRp
b25zKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgW3dlYlZpZXcgc2V0V2FudHNMYXllcjpvcHRp
b25zLmxheWVyQmFja2VkV2ViVmlld107CisgICAgW3dlYlZpZXcgc2V0V2FudHNMYXllcjpvcHRp
b25zLmxheWVyQmFja2VkV2ViVmlldygpXTsKICNlbmRpZgogCiAgICAgVGVzdFJ1bm5lcjo6c2V0
U2VyaWFsaXplSFRUUExvYWRzKGZhbHNlKTsKQEAgLTE5MjAsNyArMTkyMiw3IEBAIHN0YXRpYyB2
b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKICAgICBbW05TUGFzdGVib2FyZCBnZW5l
cmFsUGFzdGVib2FyZF0gZGVjbGFyZVR5cGVzOkBbTlNTdHJpbmdQYm9hcmRUeXBlXSBvd25lcjpu
aWxdOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMoKS5jX3N0cigpKTsKIAogICAgIFttYWluRnJhbWUgX2NsZWFyT3BlbmVyXTsKIApA
QCAtMTk3NiwxOSArMTk3OCwxOSBAQCBzdGF0aWMgTlNVUkwgKmNvbXB1dGVUZXN0VVJMKE5TU3Ry
aW5nICpwCiAKIHN0YXRpYyBXVFI6OlRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25z
dCBXVFI6OlRlc3RDb21tYW5kJiBjb21tYW5kKQogewotICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gV1RSOjpUZXN0T3B0aW9u
czo6ZGVmYXVsdHMoKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZl
YXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1
cmVzLCBXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBX
VFI6OlRlc3RPcHRpb25zOjprZXlUeXBlTWFwcGluZygpKSk7CiAKICAgICByZXR1cm4gV1RSOjpU
ZXN0T3B0aW9ucyB7IFdURk1vdmUoZmVhdHVyZXMpIH07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7
CiAKICAgICBhdXRvIGNvbW1hbmQgPSBXVFI6OnBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7Ci0g
ICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBhdXRv
IHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOwogICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBkdW1wUGl4ZWxzRm9yQWxsVGVzdHM7
CiAKICAgICBOU1N0cmluZyAqcGF0aE9yVVJMU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOnBhdGhPclVSTC5jX3N0cigpXTsKQEAgLTIwMjMsNyArMjAyNSw3IEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBnVGVzdFJ1bm5lciA9IFRl
c3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAg
ICBnVGVzdFJ1bm5lci0+c2V0QWxsb3dlZEhvc3RzKGFsbG93ZWRIb3N0cyk7CiAgICAgZ1Rlc3RS
dW5uZXItPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0Lm1pbGxpc2Vjb25kcygpKTsK
LSAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
KTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQu
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyKCkpOwogCiAgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGUob3B0aW9ucywgUmVz
ZXRUaW1lOjpCZWZvcmVUZXN0KTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0JKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9UZXN0UnVubmVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTQgKzU3NiwxNCBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VQYXVzZWQoYm9vbCBwYXVzCiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykKIHsKLSAgICBbW1dlYlBy
ZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpm
bGFnXTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZDpmbGFnXTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBwYXRoQ0YgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHBhdGgpKTsKICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6KF9f
YnJpZGdlIE5TU3RyaW5nICopcGF0aENGLmdldCgpXTsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb246dXJsXTsKKyAgICBb
W1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b246dXJsXTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCkBA
IC02MDksNyArNjA5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNT
dAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdmFsdWVDRiA9IGFkb3B0Q0YoSlNTdHJpbmdD
b3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmFsdWUpKTsKICAgICBOU1N0cmluZyAq
dmFsdWVOUyA9IChfX2JyaWRnZSBOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0KCk7CiAKLSAgICBbW1dl
YlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIF9zZXRQcmVmZXJlbmNlRm9yVGVzdFdp
dGhWYWx1ZTp2YWx1ZU5TIGZvcktleTprZXlOU107CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXdd
IHByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZvclRlc3RXaXRoVmFsdWU6dmFsdWVOUyBmb3JL
ZXk6a2V5TlNdOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygp
CkBAIC03MDAsNyArNzAwLDcgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4
dFJlZgogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCiB7
Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVs
OihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWxdOworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBw
cmVmZXJlbmNlc10gc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVsXTsKIH0K
IAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjY4NzM2
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgLSAodm9pZClyZXNldFdpbmRvd09yaWdpbgogCiAtICh2b2lk
KXJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nOihjb25zdCBXVFI6OlRlc3RPcHRp
b25zJilvcHRpb25zCiB7Ci0gICAgbV9lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkID0g
b3B0aW9ucy5lbmFibGVEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkOworICAgIG1fZW5hYmxlRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCA9IG9wdGlvbnMuZW5hYmxlRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTG9hZCgpOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2V0RnJh
bWU6KE5TUmVjdClmcmFtZQpAQCAtMTc5LDcgKzE3OSw4IEBAIC0gKFdlYlZpZXcgKil3ZWJWaWV3
OihXZWJWaWV3ICopc2VuZGVyIGMKICAgICBBU1NFUlQoZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAo
KSk7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld0FuZE9mZnNjcmVlbldp
bmRvdygpOwotICAgIAorICAgIFt3ZWJWaWV3IHNldFByZWZlcmVuY2VzOltzZW5kZXIgcHJlZmVy
ZW5jZXNdXTsKKwogICAgIGlmIChnVGVzdFJ1bm5lci0+bmV3V2luZG93c0NvcHlCYWNrRm9yd2Fy
ZExpc3QoKSkKICAgICAgICAgW3dlYlZpZXcgX2xvYWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJW
aWV3OnNlbmRlcl07CiAgICAgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1w
UmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDI2ODczNikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNiwyOCArOTA2LDM3
IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3QKIAogICAgIHByZWZl
cmVuY2VzLT5zZXRGb250U21vb3RoaW5nKEZvbnRTbW9vdGhpbmdUeXBlU3RhbmRhcmQpOwogCisg
ICAgcHJlZnNQcml2YXRlLT5zZXRXZWJTUUxFbmFibGVkKHRydWUpOworCiAgICAgcHJlZnNQcml2
YXRlLT5zZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJsZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2YXRl
LT5jbGVhck5ldHdvcmtMb2FkZXJTZXNzaW9uKCk7CiAKICAgICBzZXRBbHdheXNBY2NlcHRDb29r
aWVzKGZhbHNlKTsKIH0KIAorc3RhdGljIGJvb2wgYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSwgY29uc3QgV1RSOjpUZXN0T3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhdXRvIGl0ID0gb3B0aW9ucy5ib29sV2ViUHJlZmVyZW5j
ZUZlYXR1cmVzKCkuZmluZChrZXkpOworICAgIGlmIChpdCAhPSBvcHRpb25zLmJvb2xXZWJQcmVm
ZXJlbmNlRmVhdHVyZXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKwogc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNG
b3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzLCBjb25zdCBXVFI6OlRl
c3RPcHRpb25zJiBvcHRpb25zKQogewogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRl
OD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZlcmVuY2VzIH07CiAKLSAgICBwcmVmc1ByaXZh
dGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1l
bnQpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQob3B0aW9ucy5l
bmFibGVLZXlnZW5FbGVtZW50KTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkKG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyk7Ci0gICAgcHJl
ZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKG9wdGlvbnMuZW5hYmxlSW5z
cGVjdG9yQWRkaXRpb25zKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldFJlcXVlc3RJZGxlQ2FsbGJh
Y2tFbmFibGVkKG9wdGlvbnMuZW5hYmxlUmVxdWVzdElkbGVDYWxsYmFjayk7Ci0gICAgcHJlZnNQ
cml2YXRlLT5zZXRBc3luY0NsaXBib2FyZEFQSUVuYWJsZWQob3B0aW9ucy5lbmFibGVBc3luY0Ns
aXBib2FyZEFQSSk7Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRDb250YWN0UGlja2VyQVBJRW5hYmxl
ZChvcHRpb25zLmVuYWJsZUNvbnRhY3RQaWNrZXJBUEkpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0
V2ViU1FMRW5hYmxlZChvcHRpb25zLmVuYWJsZVdlYlNRTCk7Ci0gICAgcHJlZnNQcml2YXRlLT5z
ZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQo
b3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0VXNlc1Bh
Z2VDYWNoZShvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIHByZWZzUHJpdmF0
ZS0+c2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZChvcHRpb25zLmVuYWJsZUNTU09N
Vmlld1Ntb290aFNjcm9sbGluZyk7CisgICAgcHJlZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpOworICAgIHByZWZlcmVuY2Vz
LT5zZXRVc2VzUGFnZUNhY2hlKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJVc2VzQmFj
a0ZvcndhcmRDYWNoZSIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRN
ZW51SXRlbUVsZW1lbnRFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJNZW51
SXRlbUVsZW1lbnRFbmFibGVkIiwgZmFsc2UsIG9wdGlvbnMpKTsKKyAgICBwcmVmc1ByaXZhdGUt
PnNldEtleWdlbkVsZW1lbnRFbmFibGVkKGJvb2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJL
ZXlnZW5FbGVtZW50RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRl
LT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVW
YWx1ZSgiTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCB0cnVlLCBvcHRpb25zKSk7CisgICAg
cHJlZnNQcml2YXRlLT5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKGJvb2xXZWJQcmVmZXJl
bmNlRmVhdHVyZVZhbHVlKCJJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkIiwgZmFsc2UsIG9wdGlv
bnMpKTsKKyAgICBwcmVmc1ByaXZhdGUtPnNldFJlcXVlc3RJZGxlQ2FsbGJhY2tFbmFibGVkKGJv
b2xXZWJQcmVmZXJlbmNlRmVhdHVyZVZhbHVlKCJSZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCIs
IGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRBc3luY0NsaXBib2FyZEFQ
SUVuYWJsZWQoYm9vbFdlYlByZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkFzeW5jQ2xpcGJvYXJkQVBJ
RW5hYmxlZCIsIGZhbHNlLCBvcHRpb25zKSk7CisgICAgcHJlZnNQcml2YXRlLT5zZXRDb250YWN0
UGlja2VyQVBJRW5hYmxlZChib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1ZSgiQ29udGFjdFBp
Y2tlckFQSUVuYWJsZWQiLCBmYWxzZSwgb3B0aW9ucykpOworICAgIHByZWZzUHJpdmF0ZS0+c2V0
QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyhib29sV2ViUHJlZmVyZW5jZUZlYXR1cmVWYWx1
ZSgiQWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUsIG9wdGlvbnMpKTsKKyAgICBw
cmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQoYm9vbFdlYlBy
ZWZlcmVuY2VGZWF0dXJlVmFsdWUoIkNTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQiLCBm
YWxzZSwgb3B0aW9ucykpOwogfQogCiBzdGF0aWMgU3RyaW5nIGFwcGxpY2F0aW9uSWQoKQpAQCAt
OTczLDkgKzk4Miw5IEBAIHN0YXRpYyB2b2lkIHNldEpTQ09wdGlvbnMoY29uc3QgV1RSOjpUZXMK
ICAgICAgICAgc2F2ZWRPcHRpb25zLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbnMu
anNjT3B0aW9ucy5sZW5ndGgoKSkgeworICAgIGlmICghb3B0aW9ucy5qc2NPcHRpb25zKCkuZW1w
dHkoKSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zSW5BTGluZShzYXZl
ZE9wdGlvbnMpOwotICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy5qc2NP
cHRpb25zLmNfc3RyKCkpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9u
cy5qc2NPcHRpb25zKCkuY19zdHIoKSk7CiAgICAgfQogfQogCkBAIC0xMTY4LDcgKzExNzcsNyBA
QCBzdGF0aWMgYm9vbCBoYW5kbGVDb250cm9sQ29tbWFuZChjb25zdCBjCiAKIHN0YXRpYyBXVFI6
OlRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBXVFI6OlRlc3RDb21tYW5kJiBj
b21tYW5kKQogewotICAgIFdUUjo6VGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIFdUUjo6VGVz
dEZlYXR1cmVzIGZlYXR1cmVzID0gV1RSOjpUZXN0T3B0aW9uczo6ZGVmYXVsdHMoKTsKICAgICBX
VFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JU
ZXN0KGNvbW1hbmQpKTsKICAgICBXVFI6Om1lcmdlKGZlYXR1cmVzLCBXVFI6OmZlYXR1cmVEZWZh
dWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kLCBXVFI6OlRlc3RPcHRpb25zOjprZXlU
eXBlTWFwcGluZygpKSk7CiAKQEAgLTEyMjksNyArMTIzOCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIDo6Z1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVy
OjpjcmVhdGUodGVzdFVSTC5kYXRhKCksIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAg
IDo6Z1Rlc3RSdW5uZXItPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0Lm1pbGxpc2Vj
b25kcygpKTsKLSAgICA6OmdUZXN0UnVubmVyLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIo
Y29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIpOworICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAgIHRvcExvYWRpbmdGcmFtZSA9IG51bGxwdHI7CiAg
ICAgZG9uZSA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="428270"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>