<?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>226757</bug_id>
          
          <creation_ts>2021-06-07 22:45:44 -0700</creation_ts>
          <short_desc>[Cocoa] Upstream GroupActivitiesCoordinator</short_desc>
          <delta_ts>2021-06-22 14:56:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>achristensen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jean-yves.avenard</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1767674</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-07 22:45:44 -0700</bug_when>
    <thetext>[Cocoa] Upstream GroupActivitiesCoordinator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767678</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-07 22:47:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/78984282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767680</commentid>
    <comment_count>2</comment_count>
      <attachid>430812</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-07 22:54:25 -0700</bug_when>
    <thetext>Created attachment 430812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767681</commentid>
    <comment_count>3</comment_count>
      <attachid>430813</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-07 23:20:45 -0700</bug_when>
    <thetext>Created attachment 430813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767792</commentid>
    <comment_count>4</comment_count>
      <attachid>430813</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-08 09:07:12 -0700</bug_when>
    <thetext>Comment on attachment 430813
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSession.mm:27
&gt; +#import  &quot;config.h&quot;
&gt; +#import  &quot;GroupSession.h&quot;

Extra spaces.

&gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSession.mm:35
&gt; +Ref&lt;GroupSession&gt; GroupSession::create(RetainPtr&lt;WKGroupSession&gt;&amp;&amp; session)

These names seem too generic. I think we should make these quite a bit specific to the use case.

&gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSessionNotifier.mm:58
&gt; +static void* WebKitSwiftLibrary()
&gt; +{
&gt; +    static void* dylib = [] {
&gt; +        // Start by searching for the library in DYLD_LIBRARY_PATH:
&gt; +        if (void *result = dlopen(&quot;libWebKitSwift.dylib&quot;, RTLD_NOW))
&gt; +            return result;
&gt; +
&gt; +        // Then search in the Frameworks/ directory of the currently loaded version of WebKit.framework:
&gt; +        Dl_info info { };
&gt; +        if (dladdr((const void*)&amp;WebKitSwiftLibrary, &amp;info) &amp;&amp; strlen(info.dli_fname)) {
&gt; +            auto webkitFrameworkDirectory = WTF::FileSystemImpl::parentPath(info.dli_fname);
&gt; +            auto dylibPath = WTF::FileSystemImpl::pathByAppendingComponent(webkitFrameworkDirectory, &quot;Frameworks/libWebKitSwift.dylib&quot;);
&gt; +            if (void* result = dlopen(dylibPath.utf8().data(), RTLD_NOW))
&gt; +                return result;
&gt; +        }
&gt; +
&gt; +        // Finally, search at the installed system path:
&gt; +        if (void *result = dlopen(&quot;/System/Library/Frameworks/WebKit.framework/Frameworks/libWebKitSwift.dylib&quot;, RTLD_NOW))
&gt; +            return result;
&gt; +
&gt; +        return (void *)nullptr;
&gt; +    }();
&gt; +    return dylib;
&gt; +}

Given this is a generic linking of libWebKitSwift.dylib, and could be used for other things in the future, this should probably go in its own .h/.cpp file.

&gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/WKGroupSession.swift:30
&gt; +import AVFoundation
&gt; +import Combine
&gt; +@_spi(Safari) import GroupActivities
&gt; +import Foundation
&gt; +

We don&apos;t allow Swift in the WebKit project. This probably needs to be discussed on webkit-dev to determine if it makes sense to allow this addition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767793</commentid>
    <comment_count>5</comment_count>
      <attachid>430813</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-08 09:07:50 -0700</bug_when>
    <thetext>Comment on attachment 430813
Patch

r-ing due to the concerns around use of a new language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767918</commentid>
    <comment_count>6</comment_count>
      <attachid>430813</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-08 14:56:20 -0700</bug_when>
    <thetext>Comment on attachment 430813
Patch

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

&gt;&gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSession.mm:35
&gt;&gt; +Ref&lt;GroupSession&gt; GroupSession::create(RetainPtr&lt;WKGroupSession&gt;&amp;&amp; session)
&gt; 
&gt; These names seem too generic. I think we should make these quite a bit specific to the use case.

Jer and I discussed this and think that using the prefix GroupActivity or maybe GroupActivities for these classes will help quite a bit. So this will become GroupActivitySession or GroupActivitiesSession.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767939</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-08 15:39:24 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Comment on attachment 430813 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430813&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSession.mm:27
&gt; &gt; +#import  &quot;config.h&quot;
&gt; &gt; +#import  &quot;GroupSession.h&quot;
&gt; 
&gt; Extra spaces.

Deleted.

&gt; &gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSession.mm:35
&gt; &gt; +Ref&lt;GroupSession&gt; GroupSession::create(RetainPtr&lt;WKGroupSession&gt;&amp;&amp; session)
&gt; 
&gt; These names seem too generic. I think we should make these quite a bit
&gt; specific to the use case.

I made all the classes in this area match, with a prefix of GroupActivities, which is the name of the underlying framework.

&gt; &gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/GroupSessionNotifier.mm:58
&gt; &gt; +static void* WebKitSwiftLibrary()
&gt; &gt; +{
&gt; &gt; +    static void* dylib = [] {
&gt; &gt; +        // Start by searching for the library in DYLD_LIBRARY_PATH:
&gt; &gt; +        if (void *result = dlopen(&quot;libWebKitSwift.dylib&quot;, RTLD_NOW))
&gt; &gt; +            return result;
&gt; &gt; +
&gt; &gt; +        // Then search in the Frameworks/ directory of the currently loaded version of WebKit.framework:
&gt; &gt; +        Dl_info info { };
&gt; &gt; +        if (dladdr((const void*)&amp;WebKitSwiftLibrary, &amp;info) &amp;&amp; strlen(info.dli_fname)) {
&gt; &gt; +            auto webkitFrameworkDirectory = WTF::FileSystemImpl::parentPath(info.dli_fname);
&gt; &gt; +            auto dylibPath = WTF::FileSystemImpl::pathByAppendingComponent(webkitFrameworkDirectory, &quot;Frameworks/libWebKitSwift.dylib&quot;);
&gt; &gt; +            if (void* result = dlopen(dylibPath.utf8().data(), RTLD_NOW))
&gt; &gt; +                return result;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        // Finally, search at the installed system path:
&gt; &gt; +        if (void *result = dlopen(&quot;/System/Library/Frameworks/WebKit.framework/Frameworks/libWebKitSwift.dylib&quot;, RTLD_NOW))
&gt; &gt; +            return result;
&gt; &gt; +
&gt; &gt; +        return (void *)nullptr;
&gt; &gt; +    }();
&gt; &gt; +    return dylib;
&gt; &gt; +}
&gt; 
&gt; Given this is a generic linking of libWebKitSwift.dylib, and could be used
&gt; for other things in the future, this should probably go in its own .h/.cpp
&gt; file.

Moved this into WebKitSwiftSoftLink.h/mm

&gt; &gt; Source/WebKit/UIProcess/Cocoa/GroupActivities/WKGroupSession.swift:30
&gt; &gt; +import AVFoundation
&gt; &gt; +import Combine
&gt; &gt; +@_spi(Safari) import GroupActivities
&gt; &gt; +import Foundation
&gt; &gt; +
&gt; 
&gt; We don&apos;t allow Swift in the WebKit project. This probably needs to be
&gt; discussed on webkit-dev to determine if it makes sense to allow this
&gt; addition.

I&apos;ll start a thread on webkit-dev with the caveat that this is merely bridging code for a Swift-API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767944</commentid>
    <comment_count>8</comment_count>
      <attachid>430906</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-08 16:14:12 -0700</bug_when>
    <thetext>Created attachment 430906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768022</commentid>
    <comment_count>9</comment_count>
      <attachid>430906</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-06-08 19:00:58 -0700</bug_when>
    <thetext>Comment on attachment 430906
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.mm:51
&gt; +        if ((library = dlopen(&quot;/System/Library/Frameworks/WebKit.framework/Frameworks/libWebKitSwift.dylib&quot;, RTLD_NOW)))

Could we not hard-code this path into the binary?  I&apos;m imagining lots of problems with INSTALL_PATH being different in places like our catalyst build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768043</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-08 21:26:07 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Comment on attachment 430906 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430906&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.mm:51
&gt; &gt; +        if ((library = dlopen(&quot;/System/Library/Frameworks/WebKit.framework/Frameworks/libWebKitSwift.dylib&quot;, RTLD_NOW)))
&gt; 
&gt; Could we not hard-code this path into the binary?  I&apos;m imagining lots of
&gt; problems with INSTALL_PATH being different in places like our catalyst build.

The Catalyst and Staging paths should be covered by the &quot;look in the Frameworks/ directory of the current-loaded WebKit binary&quot; case above.  But because we have to soft-link this dylib rather than strong- or weak-link, the mechanisms we would usually use for locating dylibs won&apos;t work here. I&apos;m open to other ideas however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768210</commentid>
    <comment_count>11</comment_count>
      <attachid>430906</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-06-09 09:54:34 -0700</bug_when>
    <thetext>Comment on attachment 430906
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.mm:51
&gt;&gt;&gt; +        if ((library = dlopen(&quot;/System/Library/Frameworks/WebKit.framework/Frameworks/libWebKitSwift.dylib&quot;, RTLD_NOW)))
&gt;&gt; 
&gt;&gt; Could we not hard-code this path into the binary?  I&apos;m imagining lots of problems with INSTALL_PATH being different in places like our catalyst build.
&gt; 
&gt; The Catalyst and Staging paths should be covered by the &quot;look in the Frameworks/ directory of the current-loaded WebKit binary&quot; case above.  But because we have to soft-link this dylib rather than strong- or weak-link, the mechanisms we would usually use for locating dylibs won&apos;t work here. I&apos;m open to other ideas however.

Would it work if we just removed this and only searched in the two previous locations?  I&apos;m just worried about us loading the wrong version in Catalyst builds or in Safari Tech Preview</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768214</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-09 10:04:55 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #11)
&gt; Would it work if we just removed this and only searched in the two previous
&gt; locations?  I&apos;m just worried about us loading the wrong version in Catalyst
&gt; builds or in Safari Tech Preview

I think the fallback could be safely removed; this would mean that certain features would fail to work if the .dylib was missing, but the entire point of this .dylib is to handle that scenario, for things like BaseOS installs. I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768215</commentid>
    <comment_count>13</comment_count>
      <attachid>430973</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-09 10:05:30 -0700</bug_when>
    <thetext>Created attachment 430973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768390</commentid>
    <comment_count>14</comment_count>
      <attachid>430973</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-09 16:48:01 -0700</bug_when>
    <thetext>Comment on attachment 430973
Patch

What is the plan for testing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768393</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-09 16:49:15 -0700</bug_when>
    <thetext>Erg, didn&apos;t realize there was still a discussion going on about the soft-linking. Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768399</commentid>
    <comment_count>16</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-09 17:16:59 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #15)
&gt; Erg, didn&apos;t realize there was still a discussion going on about the
&gt; soft-linking. Sorry.

No, I took Alex&apos;s suggestion and implemented it. The current patch reflects that.

(In reply to Sam Weinig from comment #14)
&gt; Comment on attachment 430973 [details]
&gt; Patch
&gt; 
&gt; What is the plan for testing this?

Manual testing only, as it involves a separate device and a FaceTime connection to be functional. We have mock versions of the coordinator&apos;s private objects and layout tests based on those mock objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768409</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-06-09 17:41:58 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #16)
&gt; 
&gt; (In reply to Sam Weinig from comment #14)
&gt; &gt; Comment on attachment 430973 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; What is the plan for testing this?
&gt; 
&gt; Manual testing only, as it involves a separate device and a FaceTime
&gt; connection to be functional. We have mock versions of the coordinator&apos;s
&gt; private objects and layout tests based on those mock objects.

And a fairly extensive API test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771743</commentid>
    <comment_count>18</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-22 11:49:55 -0700</bug_when>
    <thetext>Committed r279133: https://trac.webkit.org/r279133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771789</commentid>
    <comment_count>19</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-22 14:21:10 -0700</bug_when>
    <thetext>Follow-up build fix: Committed r279147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771803</commentid>
    <comment_count>20</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-06-22 14:56:01 -0700</bug_when>
    <thetext>Yet another follow-up build fix: Committed r279151</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430812</attachid>
            <date>2021-06-07 22:54:25 -0700</date>
            <delta_ts>2021-06-07 23:20:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226757-20210607225424.patch</filename>
            <type>text/plain</type>
            <size>59246</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRjMmE3NzY0OGU4NGJhODlj
NmVkODFlOGMwOWUwZjFlZTUwMDBjOWMuLjk1MmU5YzE2MDBkNzUzYjdiYjlhMDE2MWIzZjZlNTBm
NzFkNzI2YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMjEtMDYtMDcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVcHN0cmVhbSBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2NzU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgYSBHcm91cEFj
dGl2aXRpZXMtYmFzZWQgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IuCisKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBpbml0
V2l0aFBhcmVudDpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRl
bGVnYXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQbGF5Q29tbWFuZDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQYXVzZUNvbW1hbmQ6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0
ZSBwbGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlU2Vla0NvbW1hbmQ6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBw
bGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlQnVmZmVyaW5nQ29tbWFuZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVnYXRl
IHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQ6XSk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6R3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGlu
YXRvcjo6fkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6R3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpqb2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmxlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlZWtUbyk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNldFRyYWNrKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBvc2l0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBsYXliYWNr
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0
b3I6OnRyYWNrSWRlbnRpZmllckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvcjo6aXNzdWVQbGF5Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBhdXNlQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVNlZWtDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5n
Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpp
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
Okdyb3VwU2Vzc2lvbjo6Z3JvdXBTZXNzaW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
R3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
Okdyb3VwU2Vzc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNzaW9uOjpH
cm91cFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb246On5Hcm91cFNlc3Np
b24pOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb246OmpvaW4pOgorICAgICAgICAoV2Vi
S2l0OjpHcm91cFNlc3Npb246OmxlYXZlKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNzaW9u
OjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbjo6dXVpZCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbjo6ZmFsbGJhY2tVUkwgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb246OmFkZFN0YXRlQ2hhbmdlT2JzZXJ2ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBTZXNzaW9uTm90
aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGll
cy9Hcm91cFNlc3Npb25Ob3RpZmllci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXRTd2lmdExp
YnJhcnkpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90
aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3RpZmllcjo6R3JvdXBTZXNz
aW9uTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3RpZmllcjo6c2Vz
c2lvblN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbk5vdGlmaWVy
OjphZGRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNzaW9uTm90aWZpZXI6OnJl
bW92ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3RpZmllcjo6d2Vi
UGFnZVVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3RpZmllcjo6
aGFzU2Vzc2lvbkZvclVSTCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbk5vdGlmaWVy
Ojp0YWtlU2Vzc2lvbkZvclVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0
aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLnN3aWZ0OiBBZGRlZC4KKyAgICAgICAg
KFVSTEFjdGl2aXR5V3JhcHBlci51cmxBY3Rpdml0eSk6CisgICAgICAgIChVUkxBY3Rpdml0eVdy
YXBwZXIuZmFsbGJhY2tVUkwpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmdyb3Vw
U2Vzc2lvbik6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIuY2FuY2VsbGFibGVzKToK
KyAgICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5hY3Rpdml0eSk6CisgICAgICAgIChXS0dy
b3VwU2Vzc2lvbldyYXBwZXIudXVpZCk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIu
d3JhcHBlclNlc3Npb25TdGF0ZShfOikpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVy
LnN0YXRlKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5uZXdBY3Rpdml0eUNhbGxi
YWNrKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIuam9pbik6CisgICAgICAgIChXS0dy
b3VwU2Vzc2lvbldyYXBwZXIubGVhdmUpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVy
LmNvb3JkaW5hdGUoXzopKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5hY3Rpdml0
eUNoYW5nZWQoXzopKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5n
ZWQoXzopKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIubmV3U2Vzc2lvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIuY2FuY2VsbGFibGVzKToKKyAg
ICAgICAgKFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIucmVjaWV2ZWRTZXNzaW9uKF86KSk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fbGlt
aXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6fldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKwogMjAyMS0wNS0yMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNzY5OTMpOiA1IFRlc3RXZWJLaXRBUEkuQXVkaW9S
b3V0aW5nQXJiaXRyYXRpb24gKGFwaS10ZXN0cykgYXJlIGNvbnN0YW50IGZhaWx1cmVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggYjE0ODAxM2M5MDQ2NWY5MzJmYzZhZDk0YjFlN2FmOTQ5NDEy
MzhjOS4uYmY3MGUwMzY5MzBiMjcyNTZkYWU1NDRiNjZlNDY3MGFkMGYyNWJkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtMzczLDYgKzM3MywxMCBAQCBVSVByb2Nlc3MvQXV0b21hdGlvbi9p
b3MvV2ViQXV0b21hdGlvblNlc3Npb25JT1MubW0KIAogVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFj
L1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCiAKK1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2
aXRpZXMvR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IubW0KK1VJUHJvY2Vzcy9Db2NvYS9Hcm91
cEFjdGl2aXRpZXMvR3JvdXBTZXNzaW9uLm1tCitVSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0
aWVzL0dyb3VwU2Vzc2lvbk5vdGlmaWVyLm1tCisKIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KIFVJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCiBVSVByb2Nl
c3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0
aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iODEzNGU3NDc4ZTM5OTZhMTUyMGQ5NmU5YmQ3ZmMwYTcxMDdkMTUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVz
L0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1Ip
ICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2luY2x1ZGUgIkdyb3VwU2Vzc2lvbi5oIgor
I2luY2x1ZGUgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHlQcml2YXRlLmgiCisjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisKK09CSkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxh
eWJhY2tDb29yZGluYXRvcjsKK09CSkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGlu
YXRvclBsYXlDb21tYW5kOworT0JKQ19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5h
dG9yUGF1c2VDb21tYW5kOworT0JKQ19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5h
dG9yU2Vla0NvbW1hbmQ7CitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0
b3JCdWZmZXJpbmdDb21tYW5kOworT0JKQ19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3Jk
aW5hdG9yUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kOworT0JKQ19DTEFTUyBXS0dyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yRGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBH
cm91cEFjdGl2aXRpZXNDb29yZGluYXRvciBmaW5hbCA6IHB1YmxpYyBNZWRpYVNlc3Npb25Db29y
ZGluYXRvclByb3h5UHJpdmF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcj4gY3JlYXRlKEdy
b3VwU2Vzc2lvbiYpOworICAgIH5Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcigpOworCisgICAg
dXNpbmcgQ29tbWFuZENvbXBsZXRpb25IYW5kbGVyID0gRnVuY3Rpb248dm9pZCgpPjsKKyAgICB2
b2lkIGlzc3VlUGxheUNvbW1hbmQoQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBsYXlD
b21tYW5kICosIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGlzc3VlUGF1
c2VDb21tYW5kKEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQYXVzZUNvbW1hbmQgKiwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgaXNzdWVTZWVrQ29tbWFuZChB
VkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yU2Vla0NvbW1hbmQgKiwgQ29tbWFuZENvbXBs
ZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgaXNzdWVCdWZmZXJpbmdDb21tYW5kKEFWRGVsZWdh
dGluZ1BsYXliYWNrQ29vcmRpbmF0b3JCdWZmZXJpbmdDb21tYW5kICosIENvbW1hbmRDb21wbGV0
aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGlzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kKEFW
RGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQgKik7
CisKK3ByaXZhdGU6CisgICAgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IoR3JvdXBTZXNzaW9u
Jik7CisKKyAgICB2b2lkIHNlc3Npb25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBTZXNzaW9uJiwg
R3JvdXBTZXNzaW9uOjpTdGF0ZSk7CisKKyAgICB1c2luZyBDb29yZGluYXRvckNvbXBsZXRpb25I
YW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkV4
Y2VwdGlvbkRhdGE+JiYpPjsKKyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgam9pbihDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAg
IHZvaWQgbGVhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHNlZWtUbyhkb3VibGUsIENvb3JkaW5hdG9y
Q29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBwbGF5KENvb3JkaW5hdG9yQ29t
cGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBwYXVzZShDb29yZGluYXRvckNvbXBs
ZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2V0VHJhY2soY29uc3QgU3RyaW5nJiwg
Q29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHBvc2l0aW9u
U3RhdGVDaGFuZ2VkKGNvbnN0IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFQb3NpdGlvblN0
YXRlPiYpIGZpbmFsOworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoV2ViQ29yZTo6TWVkaWFT
ZXNzaW9uUmVhZHlTdGF0ZSkgZmluYWw7CisgICAgdm9pZCBwbGF5YmFja1N0YXRlQ2hhbmdlZChX
ZWJDb3JlOjpNZWRpYVNlc3Npb25QbGF5YmFja1N0YXRlKSBmaW5hbDsKKyAgICB2b2lkIHRyYWNr
SWRlbnRpZmllckNoYW5nZWQoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBSZWY8R3JvdXBT
ZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3JEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8QVZEZWxlZ2F0aW5nUGxh
eWJhY2tDb29yZGluYXRvcj4gbV9wbGF5YmFja0Nvb3JkaW5hdG9yOworCisgICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpNZWRpYVBvc2l0aW9uU3RhdGU+IG1fcG9zaXRpb25TdGF0ZTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6Ok1lZGlhU2Vzc2lvblJlYWR5U3RhdGU+IG1fcmVhZHlTdGF0
ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6Ok1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGU+
IG1fcGxheWJhY2tTdGF0ZTsKKworICAgIEdyb3VwU2Vzc2lvbjo6U3RhdGVDaGFuZ2VPYnNlcnZl
ciBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBB
Y3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMWI4
ZWU2NDJhYzQ1MzM1YWY2MmJlMmQyOGExZDlkOTgxZTM3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3IubW0KQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgiCisKKyNp
ZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikgJiYgSEFWRShHUk9VUF9BQ1RJVklU
SUVTKQorCisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KKworI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+
CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKworQGludGVyZmFjZSBXS0dy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yRGVsZWdhdGUgOiBOU09iamVjdDxBVlBsYXliYWNrQ29v
cmRpbmF0b3JQbGF5YmFja0NvbnRyb2xEZWxlZ2F0ZT4geworICAgIFdlYWtQdHI8V2ViS2l0OjpH
cm91cEFjdGl2aXRpZXNDb29yZGluYXRvcj4gX3BhcmVudDsKK30KKy0gKGlkKWluaXRXaXRoUGFy
ZW50OihXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yJilwYXJlbnQ7CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBXS0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yRGVsZWdhdGUKKy0g
KGlkKWluaXRXaXRoUGFyZW50OihXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yJilw
YXJlbnQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIF9wYXJlbnQgPSBtYWtlV2Vha1B0cihwYXJlbnQpOworICAg
IHJldHVybiBzZWxmOworfQorCistKHZvaWQpcGxheWJhY2tDb29yZGluYXRvcjooQVZEZWxlZ2F0
aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGRpZElzc3VlUGxheUNvbW1hbmQ6
KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZCAqKXBsYXlDb21tYW5k
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciB7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
aWYgKF9wYXJlbnQpIHsKKyAgICAgICAgICAgIF9wYXJlbnQtPmlzc3VlUGxheUNvbW1hbmQocGxh
eUNvbW1hbmQsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFu
ZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworLSh2b2lkKXBsYXliYWNrQ29vcmRpbmF0
b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRJc3N1
ZVBhdXNlQ29tbWFuZDooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFu
ZCAqKXBhdXNlQ29tbWFuZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIgeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIGlmICghX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgX3BhcmVudC0+aXNzdWVQYXVzZUNvbW1hbmQocGF1c2VDb21tYW5kLCBbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLSh2b2lkKXBs
YXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3IgKiljb29y
ZGluYXRvciBkaWRJc3N1ZVNlZWtDb21tYW5kOihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5h
dG9yU2Vla0NvbW1hbmQgKilzZWVrQ29tbWFuZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIgeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghX3BhcmVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgX3BhcmVudC0+aXNzdWVTZWVrQ29tbWFuZChzZWVrQ29tbWFuZCwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisK
Ky0odm9pZClwbGF5YmFja0Nvb3JkaW5hdG9yOihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5h
dG9yICopY29vcmRpbmF0b3IgZGlkSXNzdWVCdWZmZXJpbmdDb21tYW5kOihBVkRlbGVnYXRpbmdQ
bGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqKWJ1ZmZlcmluZ0NvbW1hbmQgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIHsKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAo
IV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIF9wYXJlbnQtPmlzc3VlQnVm
ZmVyaW5nQ29tbWFuZChidWZmZXJpbmdDb21tYW5kLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLSh2b2lkKXBsYXliYWNrQ29vcmRp
bmF0b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRJ
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZDooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGlu
YXRvclByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCAqKXByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCB7
CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgaWYgKF9wYXJlbnQpCisgICAgICAgICAgICBfcGFyZW50LT5pc3N1ZVByZXBhcmVUcmFuc2l0
aW9uQ29tbWFuZChwcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQpOworICAgIH0pOworfQorQGVuZAor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yPiBH
cm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6Y3JlYXRlKEdyb3VwU2Vzc2lvbiYgc2Vzc2lvbikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihz
ZXNzaW9uKSk7Cit9CisKK0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpHcm91cEFjdGl2aXRp
ZXNDb29yZGluYXRvcihHcm91cFNlc3Npb24mIHNlc3Npb24pCisgICAgOiBtX3Nlc3Npb24oc2Vz
c2lvbikKKyAgICAsIG1fZGVsZWdhdGUoYWRvcHROUyhbW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3JEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhQYXJlbnQ6KnRoaXNdKSkKKyAgICAsIG1fcGxh
eWJhY2tDb29yZGluYXRvcihhZG9wdE5TKFtQQUw6OmFsbG9jQVZEZWxlZ2F0aW5nUGxheWJhY2tD
b29yZGluYXRvckluc3RhbmNlKCkgaW5pdFdpdGhQbGF5YmFja0NvbnRyb2xEZWxlZ2F0ZTptX2Rl
bGVnYXRlLmdldCgpXSkpCisgICAgLCBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXIoW3RoaXNdIChhdXRv
JiBzZXNzaW9uLCBhdXRvIHN0YXRlKSB7IHNlc3Npb25TdGF0ZUNoYW5nZWQoc2Vzc2lvbiwgc3Rh
dGUpOyB9KQoreworICAgIFtzZXNzaW9uLmdyb3VwU2Vzc2lvbigpIGNvb3JkaW5hdGVXaXRoQ29v
cmRpbmF0b3I6bV9wbGF5YmFja0Nvb3JkaW5hdG9yLmdldCgpXTsKKyAgICBzZXNzaW9uLmFkZFN0
YXRlQ2hhbmdlT2JzZXJ2ZXIobV9zdGF0ZUNoYW5nZU9ic2VydmVyKTsKK30KKworR3JvdXBBY3Rp
dml0aWVzQ29vcmRpbmF0b3I6On5Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcigpCit7CisgICAg
bV9zZXNzaW9uLT5ncm91cFNlc3Npb24oKS5uZXdBY3Rpdml0eUNhbGxiYWNrID0gbmlsOworICAg
IG1fc2Vzc2lvbi0+Z3JvdXBTZXNzaW9uKCkuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBuaWw7Cit9
CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQo
Y29uc3QgR3JvdXBTZXNzaW9uJiBzZXNzaW9uLCBHcm91cFNlc3Npb246OlN0YXRlIHN0YXRlKQor
eworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpXYWl0
aW5nKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEdyb3VwU2Vzc2lvbjo6U3RhdGU6OldhaXRpbmcp
LCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6V2FpdGluZyAhPSBXS0dyb3VwU2Vzc2lv
blN0YXRlV2FpdGluZyIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihN
ZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpKb2luZWQpID09IHN0YXRpY19jYXN0PHNpemVf
dD4oR3JvdXBTZXNzaW9uOjpTdGF0ZTo6Sm9pbmVkKSwgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9y
U3RhdGU6OkpvaW5lZCAhPSBXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkIik7CisgICAgc3RhdGlj
X2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU6
OkNsb3NlZCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihHcm91cFNlc3Npb246OlN0YXRlOjpJbnZh
bGlkYXRlZCksICJNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpDbG9zZWQgIT0gV0tHcm91
cFNlc3Npb25TdGF0ZUludmFsaWRhdGVkIik7CisgICAgY2xpZW50KCktPmNvb3JkaW5hdG9yU3Rh
dGVDaGFuZ2VkKHN0YXRpY19jYXN0PE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU+KHN0YXRl
KSk7Cit9CisKK1N0cmluZyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vzc2lvbi0+dXVpZCgpOworfQorCit2b2lkIEdyb3Vw
QWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXIm
JiBjYWxsYmFjaykKK3sKKyAgICBtX3Nlc3Npb24tPmpvaW4oKTsKKyAgICBjYWxsYmFjayhzdGQ6
Om51bGxvcHQpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpsZWF2ZSgp
Cit7CisgICAgbV9zZXNzaW9uLT5sZWF2ZSgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nv
b3JkaW5hdG9yOjpzZWVrVG8oZG91YmxlIHRpbWUsIENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRs
ZXImJiBjYWxsYmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVT
ZWVrVG9UaW1lOkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCAxMDAwKSBvcHRpb25zOjBdOwor
ICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29v
cmRpbmF0b3I6OnBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQor
eworICAgIFttX3BsYXliYWNrQ29vcmRpbmF0b3IgY29vcmRpbmF0ZVJhdGVDaGFuZ2VUb1JhdGU6
MSBvcHRpb25zOjBdOworICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBhdXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRs
ZXImJiBjYWxsYmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVS
YXRlQ2hhbmdlVG9SYXRlOjAgb3B0aW9uczowXTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXRUcmFjayhjb25zdCBT
dHJpbmcmIHRyYWNrLCBDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7
CisgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvcjo6cG9zaXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxNZWRp
YVBvc2l0aW9uU3RhdGU+JiBwb3NpdGlvblN0YXRlKQoreworICAgIGlmIChtX3Bvc2l0aW9uU3Rh
dGUgPT0gcG9zaXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcG9zaXRpb25TdGF0
ZSA9IHBvc2l0aW9uU3RhdGU7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6
OnJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU2Vzc2lvblJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sK
KyAgICBpZiAobV9yZWFkeVN0YXRlID09IHJlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nv
b3JkaW5hdG9yOjpwbGF5YmFja1N0YXRlQ2hhbmdlZChNZWRpYVNlc3Npb25QbGF5YmFja1N0YXRl
IHBsYXliYWNrU3RhdGUpCit7CisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBwbGF5YmFja1N0
YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9wbGF5YmFja1N0YXRlID0gcGxheWJhY2tTdGF0
ZTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6dHJhY2tJZGVudGlmaWVy
Q2hhbmdlZChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIg
IT0gU3RyaW5nKFttX3BsYXliYWNrQ29vcmRpbmF0b3IgY3VycmVudEl0ZW1JZGVudGlmaWVyXSkp
CisgICAgICAgIFttX3BsYXliYWNrQ29vcmRpbmF0b3IgdHJhbnNpdGlvblRvSXRlbVdpdGhJZGVu
dGlmaWVyOmlkZW50aWZpZXIgcHJvcG9zaW5nSW5pdGlhbFRpbWluZ0Jhc2VkT25UaW1lYmFzZTpu
aWxdOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBsYXlDb21t
YW5kKEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZCAqcGxheUNvbW1h
bmQsIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIGlmICghY2xp
ZW50KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpdGVtVGltZTsKKyAgICBpZiAoQ01USU1FX0lTX05V
TUVSSUMocGxheUNvbW1hbmQuaXRlbVRpbWUpKQorICAgICAgICBpdGVtVGltZSA9IENNVGltZUdl
dFNlY29uZHMocGxheUNvbW1hbmQuaXRlbVRpbWUpOworICAgIHN0ZDo6b3B0aW9uYWw8TW9ub3Rv
bmljVGltZT4gaG9zdFRpbWU7CisgICAgaWYgKENNVElNRV9JU19OVU1FUklDKHBsYXlDb21tYW5k
Lmhvc3RDbG9ja1RpbWUpKQorICAgICAgICBob3N0VGltZSA9IE1vbm90b25pY1RpbWU6OmZyb21N
YWNoQWJzb2x1dGVUaW1lKENNQ2xvY2tDb252ZXJ0SG9zdFRpbWVUb1N5c3RlbVVuaXRzKHBsYXlD
b21tYW5kLmhvc3RDbG9ja1RpbWUpKTsKKworICAgIGNsaWVudCgpLT5wbGF5U2Vzc2lvbihpdGVt
VGltZSwgaG9zdFRpbWUsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYm9vbCkgewor
ICAgICAgICBjYWxsYmFjaygpOworICAgIH0pOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nv
b3JkaW5hdG9yOjppc3N1ZVBhdXNlQ29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5h
dG9yUGF1c2VDb21tYW5kICpwYXVzZUNvbW1hbmQsIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYm
IGNhbGxiYWNrKQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsaWVudCgpLT5wYXVzZVNlc3Npb24oW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChib29sKSB7CisgICAgICAgIGNhbGxiYWNrKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlU2Vl
a0NvbW1hbmQoQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kICpzZWVr
Q29tbWFuZCwgQ29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgaWYg
KCFjbGllbnQoKSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFDTVRJTUVfSVNfTlVNRVJJQyhzZWVrQ29tbWFuZC5pdGVtVGltZSkpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjbGllbnQoKS0+c2Vla1Nlc3Npb25Ub1RpbWUoQ01U
aW1lR2V0U2Vjb25kcyhzZWVrQ29tbWFuZC5pdGVtVGltZSksIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXSAoYm9vbCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5nQ29t
bWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqLCBD
b21tYW5kQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kKEFWRGVs
ZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQgKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vz
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYzMzQ5OTY4ZTcwYjQyZThmNmJiNWYwMzQwNTI0ODBjZGY0Mzhk
ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91
cEFjdGl2aXRpZXMvR3JvdXBTZXNzaW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYm
IEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2luY2x1ZGUgPHd0Zi9PYnNlcnZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtIYXNoU2V0Lmg+CisKK09CSkNfQ0xBU1MgV0tHcm91cFNlc3Npb247CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBHcm91cFNlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHcm91cFNl
c3Npb24+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEdyb3VwU2Vzc2lvbj4gY3JlYXRlKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7
CisgICAgfkdyb3VwU2Vzc2lvbigpOworCisgICAgdm9pZCBqb2luKCk7CisgICAgdm9pZCBsZWF2
ZSgpOworCisgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBXYWl0aW5n
LAorICAgICAgICBKb2luZWQsCisgICAgICAgIEludmFsaWRhdGVkLAorICAgIH07CisgICAgU3Rh
dGUgc3RhdGUoKSBjb25zdDsKKworICAgIFN0cmluZyB1dWlkKCkgY29uc3Q7CisgICAgVVJMIGZh
bGxiYWNrVVJMKCkgY29uc3Q7CisKKyAgICB1c2luZyBTdGF0ZUNoYW5nZU9ic2VydmVyID0gV1RG
OjpPYnNlcnZlcjx2b2lkKGNvbnN0IEdyb3VwU2Vzc2lvbiYsIFN0YXRlKT47CisgICAgdm9pZCBh
ZGRTdGF0ZUNoYW5nZU9ic2VydmVyKGNvbnN0IFN0YXRlQ2hhbmdlT2JzZXJ2ZXImKTsKKworICAg
IHVzaW5nIEZhbGxiYWNrVVJMT2JzZXJ2ZXIgPSBXVEY6Ok9ic2VydmVyPHZvaWQoY29uc3QgR3Jv
dXBTZXNzaW9uJiwgVVJMKT47CisgICAgdm9pZCBhZGRGYWxsYmFja1VSTE9ic2VydmVyKGNvbnN0
IEZhbGxiYWNrVVJMT2JzZXJ2ZXImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR3Jv
dXBTZXNzaW9uTm90aWZpZXI7CisgICAgZnJpZW5kIGNsYXNzIEdyb3VwQWN0aXZpdGllc0Nvb3Jk
aW5hdG9yOworICAgIEdyb3VwU2Vzc2lvbihSZXRhaW5QdHI8V0tHcm91cFNlc3Npb24+JiYpOwor
ICAgIFdLR3JvdXBTZXNzaW9uKiBncm91cFNlc3Npb24oKSB7IHJldHVybiBtX2dyb3VwU2Vzc2lv
bi5nZXQoKTsgfQorCisgICAgUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiBtX2dyb3VwU2Vzc2lv
bjsKKyAgICBXZWFrSGFzaFNldDxTdGF0ZUNoYW5nZU9ic2VydmVyPiBtX3N0YXRlQ2hhbmdlT2Jz
ZXJ2ZXJzOworICAgIFdlYWtIYXNoU2V0PEZhbGxiYWNrVVJMT2JzZXJ2ZXI+IG1fZmFsbGJhY2tV
UkxPYnNlcnZlcnM7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb24ubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDVkMDI0N2U3ZDgwN2IwNjgyNGM0YjM1YjczZjFkNjM2Njc0ZTVhYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZp
dGllcy9Hcm91cFNlc3Npb24ubW0KQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICAiY29uZmlnLmgiCisjaW1wb3J0ICAiR3JvdXBTZXNzaW9uLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikgJiYgSEFWRShHUk9VUF9BQ1RJVklUSUVTKQorCisj
aW1wb3J0ICJXS0dyb3VwU2Vzc2lvbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPEdy
b3VwU2Vzc2lvbj4gR3JvdXBTZXNzaW9uOjpjcmVhdGUoUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9u
PiYmIHNlc3Npb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JvdXBTZXNzaW9uKFdU
Rk1vdmUoc2Vzc2lvbikpKTsKK30KKworR3JvdXBTZXNzaW9uOjpHcm91cFNlc3Npb24oUmV0YWlu
UHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24pCisgICAgOiBtX2dyb3VwU2Vzc2lvbihXVEZN
b3ZlKHNlc3Npb24pKQoreworICAgIG1fZ3JvdXBTZXNzaW9uLmdldCgpLm5ld0FjdGl2aXR5Q2Fs
bGJhY2sgPSBbdGhpc10gKFVSTEFjdGl2aXR5ICphY3Rpdml0eSkgeworICAgICAgICBtX2ZhbGxi
YWNrVVJMT2JzZXJ2ZXJzLmZvckVhY2goW3RoaXMsIGFjdGl2aXR5XSAoYXV0byYgb2JzZXJ2ZXIp
IHsKKyAgICAgICAgICAgIG9ic2VydmVyKCp0aGlzLCBhY3Rpdml0eS5mYWxsYmFja1VSTCk7Cisg
ICAgICAgIH0pOworICAgIH07CisKKyAgICBtX2dyb3VwU2Vzc2lvbi5nZXQoKS5zdGF0ZUNoYW5n
ZWRDYWxsYmFjayA9IFt0aGlzXSAoV0tHcm91cFNlc3Npb25TdGF0ZSBzdGF0ZSkgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6OldhaXRpbmcpID09IHN0
YXRpY19jYXN0PHNpemVfdD4oV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRpbmcpLCAiTWVkaWFTZXNz
aW9uQ29vcmRpbmF0b3JTdGF0ZTo6V2FpdGluZyAhPSBXS0dyb3VwU2Vzc2lvblN0YXRlV2FpdGlu
ZyIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6Okpv
aW5lZCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkKSwg
Ik1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU6OkpvaW5lZCAhPSBXS0dyb3VwU2Vzc2lvblN0
YXRlSm9pbmVkIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihT
dGF0ZTo6SW52YWxpZGF0ZWQpID09IHN0YXRpY19jYXN0PHNpemVfdD4oV0tHcm91cFNlc3Npb25T
dGF0ZUludmFsaWRhdGVkKSwgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU6OkNsb3NlZCAh
PSBXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQiKTsKKyAgICAgICAgbV9zdGF0ZUNoYW5n
ZU9ic2VydmVycy5mb3JFYWNoKFt0aGlzLCBzdGF0ZV0gKGF1dG8mIG9ic2VydmVyKSB7CisgICAg
ICAgICAgICBvYnNlcnZlcigqdGhpcywgc3RhdGljX2Nhc3Q8U3RhdGU+KHN0YXRlKSk7CisgICAg
ICAgIH0pOworICAgIH07Cit9CisKK0dyb3VwU2Vzc2lvbjo6fkdyb3VwU2Vzc2lvbigpCit7Cisg
ICAgbV9ncm91cFNlc3Npb24uZ2V0KCkubmV3QWN0aXZpdHlDYWxsYmFjayA9IG5pbDsKKyAgICBt
X2dyb3VwU2Vzc2lvbi5nZXQoKS5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9IG5pbDsKK30KKwordm9p
ZCBHcm91cFNlc3Npb246OmpvaW4oKQoreworICAgIFttX2dyb3VwU2Vzc2lvbiBqb2luXTsKK30K
Kwordm9pZCBHcm91cFNlc3Npb246OmxlYXZlKCkKK3sKKyAgICBbbV9ncm91cFNlc3Npb24gbGVh
dmVdOworfQorCithdXRvIEdyb3VwU2Vzc2lvbjo6c3RhdGUoKSBjb25zdCAtPiBTdGF0ZQorewor
ICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6V2FpdGluZykgPT0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlV2FpdGluZyksICJTdGF0ZTo6
V2FpdGluZyAhPSBXS0dyb3VwU2Vzc2lvblN0YXRlV2FpdGluZyIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6Sm9pbmVkKSA9PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQpLCAiU3RhdGU6OkpvaW5lZCAhPSBXS0dyb3Vw
U2Vzc2lvblN0YXRlSm9pbmVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXpl
X3Q+KFN0YXRlOjpJbnZhbGlkYXRlZCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vz
c2lvblN0YXRlSW52YWxpZGF0ZWQpLCAiU3RhdGU6OkludmFsaWRhdGVkICE9IFdLR3JvdXBTZXNz
aW9uU3RhdGVJbnZhbGlkYXRlZCIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGF0ZT4oW21f
Z3JvdXBTZXNzaW9uIHN0YXRlXSk7Cit9CisKK1N0cmluZyBHcm91cFNlc3Npb246OnV1aWQoKSBj
b25zdAoreworICAgIHJldHVybiBbbV9ncm91cFNlc3Npb24gdXVpZF0uVVVJRFN0cmluZzsKK30K
KworVVJMIEdyb3VwU2Vzc2lvbjo6ZmFsbGJhY2tVUkwoKSBjb25zdAoreworICAgIHJldHVybiBb
bV9ncm91cFNlc3Npb24gYWN0aXZpdHldLmZhbGxiYWNrVVJMOworfQorCit2b2lkIEdyb3VwU2Vz
c2lvbjo6YWRkU3RhdGVDaGFuZ2VPYnNlcnZlcihjb25zdCBTdGF0ZUNoYW5nZU9ic2VydmVyJiBv
YnNlcnZlcikKK3sKKyAgICBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7Cit9
CisKK3ZvaWQgR3JvdXBTZXNzaW9uOjphZGRGYWxsYmFja1VSTE9ic2VydmVyKGNvbnN0IEZhbGxi
YWNrVVJMT2JzZXJ2ZXImIG9ic2VydmVyKQoreworICAgIG1fZmFsbGJhY2tVUkxPYnNlcnZlcnMu
YWRkKG9ic2VydmVyKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb25Ob3RpZmllci5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vz
c2lvbk5vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE5ZDU3NmJiMDMxMTQ4Njk4MmZhNzdiMmI2ZmY5
M2JjYzViNTZiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb25Ob3RpZmllci5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9O
X0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisKKyNpbmNsdWRlICJHcm91
cFNlc3Npb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxI
YXNoLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBXS0dyb3VwU2Vz
c2lvbk9ic2VydmVyOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5
OworCitjbGFzcyBHcm91cFNlc3Npb25Ob3RpZmllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxH
cm91cFNlc3Npb25Ob3RpZmllcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHN0YXRpYyBHcm91cFNlc3Npb25Ob3RpZmllciYgc2hhcmVkTm90aWZpZXIoKTsK
KworICAgIGJvb2wgaGFzU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmKTsKKyAgICBSZWZQdHI8R3Jv
dXBTZXNzaW9uPiB0YWtlU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmKTsKKyAgICB2b2lkIHJlbW92
ZVNlc3Npb24oY29uc3QgR3JvdXBTZXNzaW9uJik7CisKKyAgICB2b2lkIGFkZFdlYlBhZ2UoV2Vi
UGFnZVByb3h5Jik7CisgICAgdm9pZCByZW1vdmVXZWJQYWdlKFdlYlBhZ2VQcm94eSYpOworICAg
IHZvaWQgd2ViUGFnZVVSTENoYW5nZWQoV2ViUGFnZVByb3h5Jik7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEdyb3VwU2Vzc2lvbk5vdGlmaWVyPjsKKyAgICBH
cm91cFNlc3Npb25Ob3RpZmllcigpOworCisgICAgdm9pZCBzZXNzaW9uU3RhdGVDaGFuZ2VkKGNv
bnN0IEdyb3VwU2Vzc2lvbiYsIEdyb3VwU2Vzc2lvbjo6U3RhdGUpOworCisgICAgSGFzaE1hcDxV
UkwsIFJlZjxHcm91cFNlc3Npb24+PiBtX3Nlc3Npb25zOworICAgIFJldGFpblB0cjxXS0dyb3Vw
U2Vzc2lvbk9ic2VydmVyPiBtX3Nlc3Npb25PYnNlcnZlcjsKKyAgICBXZWFrSGFzaFNldDxXZWJQ
YWdlUHJveHk+IG1fd2ViUGFnZXM7CisgICAgR3JvdXBTZXNzaW9uOjpTdGF0ZUNoYW5nZU9ic2Vy
dmVyIG1fc3RhdGVDaGFuZ2VPYnNlcnZlcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBTZXNz
aW9uTm90aWZpZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2
aXRpZXMvR3JvdXBTZXNzaW9uTm90aWZpZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdkMDEyMDBlODlkNTk0
YmY1ZmNkMmNhYmNmMDUxZTc0MDA3N2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb25Ob3RpZmllci5t
bQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiR3JvdXBTZXNzaW9uTm90aWZpZXIuaCIKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9O
X0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisKKyNpbXBvcnQgIldLR3Jv
dXBTZXNzaW9uLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPHd0Zi9Tb2Z0
TGlua2luZy5oPgorCitzdGF0aWMgdm9pZCogV2ViS2l0U3dpZnRMaWJyYXJ5KCkKK3sKKyAgICBz
dGF0aWMgdm9pZCogZHlsaWIgPSBbXSB7CisgICAgICAgIC8vIFN0YXJ0IGJ5IHNlYXJjaGluZyBm
b3IgdGhlIGxpYnJhcnkgaW4gRFlMRF9MSUJSQVJZX1BBVEg6CisgICAgICAgIGlmICh2b2lkICpy
ZXN1bHQgPSBkbG9wZW4oImxpYldlYktpdFN3aWZ0LmR5bGliIiwgUlRMRF9OT1cpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBUaGVuIHNlYXJjaCBpbiB0aGUgRnJh
bWV3b3Jrcy8gZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZlcnNpb24gb2YgV2Vi
S2l0LmZyYW1ld29yazoKKyAgICAgICAgRGxfaW5mbyBpbmZvIHsgfTsKKyAgICAgICAgaWYgKGRs
YWRkcigoY29uc3Qgdm9pZCopJldlYktpdFN3aWZ0TGlicmFyeSwgJmluZm8pICYmIHN0cmxlbihp
bmZvLmRsaV9mbmFtZSkpIHsKKyAgICAgICAgICAgIGF1dG8gd2Via2l0RnJhbWV3b3JrRGlyZWN0
b3J5ID0gV1RGOjpGaWxlU3lzdGVtSW1wbDo6cGFyZW50UGF0aChpbmZvLmRsaV9mbmFtZSk7Cisg
ICAgICAgICAgICBhdXRvIGR5bGliUGF0aCA9IFdURjo6RmlsZVN5c3RlbUltcGw6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCh3ZWJraXRGcmFtZXdvcmtEaXJlY3RvcnksICJGcmFtZXdvcmtzL2xp
YldlYktpdFN3aWZ0LmR5bGliIik7CisgICAgICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gZGxv
cGVuKGR5bGliUGF0aC51dGY4KCkuZGF0YSgpLCBSVExEX05PVykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmFsbHksIHNlYXJjaCBh
dCB0aGUgaW5zdGFsbGVkIHN5c3RlbSBwYXRoOgorICAgICAgICBpZiAodm9pZCAqcmVzdWx0ID0g
ZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL0ZyYW1l
d29ya3MvbGliV2ViS2l0U3dpZnQuZHlsaWIiLCBSVExEX05PVykpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgICAgIHJldHVybiAodm9pZCAqKW51bGxwdHI7CisgICAgfSgpOwor
ICAgIHJldHVybiBkeWxpYjsKK30KKworU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKFdlYktpdFN3
aWZ0LCBXS0dyb3VwU2Vzc2lvbk9ic2VydmVyKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcm91cFNlc3Np
b25Ob3RpZmllciYgR3JvdXBTZXNzaW9uTm90aWZpZXI6OnNoYXJlZE5vdGlmaWVyKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R3JvdXBTZXNzaW9uTm90aWZpZXI+IG5vdGlmaWVyOwor
ICAgIHJldHVybiBub3RpZmllcjsKK30KKworR3JvdXBTZXNzaW9uTm90aWZpZXI6Okdyb3VwU2Vz
c2lvbk5vdGlmaWVyKCkKKyAgICA6IG1fc2Vzc2lvbk9ic2VydmVyKGFkb3B0TlMoW2FsbG9jV0tH
cm91cFNlc3Npb25PYnNlcnZlckluc3RhbmNlKCkgaW5pdF0pKQorICAgICwgbV9zdGF0ZUNoYW5n
ZU9ic2VydmVyKFt0aGlzXSAoYXV0byYgc2Vzc2lvbiwgYXV0byBzdGF0ZSkgeyBzZXNzaW9uU3Rh
dGVDaGFuZ2VkKHNlc3Npb24sIHN0YXRlKTsgfSkKK3sKKyAgICBtX3Nlc3Npb25PYnNlcnZlci5n
ZXQoKS5uZXdTZXNzaW9uQ2FsbGJhY2sgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0
aGlzKV0gKFdLR3JvdXBTZXNzaW9uICpncm91cFNlc3Npb24pIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNlc3Npb24gPSBHcm91
cFNlc3Npb246OmNyZWF0ZShncm91cFNlc3Npb24pOworICAgICAgICBzZXNzaW9uLT5hZGRTdGF0
ZUNoYW5nZU9ic2VydmVyKG1fc3RhdGVDaGFuZ2VPYnNlcnZlcik7CisKKyAgICAgICAgZm9yIChh
dXRvJiBwYWdlIDogY29weVRvVmVjdG9yKG1fd2ViUGFnZXMpKSB7CisgICAgICAgICAgICBpZiAo
cGFnZS0+bWFpbkZyYW1lKCkgJiYgcGFnZS0+bWFpbkZyYW1lKCktPnVybCgpID09IHNlc3Npb24t
PmZhbGxiYWNrVVJMKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdG9yID0gR3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmNyZWF0ZShzZXNzaW9uKTsKKyAgICAgICAgICAgICAg
ICBwYWdlLT5jcmVhdGVNZWRpYVNlc3Npb25Db29yZGluYXRvcihXVEZNb3ZlKGNvb3JkaW5hdG9y
KSwgW10gKGJvb2wpIHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25zLmFkZChzZXNz
aW9uLT5mYWxsYmFja1VSTCgpLCBzZXNzaW9uLmNvcHlSZWYoKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICAgICAgW1tOU1dvcmtzcGFj
ZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6c2Vzc2lvbi0+ZmFsbGJhY2tVUkwoKV07CisgICAg
fTsKK30KKwordm9pZCBHcm91cFNlc3Npb25Ob3RpZmllcjo6c2Vzc2lvblN0YXRlQ2hhbmdlZChj
b25zdCBHcm91cFNlc3Npb24mIHNlc3Npb24sIEdyb3VwU2Vzc2lvbjo6U3RhdGUgc3RhdGUpCit7
CisgICAgaWYgKHN0YXRlID09IEdyb3VwU2Vzc2lvbjo6U3RhdGU6OkludmFsaWRhdGVkKQorICAg
ICAgICBtX3Nlc3Npb25zLnJlbW92ZShzZXNzaW9uLmZhbGxiYWNrVVJMKCkpOworfTsKKwordm9p
ZCBHcm91cFNlc3Npb25Ob3RpZmllcjo6YWRkV2ViUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2Up
Cit7CisgICAgQVNTRVJUKCFtX3dlYlBhZ2VzLmNvbnRhaW5zKHdlYlBhZ2UpKTsKKyAgICBtX3dl
YlBhZ2VzLmFkZCh3ZWJQYWdlKTsKKworICAgIGF1dG8gZnJhbWUgPSB3ZWJQYWdlLm1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2Vzc2lv
biA9IHRha2VTZXNzaW9uRm9yVVJMKGZyYW1lLT51cmwoKSk7CisgICAgaWYgKCFzZXNzaW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvb3JkaW5hdG9yID0gR3JvdXBBY3Rpdml0aWVz
Q29vcmRpbmF0b3I6OmNyZWF0ZSgqc2Vzc2lvbik7CisgICAgd2ViUGFnZS5jcmVhdGVNZWRpYVNl
c3Npb25Db29yZGluYXRvcihXVEZNb3ZlKGNvb3JkaW5hdG9yKSwgW10gKGJvb2wpIHsgfSk7Cit9
CisKK3ZvaWQgR3JvdXBTZXNzaW9uTm90aWZpZXI6OnJlbW92ZVdlYlBhZ2UoV2ViUGFnZVByb3h5
JiB3ZWJQYWdlKQoreworICAgIEFTU0VSVChtX3dlYlBhZ2VzLmNvbnRhaW5zKHdlYlBhZ2UpKTsK
KyAgICBtX3dlYlBhZ2VzLnJlbW92ZSh3ZWJQYWdlKTsKK30KKwordm9pZCBHcm91cFNlc3Npb25O
b3RpZmllcjo6d2ViUGFnZVVSTENoYW5nZWQoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAg
IEFTU0VSVChtX3dlYlBhZ2VzLmNvbnRhaW5zKHdlYlBhZ2UpKTsKKyAgICBpZiAoIW1fd2ViUGFn
ZXMuY29udGFpbnMod2ViUGFnZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZnJhbWUg
PSB3ZWJQYWdlLm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gc2Vzc2lvbiA9IHRha2VTZXNzaW9uRm9yVVJMKGZyYW1lLT51cmwoKSk7Cisg
ICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvb3JkaW5hdG9y
ID0gR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmNyZWF0ZSgqc2Vzc2lvbik7CisgICAgd2Vi
UGFnZS5jcmVhdGVNZWRpYVNlc3Npb25Db29yZGluYXRvcihXVEZNb3ZlKGNvb3JkaW5hdG9yKSwg
W10gKGJvb2wpIHsgfSk7Cit9CisKK2Jvb2wgR3JvdXBTZXNzaW9uTm90aWZpZXI6Omhhc1Nlc3Np
b25Gb3JVUkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1fc2Vzc2lvbnMuY29udGFp
bnModXJsKTsKK30KKworUmVmUHRyPEdyb3VwU2Vzc2lvbj4gR3JvdXBTZXNzaW9uTm90aWZpZXI6
OnRha2VTZXNzaW9uRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBtX3Nlc3Np
b25zLnRha2UodXJsKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDVkZWJlYzU1OWRjMDcwNzVlOTczMzZiNTY2NDU0ZjNiYjkwYmE5Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0
aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLR3JvdXBTZXNzaW9uU3RhdGUpIHsKKyAgICBXS0dyb3Vw
U2Vzc2lvblN0YXRlV2FpdGluZyA9IDAsCisgICAgV0tHcm91cFNlc3Npb25TdGF0ZUpvaW5lZCA9
IDEsCisgICAgV0tHcm91cFNlc3Npb25TdGF0ZUludmFsaWRhdGVkID0gMiwKK307CisKK0BjbGFz
cyBBVlBsYXliYWNrQ29vcmRpbmF0b3I7CitAY2xhc3MgTlNVUkw7CitAY2xhc3MgTlNVVUlEOwor
QGNsYXNzIFdLR3JvdXBTZXNzaW9uOworQGNsYXNzIFdLVVJMQWN0aXZpdHk7CisKK05TX0FTU1VN
RV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tHcm91cFNlc3Npb25PYnNlcnZlciA6IE5T
T2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXiBfTnVsbGFibGUgbmV3
U2Vzc2lvbkNhbGxiYWNrKShXS0dyb3VwU2Vzc2lvbiAqKTsKKy0gKG5vbm51bGwgaW5zdGFuY2V0
eXBlKWluaXQ7CitAZW5kCisKK0BpbnRlcmZhY2UgV0tHcm91cFNlc3Npb24gOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIFdLVVJMQWN0aXZpdHkgKmFj
dGl2aXR5OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VVSUQgKnV1
aWQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLR3JvdXBTZXNzaW9uU3RhdGUg
c3RhdGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXiBfTnVsbGFibGUgbmV3
QWN0aXZpdHlDYWxsYmFjaykoV0tVUkxBY3Rpdml0eSAqKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSB2b2lkICheIF9OdWxsYWJsZSBzdGF0ZUNoYW5nZWRDYWxsYmFjaykoV0tHcm91cFNl
c3Npb25TdGF0ZSk7CistICh2b2lkKWpvaW47CistICh2b2lkKWxlYXZlOworLSAodm9pZCljb29y
ZGluYXRlV2l0aENvb3JkaW5hdG9yOihBVlBsYXliYWNrQ29vcmRpbmF0b3IgKilwbGF5YmFja0Nv
b3JkaW5hdG9yOworQGVuZAorCitAaW50ZXJmYWNlIFdLVVJMQWN0aXZpdHkgOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TVVJMICogX051bGxhYmxlIGZhbGxiYWNrVVJM
OworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5zd2lmdCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vz
c2lvbi5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTI1MTU2YzFmNzJiMWVkN2UyNWM4NDM4ODk2NWJjNzk2
OWYwMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
R3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLnN3aWZ0CkBAIC0wLDAgKzEsMTUyIEBACisv
LyBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisvLyBhcmUgbWV0OgorLy8gMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKy8vIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorLy8gVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisvLyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKy8vIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2lmIGNhbkltcG9ydChHcm91cEFjdGl2aXRpZXMpCisKK2ltcG9ydCBBVkZvdW5kYXRpb24K
K2ltcG9ydCBDb21iaW5lCitAX3NwaShTYWZhcmkpIGltcG9ydCBHcm91cEFjdGl2aXRpZXMKK2lt
cG9ydCBGb3VuZGF0aW9uCisKK0BvYmpjIHB1YmxpYyBlbnVtIFdLR3JvdXBTZXNzaW9uU3RhdGUg
OiBJbnQgeworICAgIGNhc2Ugd2FpdGluZyA9IDAKKyAgICBjYXNlIGpvaW5lZCA9IDEKKyAgICBj
YXNlIGludmFsaWRhdGVkID0gMgorfQorCitAb2JqYyhXS1VSTEFjdGl2aXR5KQorcHVibGljIGZp
bmFsIGNsYXNzIFdLVVJMQWN0aXZpdHlXcmFwcGVyIDogTlNPYmplY3QgeworICAgIHByaXZhdGUg
dmFyIHVybEFjdGl2aXR5OiBVUkxBY3Rpdml0eQorICAgIGluaXQoYWN0aXZpdHk6IFVSTEFjdGl2
aXR5KSB7CisgICAgICAgIHNlbGYudXJsQWN0aXZpdHkgPSBhY3Rpdml0eQorICAgICAgICBzdXBl
ci5pbml0KCkKKyAgICB9CisKKyAgICBAb2JqYyBwdWJsaWMgdmFyIGZhbGxiYWNrVVJMOiBVUkw/
IHsKKyAgICAgICAgcmV0dXJuIHNlbGYudXJsQWN0aXZpdHkud2VicGFnZVVSTAorICAgIH0KK30K
KworQG9iamMoV0tHcm91cFNlc3Npb24pCitwdWJsaWMgZmluYWwgY2xhc3MgV0tHcm91cFNlc3Np
b25XcmFwcGVyIDogTlNPYmplY3QgeworICAgIHByaXZhdGUgdmFyIGdyb3VwU2Vzc2lvbjogR3Jv
dXBTZXNzaW9uPFVSTEFjdGl2aXR5PgorICAgIHByaXZhdGUgdmFyIGFjdGl2aXR5V3JhcHBlciA6
IFdLVVJMQWN0aXZpdHlXcmFwcGVyCisgICAgcHJpdmF0ZSB2YXIgY2FuY2VsbGFibGVzOiBTZXQ8
QW55Q2FuY2VsbGFibGU+ID0gW10KKworICAgIGluaXQoZ3JvdXBTZXNzaW9uOiBHcm91cFNlc3Np
b248VVJMQWN0aXZpdHk+KSB7CisgICAgICAgIHNlbGYuZ3JvdXBTZXNzaW9uID0gZ3JvdXBTZXNz
aW9uCisgICAgICAgIHNlbGYuYWN0aXZpdHlXcmFwcGVyID0gV0tVUkxBY3Rpdml0eVdyYXBwZXIo
YWN0aXZpdHk6IGdyb3VwU2Vzc2lvbi5hY3Rpdml0eSkKKworICAgICAgICBzdXBlci5pbml0KCkK
KworICAgICAgICBzZWxmLmdyb3VwU2Vzc2lvbi4kYWN0aXZpdHkKKyAgICAgICAgICAgIC5zaW5r
IHsgW3Vub3duZWQgc2VsZl0gaW4gc2VsZi5hY3Rpdml0eUNoYW5nZWQoYWN0aXZpdHk6ICQwKSB9
CisgICAgICAgICAgICAuc3RvcmUoaW46ICZjYW5jZWxsYWJsZXMpCisgICAgICAgIHNlbGYuZ3Jv
dXBTZXNzaW9uLiRzdGF0ZQorICAgICAgICAgICAgLnNpbmsgeyBbdW5vd25lZCBzZWxmXSBpbiBz
ZWxmLnN0YXRlQ2hhbmdlZChzdGF0ZTogJDApIH0KKyAgICAgICAgICAgIC5zdG9yZShpbjogJmNh
bmNlbGxhYmxlcykKKyAgICB9CisKKyAgICBAb2JqYyBwdWJsaWMgdmFyIGFjdGl2aXR5OiBXS1VS
TEFjdGl2aXR5V3JhcHBlciB7IHNlbGYuYWN0aXZpdHlXcmFwcGVyIH0KKyAgICBAb2JqYyBwdWJs
aWMgdmFyIHV1aWQ6IFVVSUQgeyBncm91cFNlc3Npb24uaWQgfQorCisgICAgcHJpdmF0ZSBzdGF0
aWMgZnVuYyB3cmFwcGVyU2Vzc2lvblN0YXRlKHN0YXRlOiBHcm91cFNlc3Npb248VVJMQWN0aXZp
dHk+LlN0YXRlKSAtPiBXS0dyb3VwU2Vzc2lvblN0YXRlIHsKKyAgICAgICAgc3dpdGNoIHN0YXRl
IHsKKyAgICAgICAgY2FzZSAud2FpdGluZzoKKyAgICAgICAgICAgIHJldHVybiBXS0dyb3VwU2Vz
c2lvblN0YXRlLndhaXRpbmcKKyAgICAgICAgY2FzZSAuam9pbmVkOgorICAgICAgICAgICAgcmV0
dXJuIFdLR3JvdXBTZXNzaW9uU3RhdGUuam9pbmVkCisgICAgICAgIGNhc2UgLmludmFsaWRhdGVk
OgorICAgICAgICAgICAgcmV0dXJuIFdLR3JvdXBTZXNzaW9uU3RhdGUuaW52YWxpZGF0ZWQKKyAg
ICAgICAgQHVua25vd24gZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFVuYW50aWNpcGF0ZWQgc3Rh
dGUgdmFsdWUuCisgICAgICAgICAgICBhc3NlcnRpb25GYWlsdXJlKCkKKyAgICAgICAgICAgIHJl
dHVybiBXS0dyb3VwU2Vzc2lvblN0YXRlLmludmFsaWRhdGVkCisgICAgICAgIH0KKyAgICB9CisK
KyAgICBAb2JqYyBwdWJsaWMgdmFyIHN0YXRlOiBXS0dyb3VwU2Vzc2lvblN0YXRlIHsKKyAgICAg
ICAgcmV0dXJuIFdLR3JvdXBTZXNzaW9uV3JhcHBlci53cmFwcGVyU2Vzc2lvblN0YXRlKHN0YXRl
OiBncm91cFNlc3Npb24uc3RhdGUpCisgICAgfQorCisgICAgQG9iamMgcHVibGljIHZhciBuZXdB
Y3Rpdml0eUNhbGxiYWNrOiAoKFdLVVJMQWN0aXZpdHlXcmFwcGVyKSAtPiBWb2lkKT8KKyAgICBA
b2JqYyBwdWJsaWMgdmFyIHN0YXRlQ2hhbmdlZENhbGxiYWNrOiAoKFdLR3JvdXBTZXNzaW9uU3Rh
dGUpIC0+IFZvaWQpPworCisgICAgQG9iamMgcHVibGljIGZ1bmMgam9pbigpIHsKKyAgICAgICAg
Z3JvdXBTZXNzaW9uLmpvaW4oKQorICAgIH0KKworICAgIEBvYmpjIHB1YmxpYyBmdW5jIGxlYXZl
KCkgeworICAgICAgICBncm91cFNlc3Npb24ubGVhdmUoKQorICAgIH0KKworICAgIEBvYmpjKGNv
b3JkaW5hdGVXaXRoQ29vcmRpbmF0b3I6KQorICAgIHB1YmxpYyBmdW5jIGNvb3JkaW5hdGUoY29v
cmRpbmF0b3I6IEFWUGxheWJhY2tDb29yZGluYXRvcikgeworICAgICAgICBjb29yZGluYXRvci5j
b29yZGluYXRlV2l0aFNlc3Npb24oc2VsZi5ncm91cFNlc3Npb24pCisgICAgfQorCisgICAgcHJp
dmF0ZSBmdW5jIGFjdGl2aXR5Q2hhbmdlZChhY3Rpdml0eTogVVJMQWN0aXZpdHkpIHsKKyAgICAg
ICAgc2VsZi5hY3Rpdml0eVdyYXBwZXIgPSBXS1VSTEFjdGl2aXR5V3JhcHBlcihhY3Rpdml0eTog
Z3JvdXBTZXNzaW9uLmFjdGl2aXR5KQorCisgICAgICAgIGd1YXJkIGxldCBjYWxsYmFjayA9IG5l
d0FjdGl2aXR5Q2FsbGJhY2sgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgfQor
CisgICAgICAgIGNhbGxiYWNrKGFjdGl2aXR5V3JhcHBlcikKKyAgICB9CisKKyAgICBwcml2YXRl
IGZ1bmMgc3RhdGVDaGFuZ2VkKHN0YXRlOiBHcm91cFNlc3Npb248VVJMQWN0aXZpdHk+LlN0YXRl
KSB7CisgICAgICAgIGd1YXJkIGxldCBjYWxsYmFjayA9IHN0YXRlQ2hhbmdlZENhbGxiYWNrIGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayhX
S0dyb3VwU2Vzc2lvbldyYXBwZXIud3JhcHBlclNlc3Npb25TdGF0ZShzdGF0ZTogc3RhdGUpKQor
ICAgIH0KK30KKworQG9iamMoV0tHcm91cFNlc3Npb25PYnNlcnZlcikKK3B1YmxpYyBjbGFzcyBX
S0dyb3VwU2Vzc2lvbk9ic2VydmVyIDogTlNPYmplY3QgeworICAgIEBvYmpjIHB1YmxpYyB2YXIg
bmV3U2Vzc2lvbkNhbGxiYWNrOiAoKFdLR3JvdXBTZXNzaW9uV3JhcHBlcikgLT4gVm9pZCk/CisK
KyAgICBwcml2YXRlIHZhciBvYnNlcnZlciA9IEdyb3VwU2Vzc2lvbk9ic2VydmVyKGZvcjogVVJM
QWN0aXZpdHkuc2VsZikKKyAgICBwcml2YXRlIHZhciBjYW5jZWxsYWJsZXM6IFNldDxBbnlDYW5j
ZWxsYWJsZT4gPSBbXQorCisgICAgQG9iamMgcHVibGljIG92ZXJyaWRlIGluaXQoKSB7CisgICAg
ICAgIHN1cGVyLmluaXQoKQorCisgICAgICAgIG9ic2VydmVyCisgICAgICAgICAgICAuc2luayB7
IFt1bm93bmVkIHNlbGZdIGluIHNlbGYucmVjaWV2ZWRTZXNzaW9uKCQwKSB9CisgICAgICAgICAg
ICAuc3RvcmUoaW46ICZjYW5jZWxsYWJsZXMpCisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jIHJl
Y2lldmVkU2Vzc2lvbihfIHNlc3Npb246IEdyb3VwU2Vzc2lvbjxVUkxBY3Rpdml0eT4pIHsKKyAg
ICAgICAgZ3VhcmQgbGV0IGNhbGxiYWNrID0gbmV3U2Vzc2lvbkNhbGxiYWNrIGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIH0KKworICAgICAgICBsZXQgc2Vzc2lvbldyYXBwZXIg
PSBXS0dyb3VwU2Vzc2lvbldyYXBwZXIoZ3JvdXBTZXNzaW9uOiBzZXNzaW9uKQorICAgICAgICBj
YWxsYmFjayhzZXNzaW9uV3JhcHBlcikKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWQ5NjgwNjE0MjNiNzk1NWMzYzM3YWRk
ZTUyN2RjN2NlYzMyOGU4OS4uNDk5YTlkOTliOWM5NTNhMjA0ODU5YzlhY2ViMjhjMDk2MDM0MjBl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yOTksMTIg
KzI5OSw4IEBACiAjaW5jbHVkZSAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUu
aCIKICNpbmNsdWRlICJSZW1vdGVNZWRpYVNlc3Npb25Db29yZGluYXRvclByb3h5LmgiCiAKLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLQ29v
cmRpbmF0b3JBZGRpdGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIFdFQlBBR0VQUk9YWV9DT05TVFJV
Q1RPUl9XS0NPT1JESU5BVE9SX0FERElUSU9OUwotI2RlZmluZSBXRUJQQUdFUFJPWFlfREVTVFJV
Q1RPUl9XS0NPT1JESU5BVE9SX0FERElUSU9OUwotI2RlZmluZSBXRUJQQUdFUFJPWFlfRElEQ09N
TUlUTE9BREZPUkZSQU1FX1dLQ09PUkRJTkFUT1JfQURESVRJT05TCisjaWYgSEFWRShHUk9VUF9B
Q1RJVklUSUVTKQorI2luY2x1ZGUgIkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgiCiAjZW5k
aWYKICNlbmRpZgogCkBAIC01NjUsOCArNTYxLDggQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBSZWYK
ICAgICAgICAgcHJvY2Vzcy5zZXRJZ25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcoKTsKICNl
bmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpCi0gICAgV0VCUEFH
RVBST1hZX0NPTlNUUlVDVE9SX1dLQ09PUkRJTkFUT1JfQURESVRJT05TCisjaWYgRU5BQkxFKE1F
RElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKyAgICBH
cm91cFNlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZpZXIoKS5hZGRXZWJQYWdlKCp0aGlzKTsK
ICNlbmRpZgogfQogCkBAIC02MDQsOCArNjAwLDggQEAgV2ViUGFnZVByb3h5Ojp+V2ViUGFnZVBy
b3h5KCkKICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5n
ZUNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2soKTsKIAotI2lmIEVOQUJMRShNRURJQV9TRVNT
SU9OX0NPT1JESU5BVE9SKQotICAgIFdFQlBBR0VQUk9YWV9ERVNUUlVDVE9SX1dLQ09PUkRJTkFU
T1JfQURESVRJT05TCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhB
VkUoR1JPVVBfQUNUSVZJVElFUykKKyAgICBHcm91cFNlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90
aWZpZXIoKS5yZW1vdmVXZWJQYWdlKCp0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODkxLDggKzQ4
ODcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRl
bnRpZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICByZW1vdGVJbnNwZWN0b3JJ
bmZvcm1hdGlvbkRpZENoYW5nZSgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfU0VTU0lP
Tl9DT09SRElOQVRPUikKLSAgICBXRUJQQUdFUFJPWFlfRElEQ09NTUlUTE9BREZPUkZSQU1FX1dL
Q09PUkRJTkFUT1JfQURESVRJT05TCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFU
T1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCisgICAgICAgIEdyb3VwU2Vzc2lvbk5vdGlmaWVyOjpzaGFyZWROb3RpZmllcigpLndlYlBh
Z2VVUkxDaGFuZ2VkKCp0aGlzKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNDgyMTkyMWU0NzRkMjc0YWQ3ZTA5
MDBkNzRkNmIxNzYzYjg2ZjAzLi40NTI1NWUxZDc5YjIxOTQ4OTUyNGE5ZDQ0YjE5YWYxMzA2MDFi
NmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNsYXNzZXMgPSB7CiAJ
fTsKLQlvYmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0OwogCW9iamVjdHMg
PSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCkBAIC0xOTAyLDcg
KzE5MDIsNiBAQAogCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRl
bGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDc4RTExODFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4MjUyREUyNUQ0
OTE2QzAwODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEODI1MkRBMjVENDkxNTQwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUNEODI1MkUyMjVENDkxOTEwMDg2MkZE
OCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjUyRTAyNUQ0OTE4
NDAwODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lck1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07Ci0JCUNEOTU0OTQzMjYxNTkxN0IwMDgzNzJEOSAvKiBXS0dyb3VwU2Vzc2lvbi5z
d2lmdCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjE3
Q0MzMjYwRThGQUIwMEYwQTRFOCAvKiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCAqLzsgfTsKIAkJQ0RB
MDQxRjQxQUNFMjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEwNDFGMzFBQ0UyMTA1MDA0
QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCAqLzsgfTsKIAkJQ0RBMjlBMUIxQ0JEQkY0
MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTE5MUNCREJGNDEwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggKi87IH07CiAJCUNEQTI5QTIwMUNCRUI1RkIwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLzsgfTsKQEAgLTE5MzYsNiArMTkzNSwxMCBAQAog
CQlDREU1NTUzMzI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RFNTU1MkEyNDA2Qjg5NjAwOEEzRERCIC8qIFJlbW90ZUxlZ2FjeUNETVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJQ0RFNTU1MzQyNDA2RUI4QzAwOEEzRERCIC8qIFJlbW90
ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTU1MkUyNDA2Qjg5NzAwOEEzRERCIC8qIFJl
bW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlDREU1NTUz
NTI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNU2Vzc2lvblByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERTU1NTMxMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREYxQjkxNTI2NkYzOTZBMDAwN0VDMTAgLyog
V0tHcm91cFNlc3Npb24uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREYxQjkwRDI2NkYzOTVFMDAwN0VDMTAgLyogV0tHcm91cFNlc3Npb24uc3dp
ZnQgKi87IH07CisJCUNERjFCOTE2MjY2RjM5NzEwMDA3RUMxMCAvKiBHcm91cFNlc3Npb24ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREYxQjkxMTI2
NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uLm1tICovOyB9OworCQlDREYxQjkxNzI2NkYz
OTcxMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uTm90aWZpZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREYxQjkxMzI2NkYzOTVFMDAwN0VDMTAgLyog
R3JvdXBTZXNzaW9uTm90aWZpZXIubW0gKi87IH07CisJCUNERjFCOTE4MjY2RjM5NzEwMDA3RUMx
MCAvKiBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjFCOTBGMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbSAqLzsgfTsKIAkJQ0UxMUFENTIxQ0JDNDgyRjAwNjgx
RUU1IC8qIENvZGVTaWduaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRTExQUQ1MTFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCAqLzsg
fTsKIAkJQ0UxQTBCRDYxQTQ4RTZDNjAwNTRFRjc0IC8qIFRDQ1NQSS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxQTBCRDAxQTQ4RTZDNjAwNTRFRjc0
IC8qIFRDQ1NQSS5oICovOyB9OwogCQlDRTFBMEJENzFBNDhFNkM2MDA1NEVGNzQgLyogVGV4dElu
cHV0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTFBMEJEMTFBNDhFNkM2MDA1NEVGNzQgLyogVGV4dElucHV0U1BJLmggKi87IH07CkBAIC01ODA4
LDYgKzU4MTEsMTQgQEAKIAkJQ0RFNTU1MzAyNDA2Qjg5NzAwOEEzRERCIC8qIFJlbW90ZUxlZ2Fj
eUNETVNlc3Npb25NZXNzYWdlc1JlcGxpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGVnYWN5
Q0RNU2Vzc2lvbk1lc3NhZ2VzUmVwbGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREU1NTUzMTI0MDZCODk3MDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNU2Vzc2lvblByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUxlZ2FjeUNETVNl
c3Npb25Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNERjE3Q0MzMjYwRThGQUIwMEYwQTRFOCAvKiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuc3dpZnQ7IHBhdGggPSBXS0dyb3VwU2Vzc2lvbi5zd2lmdDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MEQyNjZGMzk1RTAwMDdFQzEwIC8qIFdL
R3JvdXBTZXNzaW9uLnN3aWZ0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5zd2lmdDsgcGF0aCA9IFdLR3JvdXBTZXNzaW9uLnN3aWZ0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkwRTI2NkYzOTVFMDAwN0VDMTAg
LyogR3JvdXBTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyb3VwU2Vzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkwRjI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5
MTAyNjZGMzk1RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
R3JvdXBTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTExMjY2
RjM5NUUwMDA3RUMxMCAvKiBHcm91cFNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBH
cm91cFNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTEyMjY2
RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREYxQjkxMzI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uTm90aWZpZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcm91cFNlc3Npb25Ob3RpZmllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MTQyNjZGMzk1RjAwMDdFQzEwIC8qIEdyb3Vw
U2Vzc2lvbk5vdGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyb3VwU2Vzc2lvbk5vdGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMTFBRDRGMUNCQzQ3RjgwMDY4MUVFNSAv
KiBDb2RlU2lnbmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENvZGVTaWduaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTExQUQ1MTFD
QkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZVNpZ25pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Ux
QTBCRDAxQTQ4RTZDNjAwNTRFRjc0IC8qIFRDQ1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUQ0NTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5OTks
NiArNzAxMCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUNE
RjE3QzkzMjYwRDNCNTIwMEYwQTRFOCAvKiBDb29yZGluYXRvciAqLywKKwkJCQlDREYxQjkwQzI2
NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzICovLAogCQkJCTU3RkQzMTZCMjJCMzM2
N0UwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb24gKi8sCiAJCQkJOTlDODFENTUxQzIwREZCRTAw
NUM0QzgyIC8qIEF1dG9tYXRpb25DbGllbnQuaCAqLywKIAkJCQk5OUM4MUQ1NjFDMjBERkJFMDA1
QzRDODIgLyogQXV0b21hdGlvbkNsaWVudC5tbSAqLywKQEAgLTExNDY0LDYgKzExNDc2LDIxIEBA
CiAJCQlwYXRoID0gdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zOwogCQkJc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsKIAkJfTsKKwkJQ0RGMUI5MEMyNjZGMzk1RTAwMDdF
QzEwIC8qIEdyb3VwQWN0aXZpdGllcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQ0RGMUI5MTIyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGll
c0Nvb3JkaW5hdG9yLmggKi8sCisJCQkJQ0RGMUI5MEYyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3Vw
QWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tICovLAorCQkJCUNERjFCOTBFMjY2RjM5NUUwMDA3RUMx
MCAvKiBHcm91cFNlc3Npb24uaCAqLywKKwkJCQlDREYxQjkxMTI2NkYzOTVFMDAwN0VDMTAgLyog
R3JvdXBTZXNzaW9uLm1tICovLAorCQkJCUNERjFCOTE0MjY2RjM5NUYwMDA3RUMxMCAvKiBHcm91
cFNlc3Npb25Ob3RpZmllci5oICovLAorCQkJCUNERjFCOTEzMjY2RjM5NUUwMDA3RUMxMCAvKiBH
cm91cFNlc3Npb25Ob3RpZmllci5tbSAqLywKKwkJCQlDREYxQjkxMDI2NkYzOTVFMDAwN0VDMTAg
LyogV0tHcm91cFNlc3Npb24uaCAqLywKKwkJCQlDREYxQjkwRDI2NkYzOTVFMDAwN0VDMTAgLyog
V0tHcm91cFNlc3Npb24uc3dpZnQgKi8sCisJCQkpOworCQkJcGF0aCA9IEdyb3VwQWN0aXZpdGll
czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUNFMUEwQkNBMUE0OEU2QzYw
MDU0RUY3NCAvKiBzcGkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTMyNjgsMTEgKzEzMjk1LDkgQEAKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJ
CWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDRDk1NDkzQjI2MTU5MDA0MDA4MzcyRDkgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIldlYktpdFN3aWZ0IiAq
LzsKIAkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCUNERjE3Q0JFMjYwREFEMUIwMEYwQTRFOCAvKiBD
b3B5IEFkZGl0aW9uYWwgU291cmNlcyAqLywKIAkJCQlDRDk1NDkzMTI2MTU5MDA0MDA4MzcyRDkg
LyogSGVhZGVycyAqLywKIAkJCQlDRDk1NDkzMjI2MTU5MDA0MDA4MzcyRDkgLyogU291cmNlcyAq
LywKIAkJCQlDRDk1NDkzMzI2MTU5MDA0MDA4MzcyRDkgLyogRnJhbWV3b3JrcyAqLywKLQkJCQlD
RDk1NDk0MjI2MTU5MEVFMDA4MzcyRDkgLyogQ29weSBPYmpDIEludGVyZmFjZSBIZWFkZXIgKi8s
CiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CkBAIC0xMzk1NCw1MCArMTM5NzksNiBA
QAogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKIAkJCXNoZWxsU2NyaXB0ID0gIlNjcmlwdHMvZ2Vu
ZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoXG4iOwogCQl9OwotCQlDRDk1NDk0MjI2MTU5MEVFMDA4
MzcyRDkgLyogQ29weSBPYmpDIEludGVyZmFjZSBIZWFkZXIgKi8gPSB7Ci0JCQlpc2EgPSBQQlhT
aGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRGaWxlTGlzdFBhdGhzID0gKAotCQkJKTsKLQkJ
CWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9TT1VSQ0VTX0RJUikvJChTV0lGVF9PQkpD
X0lOVEVSRkFDRV9IRUFERVJfTkFNRSkiLAotCQkJKTsKLQkJCW5hbWUgPSAiQ29weSBPYmpDIElu
dGVyZmFjZSBIZWFkZXIiOwotCQkJb3V0cHV0RmlsZUxpc3RQYXRocyA9ICgKLQkJCSk7Ci0JCQlv
dXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNs
dWRlLyQoVEFSR0VUX05BTUUpLyQoU1dJRlRfT0JKQ19JTlRFUkZBQ0VfSEVBREVSX05BTUUpIiwK
LQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNo
ZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJpZiBbWyBcIiRXS19IQVZFX0NP
T1JESU5BVE9SXCIgPT0gXCJZRVNcIiBdXVxudGhlblxuICAgIGRpdHRvIFwiJHtERVJJVkVEX1NP
VVJDRVNfRElSfS8ke1NXSUZUX09CSkNfSU5URVJGQUNFX0hFQURFUl9OQU1FfVwiIFwiJHtCVUlM
VF9QUk9EVUNUU19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlLyR7VEFSR0VUX05BTUV9LyR7U1dJRlRf
T0JKQ19JTlRFUkZBQ0VfSEVBREVSX05BTUV9XCJcbmZpXG4iOwotCQl9OwotCQlDREYxN0NCRTI2
MERBRDFCMDBGMEE0RTggLyogQ29weSBBZGRpdGlvbmFsIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2Eg
PSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRGaWxlTGlzdFBhdGhzID0gKAotCQkJ
KTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoU0RLX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUv
V2ViS2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3IuaCIsCi0JCQkJIiQoU0RLX0RJUikvdXNyL2xv
Y2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3IubW0iLAotCQkJCSIkKFNE
S19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9XS0dyb3VwU2Vzc2lvbi5z
d2lmdCIsCi0JCQkpOwotCQkJbmFtZSA9ICJDb3B5IEFkZGl0aW9uYWwgU291cmNlcyI7Ci0JCQlv
dXRwdXRGaWxlTGlzdFBhdGhzID0gKAotCQkJKTsKLQkJCW91dHB1dFBhdGhzID0gKAotCQkJCSIk
KEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dL
Q29vcmRpbmF0b3IuaCIsCi0JCQkJIiQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5j
bHVkZS9XZWJLaXRBZGRpdGlvbnMvV0tDb29yZGluYXRvci5tbSIsCi0JCQkJIiQoQlVJTFRfUFJP
RFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRpdGlvbnMvV0tHcm91cFNlc3Np
b24uc3dpZnQiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9iYXNoOwotCQkJc2hlbGxTY3JpcHQgPSAic2V0IC1l
XG5cblJFTEFUSVZFX1NPVVJDRV9QQVRIPVwidXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRp
b25zXCJcblNPVVJDRV9QQVRIPVwiJFNES19ESVIvJFJFTEFUSVZFX1NPVVJDRV9QQVRIXCJcbkRF
U1RJTkFUSU9OX1BBVEg9XCIkQlVJTFRfUFJPRFVDVFNfRElSLyRSRUxBVElWRV9TT1VSQ0VfUEFU
SFwiXG5cbmZvciBTT1VSQ0UgaW4gV0tDb29yZGluYXRvci5oIFdLQ29vcmRpbmF0b3IubW0gV0tH
cm91cFNlc3Npb24uc3dpZnQ7IGRvXG4gICAgaWYgW1sgXCIkU09VUkNFX1BBVEgvJFNPVVJDRVwi
IC1udCBcIiRERVNUSU5BVElPTl9QQVRILyRTT1VSQ0VcIiBdXTsgdGhlblxuICAgICAgICBkaXR0
byBcIiRTT1VSQ0VfUEFUSC8kU09VUkNFXCIgXCIkREVTVElOQVRJT05fUEFUSC8kU09VUkNFXCJc
biAgICBmaVxuZG9uZVxuIjsKLQkJfTsKIAkJRTFBQzJFMkMyMEY3Qjk1ODAwQjA4OTdEIC8qIFVu
bG9jayBLZXljaGFpbiAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xNDEzMSw2ICsxNDExMiw5IEBA
CiAJCQkJQ0RDREM5OUUyNDhGRThEQTAwQTY5NTIyIC8qIEVuZG93bWVudFN0YXRlVHJhY2tlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTU3NjAyMTQ5NkI5NzkwMEE0RUUwNiAvKiBFdmVudERp
c3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBOTNEQjEy
MkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RGMUI5MTgyNjZGMzk3MTAwMDdFQzEwIC8qIEdyb3Vw
QWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RGMUI5MTYyNjZG
Mzk3MTAwMDdFQzEwIC8qIEdyb3VwU2Vzc2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNERjFC
OTE3MjY2RjM5NzEwMDA3RUMxMCAvKiBHcm91cFNlc3Npb25Ob3RpZmllci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5kbGVYUENFbmRwb2ludE1l
c3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8q
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0
NTIxNDY1NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE0NTcxLDcgKzE0NTU1LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAot
CQkJCUNEOTU0OTQzMjYxNTkxN0IwMDgzNzJEOSAvKiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCBpbiBT
b3VyY2VzICovLAorCQkJCUNERjFCOTE1MjY2RjM5NkEwMDA3RUMxMCAvKiBXS0dyb3VwU2Vzc2lv
bi5zd2lmdCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>
<flag name="commit-queue"
          id="452409"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430813</attachid>
            <date>2021-06-07 23:20:45 -0700</date>
            <delta_ts>2021-06-08 16:14:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226757-20210607232044.patch</filename>
            <type>text/plain</type>
            <size>59023</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRjMmE3NzY0OGU4NGJhODlj
NmVkODFlOGMwOWUwZjFlZTUwMDBjOWMuLjkwNmI0NWE5Mjg1MWVmZGM5Y2I1N2VkNDlmMjk0ODEw
ZGJhMDkxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMDYtMDcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVcHN0cmVhbSBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2NzU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgYSBHcm91cEFj
dGl2aXRpZXMtYmFzZWQgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IuCisKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBpbml0
V2l0aFBhcmVudDpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRl
bGVnYXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQbGF5Q29tbWFuZDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQYXVzZUNvbW1hbmQ6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0
ZSBwbGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlU2Vla0NvbW1hbmQ6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBw
bGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlQnVmZmVyaW5nQ29tbWFuZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVnYXRl
IHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQ6XSk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6R3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGlu
YXRvcjo6fkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6R3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpqb2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmxlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlZWtUbyk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNldFRyYWNrKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBvc2l0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBsYXliYWNr
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0
b3I6OnRyYWNrSWRlbnRpZmllckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvcjo6aXNzdWVQbGF5Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBhdXNlQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVNlZWtDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5n
Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpp
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlUmVtb3RlSU9TLmguCisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbjo6Z3JvdXBT
ZXNzaW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3Vw
U2Vzc2lvbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNzaW9uOjpHcm91cFNlc3Npb24pOgorICAgICAg
ICAoV2ViS2l0OjpHcm91cFNlc3Npb246On5Hcm91cFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpHcm91cFNlc3Npb246OmpvaW4pOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb246Omxl
YXZlKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNzaW9uOjpzdGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Okdyb3VwU2Vzc2lvbjo6dXVpZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Okdyb3VwU2Vzc2lvbjo6ZmFsbGJhY2tVUkwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpHcm91
cFNlc3Npb246OmFkZFN0YXRlQ2hhbmdlT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91
cFNlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBTZXNzaW9uTm90aWZpZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlUmVtb3RlSU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb25Ob3RpZmllci5tbTogQWRkZWQuCisgICAgICAg
IChXZWJLaXRTd2lmdExpYnJhcnkpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3Rp
Zmllcjo6c2hhcmVkTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Npb25Ob3Rp
Zmllcjo6R3JvdXBTZXNzaW9uTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Np
b25Ob3RpZmllcjo6c2Vzc2lvblN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3Vw
U2Vzc2lvbk5vdGlmaWVyOjphZGRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBTZXNz
aW9uTm90aWZpZXI6OnJlbW92ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNlc3Np
b25Ob3RpZmllcjo6d2ViUGFnZVVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cFNl
c3Npb25Ob3RpZmllcjo6aGFzU2Vzc2lvbkZvclVSTCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3Vw
U2Vzc2lvbk5vdGlmaWVyOjp0YWtlU2Vzc2lvbkZvclVSTCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLnN3aWZ0OiBB
ZGRlZC4KKyAgICAgICAgKFdLVVJMQWN0aXZpdHlXcmFwcGVyLnVybEFjdGl2aXR5KToKKyAgICAg
ICAgKFdLVVJMQWN0aXZpdHlXcmFwcGVyLmZhbGxiYWNrVVJMKToKKyAgICAgICAgKFdLR3JvdXBT
ZXNzaW9uV3JhcHBlci5ncm91cFNlc3Npb24pOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFw
cGVyLmNhbmNlbGxhYmxlcyk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIuYWN0aXZp
dHkpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLnV1aWQpOgorICAgICAgICAoV0tH
cm91cFNlc3Npb25XcmFwcGVyLndyYXBwZXJTZXNzaW9uU3RhdGUoXzopKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uV3JhcHBlci5zdGF0ZSk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBw
ZXIubmV3QWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIu
c3RhdGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmpv
aW4pOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmxlYXZlKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uV3JhcHBlci5jb29yZGluYXRlKF86KSk6CisgICAgICAgIChXS0dyb3VwU2Vz
c2lvbldyYXBwZXIuYWN0aXZpdHlDaGFuZ2VkKF86KSk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lv
bldyYXBwZXIuc3RhdGVDaGFuZ2VkKF86KSk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbk9ic2Vy
dmVyLm5ld1Nlc3Npb25DYWxsYmFjayk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbk9ic2VydmVy
LmNhbmNlbGxhYmxlcyk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbk9ic2VydmVyLnJlY2lldmVk
U2Vzc2lvbihfOikpOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVSZW1vdGVJT1MuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV9saW1pdHNOYXZpZ2F0
aW9uc1RvQXBwQm91bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp+
V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRM
b2FkRm9yRnJhbWUpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCiAyMDIxLTA1LTIxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjI3Njk5Myk6IDUgVGVzdFdlYktpdEFQSS5BdWRpb1JvdXRpbmdBcmJp
dHJhdGlvbiAoYXBpLXRlc3RzKSBhcmUgY29uc3RhbnQgZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAppbmRleCBiMTQ4MDEzYzkwNDY1ZjkzMmZjNmFkOTRiMWU3YWY5NDk0MTIzOGM5Li5iZjcw
ZTAzNjkzMGIyNzI1NmRhZTU0NGI2NmU0NjcwYWQwZjI1YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0zNzMsNiArMzczLDEwIEBAIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2lvcy9XZWJBdXRv
bWF0aW9uU2Vzc2lvbklPUy5tbQogCiBVSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21h
dGlvblNlc3Npb25NYWMubW0KIAorVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbQorVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGll
cy9Hcm91cFNlc3Npb24ubW0KK1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBT
ZXNzaW9uTm90aWZpZXIubW0KKwogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KIFVJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dy
b3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4
MTM0ZTc0NzhlMzk5NmExNTIwZDk2ZTliZDdmYzBhNzEwN2QxNTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rp
dml0aWVzQ29vcmRpbmF0b3IuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikgJiYgSEFWRShH
Uk9VUF9BQ1RJVklUSUVTKQorCisjaW5jbHVkZSAiR3JvdXBTZXNzaW9uLmgiCisjaW5jbHVkZSAi
TWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvQ29t
cGxldGlvbkhhbmRsZXIuaD4KKworT0JKQ19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3Jk
aW5hdG9yOworT0JKQ19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGxheUNv
bW1hbmQ7CitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQYXVzZUNv
bW1hbmQ7CitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JTZWVrQ29t
bWFuZDsKK09CSkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvckJ1ZmZlcmlu
Z0NvbW1hbmQ7CitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQcmVw
YXJlVHJhbnNpdGlvbkNvbW1hbmQ7CitPQkpDX0NMQVNTIFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3JEZWxlZ2F0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yIGZpbmFsIDogcHVibGljIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJv
eHlQcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yPiBjcmVhdGUoR3JvdXBTZXNzaW9u
Jik7CisgICAgfkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKCk7CisKKyAgICB1c2luZyBDb21t
YW5kQ29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKCk+OworICAgIHZvaWQgaXNzdWVQ
bGF5Q29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGxheUNvbW1hbmQgKiwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgaXNzdWVQYXVzZUNvbW1hbmQo
QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFuZCAqLCBDb21tYW5kQ29t
cGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBpc3N1ZVNlZWtDb21tYW5kKEFWRGVsZWdhdGlu
Z1BsYXliYWNrQ29vcmRpbmF0b3JTZWVrQ29tbWFuZCAqLCBDb21tYW5kQ29tcGxldGlvbkhhbmRs
ZXImJik7CisgICAgdm9pZCBpc3N1ZUJ1ZmZlcmluZ0NvbW1hbmQoQVZEZWxlZ2F0aW5nUGxheWJh
Y2tDb29yZGluYXRvckJ1ZmZlcmluZ0NvbW1hbmQgKiwgQ29tbWFuZENvbXBsZXRpb25IYW5kbGVy
JiYpOworICAgIHZvaWQgaXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQoQVZEZWxlZ2F0aW5n
UGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCAqKTsKKworcHJpdmF0
ZToKKyAgICBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihHcm91cFNlc3Npb24mKTsKKworICAg
IHZvaWQgc2Vzc2lvblN0YXRlQ2hhbmdlZChjb25zdCBHcm91cFNlc3Npb24mLCBHcm91cFNlc3Np
b246OlN0YXRlKTsKKworICAgIHVzaW5nIENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXIgPSBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT4mJik+OworICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBq
b2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBsZWF2
ZSgpIGZpbmFsOworICAgIHZvaWQgc2Vla1RvKGRvdWJsZSwgQ29vcmRpbmF0b3JDb21wbGV0aW9u
SGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFu
ZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHBhdXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRs
ZXImJikgZmluYWw7CisgICAgdm9pZCBzZXRUcmFjayhjb25zdCBTdHJpbmcmLCBDb29yZGluYXRv
ckNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgcG9zaXRpb25TdGF0ZUNoYW5n
ZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpNZWRpYVBvc2l0aW9uU3RhdGU+JikgZmlu
YWw7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZChXZWJDb3JlOjpNZWRpYVNlc3Npb25SZWFk
eVN0YXRlKSBmaW5hbDsKKyAgICB2b2lkIHBsYXliYWNrU3RhdGVDaGFuZ2VkKFdlYkNvcmU6Ok1l
ZGlhU2Vzc2lvblBsYXliYWNrU3RhdGUpIGZpbmFsOworICAgIHZvaWQgdHJhY2tJZGVudGlmaWVy
Q2hhbmdlZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFJlZjxHcm91cFNlc3Npb24+IG1f
c2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8V0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlPiBtX2RlbGVnYXRlOworICAgIFJldGFpblB0cjxBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3Jk
aW5hdG9yPiBtX3BsYXliYWNrQ29vcmRpbmF0b3I7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6Ok1lZGlhUG9zaXRpb25TdGF0ZT4gbV9wb3NpdGlvblN0YXRlOworICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6TWVkaWFTZXNzaW9uUmVhZHlTdGF0ZT4gbV9yZWFkeVN0YXRlOworICAgIHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFTZXNzaW9uUGxheWJhY2tTdGF0ZT4gbV9wbGF5YmFj
a1N0YXRlOworCisgICAgR3JvdXBTZXNzaW9uOjpTdGF0ZUNoYW5nZU9ic2VydmVyIG1fc3RhdGVD
aGFuZ2VPYnNlcnZlcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3IubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU3MTdkYTdmMDJlMTIw
ZDU2YzQzZGQzMWQ4NDgyZDdkN2RlYjBiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGlu
YXRvci5tbQpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisKKyNp
bXBvcnQgIldLR3JvdXBTZXNzaW9uLmgiCisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKworI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91
bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4K
KworQGludGVyZmFjZSBXS0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yRGVsZWdhdGUgOiBOU09i
amVjdDxBVlBsYXliYWNrQ29vcmRpbmF0b3JQbGF5YmFja0NvbnRyb2xEZWxlZ2F0ZT4geworICAg
IFdlYWtQdHI8V2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcj4gX3BhcmVudDsKK30K
Ky0gKGlkKWluaXRXaXRoUGFyZW50OihXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
JilwYXJlbnQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0dyb3VwQWN0aXZpdGllc0Nvb3Jk
aW5hdG9yRGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoUGFyZW50OihXZWJLaXQ6Okdyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yJilwYXJlbnQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9wYXJlbnQgPSBtYWtlV2Vh
a1B0cihwYXJlbnQpOworICAgIHJldHVybiBzZWxmOworfQorCistKHZvaWQpcGxheWJhY2tDb29y
ZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGRp
ZElzc3VlUGxheUNvbW1hbmQ6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29t
bWFuZCAqKXBsYXlDb21tYW5kIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlciB7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKKyAgICAgICAgaWYgKF9wYXJlbnQpIHsKKyAgICAgICAgICAgIF9wYXJlbnQtPmlz
c3VlUGxheUNvbW1hbmQocGxheUNvbW1hbmQsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworLSh2b2lk
KXBsYXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3IgKilj
b29yZGluYXRvciBkaWRJc3N1ZVBhdXNlQ29tbWFuZDooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29y
ZGluYXRvclBhdXNlQ29tbWFuZCAqKXBhdXNlQ29tbWFuZCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghX3BhcmVudCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgX3BhcmVudC0+aXNzdWVQYXVzZUNvbW1hbmQocGF1c2VDb21t
YW5kLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIp
XSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKworLSh2b2lkKXBsYXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNr
Q29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRJc3N1ZVNlZWtDb21tYW5kOihBVkRlbGVnYXRp
bmdQbGF5YmFja0Nvb3JkaW5hdG9yU2Vla0NvbW1hbmQgKilzZWVrQ29tbWFuZCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgeworICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghX3BhcmVu
dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX3BhcmVudC0+aXNzdWVTZWVrQ29tbWFu
ZChzZWVrQ29tbWFuZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKV0geworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKKy0odm9pZClwbGF5YmFja0Nvb3JkaW5hdG9yOihBVkRlbGVnYXRp
bmdQbGF5YmFja0Nvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZGlkSXNzdWVCdWZmZXJpbmdDb21t
YW5kOihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqKWJ1
ZmZlcmluZ0NvbW1hbmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyIHsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBpZiAoIV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IF9wYXJlbnQtPmlzc3VlQnVmZmVyaW5nQ29tbWFuZChidWZmZXJpbmdDb21tYW5kLCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLSh2
b2lkKXBsYXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3Ig
Kiljb29yZGluYXRvciBkaWRJc3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZDooQVZEZWxlZ2F0
aW5nUGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCAqKXByZXBhcmVU
cmFuc2l0aW9uQ29tbWFuZCB7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9wYXJlbnQpCisgICAgICAgICAgICBfcGFyZW50LT5p
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZChwcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQpOwor
ICAgIH0pOworfQorQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFBBTDsKKworUmVmPEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yPiBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvcjo6Y3JlYXRlKEdyb3VwU2Vzc2lvbiYgc2Vzc2lvbikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihzZXNzaW9uKSk7Cit9CisK
K0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihH
cm91cFNlc3Npb24mIHNlc3Npb24pCisgICAgOiBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAsIG1f
ZGVsZWdhdGUoYWRvcHROUyhbW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBh
bGxvY10gaW5pdFdpdGhQYXJlbnQ6KnRoaXNdKSkKKyAgICAsIG1fcGxheWJhY2tDb29yZGluYXRv
cihhZG9wdE5TKFtQQUw6OmFsbG9jQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvckluc3Rh
bmNlKCkgaW5pdFdpdGhQbGF5YmFja0NvbnRyb2xEZWxlZ2F0ZTptX2RlbGVnYXRlLmdldCgpXSkp
CisgICAgLCBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXIoW3RoaXNdIChhdXRvJiBzZXNzaW9uLCBhdXRv
IHN0YXRlKSB7IHNlc3Npb25TdGF0ZUNoYW5nZWQoc2Vzc2lvbiwgc3RhdGUpOyB9KQoreworICAg
IFtzZXNzaW9uLmdyb3VwU2Vzc2lvbigpIGNvb3JkaW5hdGVXaXRoQ29vcmRpbmF0b3I6bV9wbGF5
YmFja0Nvb3JkaW5hdG9yLmdldCgpXTsKKyAgICBzZXNzaW9uLmFkZFN0YXRlQ2hhbmdlT2JzZXJ2
ZXIobV9zdGF0ZUNoYW5nZU9ic2VydmVyKTsKK30KKworR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0
b3I6On5Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcigpCit7CisgICAgbV9zZXNzaW9uLT5ncm91
cFNlc3Npb24oKS5uZXdBY3Rpdml0eUNhbGxiYWNrID0gbmlsOworICAgIG1fc2Vzc2lvbi0+Z3Jv
dXBTZXNzaW9uKCkuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBuaWw7Cit9CisKK3ZvaWQgR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBTZXNz
aW9uJiBzZXNzaW9uLCBHcm91cFNlc3Npb246OlN0YXRlIHN0YXRlKQoreworICAgIGlmICghY2xp
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpXYWl0aW5nKSA9PSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KEdyb3VwU2Vzc2lvbjo6U3RhdGU6OldhaXRpbmcpLCAiTWVkaWFTZXNzaW9u
Q29vcmRpbmF0b3JTdGF0ZTo6V2FpdGluZyAhPSBXS0dyb3VwU2Vzc2lvblN0YXRlV2FpdGluZyIp
OworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVNlc3Npb25Db29y
ZGluYXRvclN0YXRlOjpKb2luZWQpID09IHN0YXRpY19jYXN0PHNpemVfdD4oR3JvdXBTZXNzaW9u
OjpTdGF0ZTo6Sm9pbmVkKSwgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU6OkpvaW5lZCAh
PSBXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNf
Y2FzdDxzaXplX3Q+KE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU6OkNsb3NlZCkgPT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihHcm91cFNlc3Npb246OlN0YXRlOjpJbnZhbGlkYXRlZCksICJNZWRp
YVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpDbG9zZWQgIT0gV0tHcm91cFNlc3Npb25TdGF0ZUlu
dmFsaWRhdGVkIik7CisgICAgY2xpZW50KCktPmNvb3JkaW5hdG9yU3RhdGVDaGFuZ2VkKHN0YXRp
Y19jYXN0PE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU+KHN0YXRlKSk7Cit9CisKK1N0cmlu
ZyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2Vzc2lvbi0+dXVpZCgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3Jk
aW5hdG9yOjpqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxsYmFjaykKK3sK
KyAgICBtX3Nlc3Npb24tPmpvaW4oKTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworfQor
Cit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpsZWF2ZSgpCit7CisgICAgbV9zZXNz
aW9uLT5sZWF2ZSgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZWVr
VG8oZG91YmxlIHRpbWUsIENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxsYmFjaykK
K3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVTZWVrVG9UaW1lOkNNVGlt
ZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCAxMDAwKSBvcHRpb25zOjBdOworICAgIGNhbGxiYWNrKHN0
ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBsYXko
Q29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIFttX3BsYXli
YWNrQ29vcmRpbmF0b3IgY29vcmRpbmF0ZVJhdGVDaGFuZ2VUb1JhdGU6MSBvcHRpb25zOjBdOwor
ICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29v
cmRpbmF0b3I6OnBhdXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxsYmFjaykK
K3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVSYXRlQ2hhbmdlVG9SYXRl
OjAgb3B0aW9uczowXTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworfQorCit2b2lkIEdy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXRUcmFjayhjb25zdCBTdHJpbmcmIHRyYWNrLCBD
b29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2so
c3RkOjpudWxsb3B0KTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6cG9z
aXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxNZWRpYVBvc2l0aW9uU3RhdGU+
JiBwb3NpdGlvblN0YXRlKQoreworICAgIGlmIChtX3Bvc2l0aW9uU3RhdGUgPT0gcG9zaXRpb25T
dGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcG9zaXRpb25TdGF0ZSA9IHBvc2l0aW9uU3Rh
dGU7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3RhdGVDaGFu
Z2VkKE1lZGlhU2Vzc2lvblJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAobV9yZWFk
eVN0YXRlID09IHJlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlYWR5U3RhdGUg
PSByZWFkeVN0YXRlOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpwbGF5
YmFja1N0YXRlQ2hhbmdlZChNZWRpYVNlc3Npb25QbGF5YmFja1N0YXRlIHBsYXliYWNrU3RhdGUp
Cit7CisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBwbGF5YmFja1N0YXRlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9wbGF5YmFja1N0YXRlID0gcGxheWJhY2tTdGF0ZTsKK30KKwordm9pZCBH
cm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6dHJhY2tJZGVudGlmaWVyQ2hhbmdlZChjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIgIT0gU3RyaW5nKFttX3Bs
YXliYWNrQ29vcmRpbmF0b3IgY3VycmVudEl0ZW1JZGVudGlmaWVyXSkpCisgICAgICAgIFttX3Bs
YXliYWNrQ29vcmRpbmF0b3IgdHJhbnNpdGlvblRvSXRlbVdpdGhJZGVudGlmaWVyOmlkZW50aWZp
ZXIgcHJvcG9zaW5nSW5pdGlhbFRpbWluZ0Jhc2VkT25UaW1lYmFzZTpuaWxdOworfQorCit2b2lk
IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBsYXlDb21tYW5kKEFWRGVsZWdhdGlu
Z1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZCAqcGxheUNvbW1hbmQsIENvbW1hbmRDb21w
bGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBpdGVtVGltZTsKKyAgICBpZiAoQ01USU1FX0lTX05VTUVSSUMocGxheUNvbW1h
bmQuaXRlbVRpbWUpKQorICAgICAgICBpdGVtVGltZSA9IENNVGltZUdldFNlY29uZHMocGxheUNv
bW1hbmQuaXRlbVRpbWUpOworICAgIHN0ZDo6b3B0aW9uYWw8TW9ub3RvbmljVGltZT4gaG9zdFRp
bWU7CisgICAgaWYgKENNVElNRV9JU19OVU1FUklDKHBsYXlDb21tYW5kLmhvc3RDbG9ja1RpbWUp
KQorICAgICAgICBob3N0VGltZSA9IE1vbm90b25pY1RpbWU6OmZyb21NYWNoQWJzb2x1dGVUaW1l
KENNQ2xvY2tDb252ZXJ0SG9zdFRpbWVUb1N5c3RlbVVuaXRzKHBsYXlDb21tYW5kLmhvc3RDbG9j
a1RpbWUpKTsKKworICAgIGNsaWVudCgpLT5wbGF5U2Vzc2lvbihpdGVtVGltZSwgaG9zdFRpbWUs
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYm9vbCkgeworICAgICAgICBjYWxsYmFj
aygpOworICAgIH0pOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1
ZVBhdXNlQ29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGF1c2VDb21tYW5k
ICpwYXVzZUNvbW1hbmQsIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQorewor
ICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNsaWVudCgpLT5wYXVzZVNlc3Npb24oW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldIChib29sKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlU2Vla0NvbW1hbmQoQVZEZWxl
Z2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kICpzZWVrQ29tbWFuZCwgQ29tbWFu
ZENvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFjbGllbnQoKSkgewor
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFD
TVRJTUVfSVNfTlVNRVJJQyhzZWVrQ29tbWFuZC5pdGVtVGltZSkpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjbGllbnQoKS0+c2Vla1Nlc3Npb25Ub1RpbWUoQ01UaW1lR2V0U2Vjb25kcyhz
ZWVrQ29tbWFuZC5pdGVtVGltZSksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYm9v
bCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgR3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5nQ29tbWFuZChBVkRlbGVnYXRp
bmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqLCBDb21tYW5kQ29tcGxldGlv
bkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3I6Omlzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kKEFWRGVsZWdhdGluZ1BsYXliYWNr
Q29vcmRpbmF0b3JQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQgKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYzMzQ5OTY4ZTcwYjQyZThmNmJiNWYwMzQwNTI0ODBjZGY0MzhkZDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3Jv
dXBTZXNzaW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNU
SVZJVElFUykKKworI2luY2x1ZGUgPHd0Zi9PYnNlcnZlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CisK
K09CSkNfQ0xBU1MgV0tHcm91cFNlc3Npb247CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBHcm91cFNlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHcm91cFNlc3Npb24+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdyb3VwU2Vz
c2lvbj4gY3JlYXRlKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7CisgICAgfkdyb3VwU2Vz
c2lvbigpOworCisgICAgdm9pZCBqb2luKCk7CisgICAgdm9pZCBsZWF2ZSgpOworCisgICAgZW51
bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBXYWl0aW5nLAorICAgICAgICBKb2lu
ZWQsCisgICAgICAgIEludmFsaWRhdGVkLAorICAgIH07CisgICAgU3RhdGUgc3RhdGUoKSBjb25z
dDsKKworICAgIFN0cmluZyB1dWlkKCkgY29uc3Q7CisgICAgVVJMIGZhbGxiYWNrVVJMKCkgY29u
c3Q7CisKKyAgICB1c2luZyBTdGF0ZUNoYW5nZU9ic2VydmVyID0gV1RGOjpPYnNlcnZlcjx2b2lk
KGNvbnN0IEdyb3VwU2Vzc2lvbiYsIFN0YXRlKT47CisgICAgdm9pZCBhZGRTdGF0ZUNoYW5nZU9i
c2VydmVyKGNvbnN0IFN0YXRlQ2hhbmdlT2JzZXJ2ZXImKTsKKworICAgIHVzaW5nIEZhbGxiYWNr
VVJMT2JzZXJ2ZXIgPSBXVEY6Ok9ic2VydmVyPHZvaWQoY29uc3QgR3JvdXBTZXNzaW9uJiwgVVJM
KT47CisgICAgdm9pZCBhZGRGYWxsYmFja1VSTE9ic2VydmVyKGNvbnN0IEZhbGxiYWNrVVJMT2Jz
ZXJ2ZXImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR3JvdXBTZXNzaW9uTm90aWZp
ZXI7CisgICAgZnJpZW5kIGNsYXNzIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOworICAgIEdy
b3VwU2Vzc2lvbihSZXRhaW5QdHI8V0tHcm91cFNlc3Npb24+JiYpOworICAgIFdLR3JvdXBTZXNz
aW9uKiBncm91cFNlc3Npb24oKSB7IHJldHVybiBtX2dyb3VwU2Vzc2lvbi5nZXQoKTsgfQorCisg
ICAgUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiBtX2dyb3VwU2Vzc2lvbjsKKyAgICBXZWFrSGFz
aFNldDxTdGF0ZUNoYW5nZU9ic2VydmVyPiBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXJzOworICAgIFdl
YWtIYXNoU2V0PEZhbGxiYWNrVVJMT2JzZXJ2ZXI+IG1fZmFsbGJhY2tVUkxPYnNlcnZlcnM7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA0
ZWUzODI2ZThiNjY5OWRkZTBiMDcxNDA3ZTk1ODdmMTkzNDJmMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Np
b24ubW0KQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICAiY29uZmlnLmgi
CisjaW1wb3J0ICAiR3JvdXBTZXNzaW9uLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9D
T09SRElOQVRPUikgJiYgSEFWRShHUk9VUF9BQ1RJVklUSUVTKQorCisjaW1wb3J0ICJXS0dyb3Vw
U2Vzc2lvbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPEdyb3VwU2Vzc2lvbj4gR3Jv
dXBTZXNzaW9uOjpjcmVhdGUoUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24pCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JvdXBTZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikp
KTsKK30KKworR3JvdXBTZXNzaW9uOjpHcm91cFNlc3Npb24oUmV0YWluUHRyPFdLR3JvdXBTZXNz
aW9uPiYmIHNlc3Npb24pCisgICAgOiBtX2dyb3VwU2Vzc2lvbihXVEZNb3ZlKHNlc3Npb24pKQor
eworICAgIG1fZ3JvdXBTZXNzaW9uLmdldCgpLm5ld0FjdGl2aXR5Q2FsbGJhY2sgPSBbdGhpc10g
KFdLVVJMQWN0aXZpdHkgKmFjdGl2aXR5KSB7CisgICAgICAgIG1fZmFsbGJhY2tVUkxPYnNlcnZl
cnMuZm9yRWFjaChbdGhpcywgYWN0aXZpdHldIChhdXRvJiBvYnNlcnZlcikgeworICAgICAgICAg
ICAgb2JzZXJ2ZXIoKnRoaXMsIGFjdGl2aXR5LmZhbGxiYWNrVVJMKTsKKyAgICAgICAgfSk7Cisg
ICAgfTsKKworICAgIG1fZ3JvdXBTZXNzaW9uLmdldCgpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0g
W3RoaXNdIChXS0dyb3VwU2Vzc2lvblN0YXRlIHN0YXRlKSB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6V2FpdGluZykgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlV2FpdGluZyksICJNZWRpYVNlc3Npb25Db29yZGluYXRv
clN0YXRlOjpXYWl0aW5nICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVXYWl0aW5nIik7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6Sm9pbmVkKSA9PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQpLCAiTWVkaWFTZXNzaW9u
Q29vcmRpbmF0b3JTdGF0ZTo6Sm9pbmVkICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQiKTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlOjpJbnZhbGlk
YXRlZCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0
ZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Q2xvc2VkICE9IFdLR3JvdXBTZXNz
aW9uU3RhdGVJbnZhbGlkYXRlZCIpOworICAgICAgICBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXJzLmZv
ckVhY2goW3RoaXMsIHN0YXRlXSAoYXV0byYgb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIG9ic2Vy
dmVyKCp0aGlzLCBzdGF0aWNfY2FzdDxTdGF0ZT4oc3RhdGUpKTsKKyAgICAgICAgfSk7CisgICAg
fTsKK30KKworR3JvdXBTZXNzaW9uOjp+R3JvdXBTZXNzaW9uKCkKK3sKKyAgICBtX2dyb3VwU2Vz
c2lvbi5nZXQoKS5uZXdBY3Rpdml0eUNhbGxiYWNrID0gbmlsOworICAgIG1fZ3JvdXBTZXNzaW9u
LmdldCgpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbmlsOworfQorCit2b2lkIEdyb3VwU2Vzc2lv
bjo6am9pbigpCit7CisgICAgW21fZ3JvdXBTZXNzaW9uIGpvaW5dOworfQorCit2b2lkIEdyb3Vw
U2Vzc2lvbjo6bGVhdmUoKQoreworICAgIFttX2dyb3VwU2Vzc2lvbiBsZWF2ZV07Cit9CisKK2F1
dG8gR3JvdXBTZXNzaW9uOjpzdGF0ZSgpIGNvbnN0IC0+IFN0YXRlCit7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlOjpXYWl0aW5nKSA9PSBzdGF0aWNfY2FzdDxz
aXplX3Q+KFdLR3JvdXBTZXNzaW9uU3RhdGVXYWl0aW5nKSwgIlN0YXRlOjpXYWl0aW5nICE9IFdL
R3JvdXBTZXNzaW9uU3RhdGVXYWl0aW5nIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2Fz
dDxzaXplX3Q+KFN0YXRlOjpKb2luZWQpID09IHN0YXRpY19jYXN0PHNpemVfdD4oV0tHcm91cFNl
c3Npb25TdGF0ZUpvaW5lZCksICJTdGF0ZTo6Sm9pbmVkICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVK
b2luZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6Oklu
dmFsaWRhdGVkKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFdLR3JvdXBTZXNzaW9uU3RhdGVJbnZh
bGlkYXRlZCksICJTdGF0ZTo6SW52YWxpZGF0ZWQgIT0gV0tHcm91cFNlc3Npb25TdGF0ZUludmFs
aWRhdGVkIik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXRlPihbbV9ncm91cFNlc3Npb24g
c3RhdGVdKTsKK30KKworU3RyaW5nIEdyb3VwU2Vzc2lvbjo6dXVpZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFttX2dyb3VwU2Vzc2lvbiB1dWlkXS5VVUlEU3RyaW5nOworfQorCitVUkwgR3JvdXBT
ZXNzaW9uOjpmYWxsYmFja1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2dyb3VwU2Vzc2lv
biBhY3Rpdml0eV0uZmFsbGJhY2tVUkw7Cit9CisKK3ZvaWQgR3JvdXBTZXNzaW9uOjphZGRTdGF0
ZUNoYW5nZU9ic2VydmVyKGNvbnN0IFN0YXRlQ2hhbmdlT2JzZXJ2ZXImIG9ic2VydmVyKQorewor
ICAgIG1fc3RhdGVDaGFuZ2VPYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKK30KKwordm9pZCBHcm91
cFNlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIoY29uc3QgRmFsbGJhY2tVUkxPYnNlcnZl
ciYgb2JzZXJ2ZXIpCit7CisgICAgbV9mYWxsYmFja1VSTE9ic2VydmVycy5hZGQob2JzZXJ2ZXIp
OworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbk5vdGlmaWVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBTZXNzaW9uTm90aWZpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MTlkNTc2YmIwMzExNDg2OTgyZmE3N2IyYjZmZjkzYmNjNWI1NmIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rp
dml0aWVzL0dyb3VwU2Vzc2lvbk5vdGlmaWVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1Ip
ICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2luY2x1ZGUgIkdyb3VwU2Vzc2lvbi5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXI7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIEdy
b3VwU2Vzc2lvbk5vdGlmaWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPEdyb3VwU2Vzc2lvbk5v
dGlmaWVyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIEdyb3VwU2Vzc2lvbk5vdGlmaWVyJiBzaGFyZWROb3RpZmllcigpOworCisgICAgYm9vbCBo
YXNTZXNzaW9uRm9yVVJMKGNvbnN0IFVSTCYpOworICAgIFJlZlB0cjxHcm91cFNlc3Npb24+IHRh
a2VTZXNzaW9uRm9yVVJMKGNvbnN0IFVSTCYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihjb25z
dCBHcm91cFNlc3Npb24mKTsKKworICAgIHZvaWQgYWRkV2ViUGFnZShXZWJQYWdlUHJveHkmKTsK
KyAgICB2b2lkIHJlbW92ZVdlYlBhZ2UoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCB3ZWJQYWdl
VVJMQ2hhbmdlZChXZWJQYWdlUHJveHkmKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8R3JvdXBTZXNzaW9uTm90aWZpZXI+OworICAgIEdyb3VwU2Vzc2lvbk5v
dGlmaWVyKCk7CisKKyAgICB2b2lkIHNlc3Npb25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBTZXNz
aW9uJiwgR3JvdXBTZXNzaW9uOjpTdGF0ZSk7CisKKyAgICBIYXNoTWFwPFVSTCwgUmVmPEdyb3Vw
U2Vzc2lvbj4+IG1fc2Vzc2lvbnM7CisgICAgUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uT2JzZXJ2
ZXI+IG1fc2Vzc2lvbk9ic2VydmVyOworICAgIFdlYWtIYXNoU2V0PFdlYlBhZ2VQcm94eT4gbV93
ZWJQYWdlczsKKyAgICBHcm91cFNlc3Npb246OlN0YXRlQ2hhbmdlT2JzZXJ2ZXIgbV9zdGF0ZUNo
YW5nZU9ic2VydmVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNlc3Npb25Ob3RpZmllci5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cFNl
c3Npb25Ob3RpZmllci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2QwMTIwMGU4OWQ1OTRiZjVmY2QyY2FiY2Yw
NTFlNzQwMDc3ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwU2Vzc2lvbk5vdGlmaWVyLm1tCkBAIC0wLDAgKzEs
MTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJHcm91cFNl
c3Npb25Ob3RpZmllci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1Ip
ICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2ltcG9ydCAiV0tHcm91cFNlc3Npb24uaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisK
K3N0YXRpYyB2b2lkKiBXZWJLaXRTd2lmdExpYnJhcnkoKQoreworICAgIHN0YXRpYyB2b2lkKiBk
eWxpYiA9IFtdIHsKKyAgICAgICAgLy8gU3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgbGlicmFy
eSBpbiBEWUxEX0xJQlJBUllfUEFUSDoKKyAgICAgICAgaWYgKHZvaWQgKnJlc3VsdCA9IGRsb3Bl
bigibGliV2ViS2l0U3dpZnQuZHlsaWIiLCBSVExEX05PVykpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgICAgIC8vIFRoZW4gc2VhcmNoIGluIHRoZSBGcmFtZXdvcmtzLyBkaXJl
Y3Rvcnkgb2YgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmVyc2lvbiBvZiBXZWJLaXQuZnJhbWV3b3Jr
OgorICAgICAgICBEbF9pbmZvIGluZm8geyB9OworICAgICAgICBpZiAoZGxhZGRyKChjb25zdCB2
b2lkKikmV2ViS2l0U3dpZnRMaWJyYXJ5LCAmaW5mbykgJiYgc3RybGVuKGluZm8uZGxpX2ZuYW1l
KSkgeworICAgICAgICAgICAgYXV0byB3ZWJraXRGcmFtZXdvcmtEaXJlY3RvcnkgPSBXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKGluZm8uZGxpX2ZuYW1lKTsKKyAgICAgICAgICAgIGF1
dG8gZHlsaWJQYXRoID0gV1RGOjpGaWxlU3lzdGVtSW1wbDo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHdlYmtpdEZyYW1ld29ya0RpcmVjdG9yeSwgIkZyYW1ld29ya3MvbGliV2ViS2l0U3dpZnQu
ZHlsaWIiKTsKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBkbG9wZW4oZHlsaWJQYXRo
LnV0ZjgoKS5kYXRhKCksIFJUTERfTk9XKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWxseSwgc2VhcmNoIGF0IHRoZSBpbnN0YWxs
ZWQgc3lzdGVtIHBhdGg6CisgICAgICAgIGlmICh2b2lkICpyZXN1bHQgPSBkbG9wZW4oIi9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9saWJXZWJL
aXRTd2lmdC5keWxpYiIsIFJUTERfTk9XKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisK
KyAgICAgICAgcmV0dXJuICh2b2lkICopbnVsbHB0cjsKKyAgICB9KCk7CisgICAgcmV0dXJuIGR5
bGliOworfQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoV2ViS2l0U3dpZnQsIFdLR3JvdXBT
ZXNzaW9uT2JzZXJ2ZXIpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2Ug
UEFMOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dyb3VwU2Vzc2lvbk5vdGlmaWVyJiBH
cm91cFNlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZpZXIoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxHcm91cFNlc3Npb25Ob3RpZmllcj4gbm90aWZpZXI7CisgICAgcmV0dXJuIG5v
dGlmaWVyOworfQorCitHcm91cFNlc3Npb25Ob3RpZmllcjo6R3JvdXBTZXNzaW9uTm90aWZpZXIo
KQorICAgIDogbV9zZXNzaW9uT2JzZXJ2ZXIoYWRvcHROUyhbYWxsb2NXS0dyb3VwU2Vzc2lvbk9i
c2VydmVySW5zdGFuY2UoKSBpbml0XSkpCisgICAgLCBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXIoW3Ro
aXNdIChhdXRvJiBzZXNzaW9uLCBhdXRvIHN0YXRlKSB7IHNlc3Npb25TdGF0ZUNoYW5nZWQoc2Vz
c2lvbiwgc3RhdGUpOyB9KQoreworICAgIG1fc2Vzc2lvbk9ic2VydmVyLmdldCgpLm5ld1Nlc3Np
b25DYWxsYmFjayA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSAoV0tHcm91
cFNlc3Npb24gKmdyb3VwU2Vzc2lvbikgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gc2Vzc2lvbiA9IEdyb3VwU2Vzc2lvbjo6Y3Jl
YXRlKGdyb3VwU2Vzc2lvbik7CisgICAgICAgIHNlc3Npb24tPmFkZFN0YXRlQ2hhbmdlT2JzZXJ2
ZXIobV9zdGF0ZUNoYW5nZU9ic2VydmVyKTsKKworICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBj
b3B5VG9WZWN0b3IobV93ZWJQYWdlcykpIHsKKyAgICAgICAgICAgIGlmIChwYWdlLT5tYWluRnJh
bWUoKSAmJiBwYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkgPT0gc2Vzc2lvbi0+ZmFsbGJhY2tVUkwo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gY29vcmRpbmF0b3IgPSBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvcjo6Y3JlYXRlKHNlc3Npb24pOworICAgICAgICAgICAgICAgIHBhZ2UtPmNyZWF0
ZU1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yKFdURk1vdmUoY29vcmRpbmF0b3IpLCBbXSAoYm9vbCkg
eyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvbnMuYWRkKHNlc3Npb24tPmZhbGxiYWNr
VVJMKCksIHNlc3Npb24uY29weVJlZigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgICAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtz
cGFjZV0gb3BlblVSTDpzZXNzaW9uLT5mYWxsYmFja1VSTCgpXTsKKyAgICB9OworfQorCit2b2lk
IEdyb3VwU2Vzc2lvbk5vdGlmaWVyOjpzZXNzaW9uU3RhdGVDaGFuZ2VkKGNvbnN0IEdyb3VwU2Vz
c2lvbiYgc2Vzc2lvbiwgR3JvdXBTZXNzaW9uOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAoc3Rh
dGUgPT0gR3JvdXBTZXNzaW9uOjpTdGF0ZTo6SW52YWxpZGF0ZWQpCisgICAgICAgIG1fc2Vzc2lv
bnMucmVtb3ZlKHNlc3Npb24uZmFsbGJhY2tVUkwoKSk7Cit9OworCit2b2lkIEdyb3VwU2Vzc2lv
bk5vdGlmaWVyOjphZGRXZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKK3sKKyAgICBBU1NF
UlQoIW1fd2ViUGFnZXMuY29udGFpbnMod2ViUGFnZSkpOworICAgIG1fd2ViUGFnZXMuYWRkKHdl
YlBhZ2UpOworCisgICAgYXV0byBmcmFtZSA9IHdlYlBhZ2UubWFpbkZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzZXNzaW9uID0gdGFrZVNlc3Np
b25Gb3JVUkwoZnJhbWUtPnVybCgpKTsKKyAgICBpZiAoIXNlc3Npb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gY29vcmRpbmF0b3IgPSBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6
Y3JlYXRlKCpzZXNzaW9uKTsKKyAgICB3ZWJQYWdlLmNyZWF0ZU1lZGlhU2Vzc2lvbkNvb3JkaW5h
dG9yKFdURk1vdmUoY29vcmRpbmF0b3IpLCBbXSAoYm9vbCkgeyB9KTsKK30KKwordm9pZCBHcm91
cFNlc3Npb25Ob3RpZmllcjo6cmVtb3ZlV2ViUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCit7
CisgICAgQVNTRVJUKG1fd2ViUGFnZXMuY29udGFpbnMod2ViUGFnZSkpOworICAgIG1fd2ViUGFn
ZXMucmVtb3ZlKHdlYlBhZ2UpOworfQorCit2b2lkIEdyb3VwU2Vzc2lvbk5vdGlmaWVyOjp3ZWJQ
YWdlVVJMQ2hhbmdlZChXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCit7CisgICAgQVNTRVJUKG1fd2Vi
UGFnZXMuY29udGFpbnMod2ViUGFnZSkpOworICAgIGlmICghbV93ZWJQYWdlcy5jb250YWlucyh3
ZWJQYWdlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBmcmFtZSA9IHdlYlBhZ2UubWFp
bkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBz
ZXNzaW9uID0gdGFrZVNlc3Npb25Gb3JVUkwoZnJhbWUtPnVybCgpKTsKKyAgICBpZiAoIXNlc3Np
b24pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29vcmRpbmF0b3IgPSBHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvcjo6Y3JlYXRlKCpzZXNzaW9uKTsKKyAgICB3ZWJQYWdlLmNyZWF0ZU1l
ZGlhU2Vzc2lvbkNvb3JkaW5hdG9yKFdURk1vdmUoY29vcmRpbmF0b3IpLCBbXSAoYm9vbCkgeyB9
KTsKK30KKworYm9vbCBHcm91cFNlc3Npb25Ob3RpZmllcjo6aGFzU2Vzc2lvbkZvclVSTChjb25z
dCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gbV9zZXNzaW9ucy5jb250YWlucyh1cmwpOworfQor
CitSZWZQdHI8R3JvdXBTZXNzaW9uPiBHcm91cFNlc3Npb25Ob3RpZmllcjo6dGFrZVNlc3Npb25G
b3JVUkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1fc2Vzc2lvbnMudGFrZSh1cmwp
OworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NWRlYmVjNTU5ZGMwNzA3NWU5NzMzNmI1NjY0NTRmM2JiOTBiYTliCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3Jv
dXBTZXNzaW9uLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwordHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgV0tHcm91cFNlc3Npb25TdGF0ZSkgeworICAgIFdLR3JvdXBTZXNzaW9uU3RhdGVX
YWl0aW5nID0gMCwKKyAgICBXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkID0gMSwKKyAgICBXS0dy
b3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQgPSAyLAorfTsKKworQGNsYXNzIEFWUGxheWJhY2tD
b29yZGluYXRvcjsKK0BjbGFzcyBOU1VSTDsKK0BjbGFzcyBOU1VVSUQ7CitAY2xhc3MgV0tHcm91
cFNlc3Npb247CitAY2xhc3MgV0tVUkxBY3Rpdml0eTsKKworTlNfQVNTVU1FX05PTk5VTExfQkVH
SU4KKworQGludGVyZmFjZSBXS0dyb3VwU2Vzc2lvbk9ic2VydmVyIDogTlNPYmplY3QKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheIF9OdWxsYWJsZSBuZXdTZXNzaW9uQ2FsbGJh
Y2spKFdLR3JvdXBTZXNzaW9uICopOworLSAobm9ubnVsbCBpbnN0YW5jZXR5cGUpaW5pdDsKK0Bl
bmQKKworQGludGVyZmFjZSBXS0dyb3VwU2Vzc2lvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHksIHN0cm9uZykgV0tVUkxBY3Rpdml0eSAqYWN0aXZpdHk7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVVJRCAqdXVpZDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tHcm91cFNlc3Npb25TdGF0ZSBzdGF0ZTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheIF9OdWxsYWJsZSBuZXdBY3Rpdml0eUNhbGxi
YWNrKShXS1VSTEFjdGl2aXR5ICopOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQg
KF4gX051bGxhYmxlIHN0YXRlQ2hhbmdlZENhbGxiYWNrKShXS0dyb3VwU2Vzc2lvblN0YXRlKTsK
Ky0gKHZvaWQpam9pbjsKKy0gKHZvaWQpbGVhdmU7CistICh2b2lkKWNvb3JkaW5hdGVXaXRoQ29v
cmRpbmF0b3I6KEFWUGxheWJhY2tDb29yZGluYXRvciAqKXBsYXliYWNrQ29vcmRpbmF0b3I7CitA
ZW5kCisKK0BpbnRlcmZhY2UgV0tVUkxBY3Rpdml0eSA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNVUkwgKiBfTnVsbGFibGUgZmFsbGJhY2tVUkw7CitAZW5kCisKK05T
X0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLnN3aWZ0IGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLnN3aWZ0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcxMjUxNTZjMWY3MmIxZWQ3ZTI1Yzg0Mzg4OTY1YmM3OTY5ZjAxOTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRp
ZXMvV0tHcm91cFNlc3Npb24uc3dpZnQKQEAgLTAsMCArMSwxNTIgQEAKKy8vIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKy8vIGFyZSBtZXQ6CisvLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy8vICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworLy8gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisvLyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisvLyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKy8vIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy8vIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisvLyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKy8vIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisvLyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorLy8gQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgY2FuSW1w
b3J0KEdyb3VwQWN0aXZpdGllcykKKworaW1wb3J0IEFWRm91bmRhdGlvbgoraW1wb3J0IENvbWJp
bmUKK0Bfc3BpKFNhZmFyaSkgaW1wb3J0IEdyb3VwQWN0aXZpdGllcworaW1wb3J0IEZvdW5kYXRp
b24KKworQG9iamMgcHVibGljIGVudW0gV0tHcm91cFNlc3Npb25TdGF0ZSA6IEludCB7CisgICAg
Y2FzZSB3YWl0aW5nID0gMAorICAgIGNhc2Ugam9pbmVkID0gMQorICAgIGNhc2UgaW52YWxpZGF0
ZWQgPSAyCit9CisKK0BvYmpjKFdLVVJMQWN0aXZpdHkpCitwdWJsaWMgZmluYWwgY2xhc3MgV0tV
UkxBY3Rpdml0eVdyYXBwZXIgOiBOU09iamVjdCB7CisgICAgcHJpdmF0ZSB2YXIgdXJsQWN0aXZp
dHk6IFVSTEFjdGl2aXR5CisgICAgaW5pdChhY3Rpdml0eTogVVJMQWN0aXZpdHkpIHsKKyAgICAg
ICAgc2VsZi51cmxBY3Rpdml0eSA9IGFjdGl2aXR5CisgICAgICAgIHN1cGVyLmluaXQoKQorICAg
IH0KKworICAgIEBvYmpjIHB1YmxpYyB2YXIgZmFsbGJhY2tVUkw6IFVSTD8geworICAgICAgICBy
ZXR1cm4gc2VsZi51cmxBY3Rpdml0eS53ZWJwYWdlVVJMCisgICAgfQorfQorCitAb2JqYyhXS0dy
b3VwU2Vzc2lvbikKK3B1YmxpYyBmaW5hbCBjbGFzcyBXS0dyb3VwU2Vzc2lvbldyYXBwZXIgOiBO
U09iamVjdCB7CisgICAgcHJpdmF0ZSB2YXIgZ3JvdXBTZXNzaW9uOiBHcm91cFNlc3Npb248VVJM
QWN0aXZpdHk+CisgICAgcHJpdmF0ZSB2YXIgYWN0aXZpdHlXcmFwcGVyIDogV0tVUkxBY3Rpdml0
eVdyYXBwZXIKKyAgICBwcml2YXRlIHZhciBjYW5jZWxsYWJsZXM6IFNldDxBbnlDYW5jZWxsYWJs
ZT4gPSBbXQorCisgICAgaW5pdChncm91cFNlc3Npb246IEdyb3VwU2Vzc2lvbjxVUkxBY3Rpdml0
eT4pIHsKKyAgICAgICAgc2VsZi5ncm91cFNlc3Npb24gPSBncm91cFNlc3Npb24KKyAgICAgICAg
c2VsZi5hY3Rpdml0eVdyYXBwZXIgPSBXS1VSTEFjdGl2aXR5V3JhcHBlcihhY3Rpdml0eTogZ3Jv
dXBTZXNzaW9uLmFjdGl2aXR5KQorCisgICAgICAgIHN1cGVyLmluaXQoKQorCisgICAgICAgIHNl
bGYuZ3JvdXBTZXNzaW9uLiRhY3Rpdml0eQorICAgICAgICAgICAgLnNpbmsgeyBbdW5vd25lZCBz
ZWxmXSBpbiBzZWxmLmFjdGl2aXR5Q2hhbmdlZChhY3Rpdml0eTogJDApIH0KKyAgICAgICAgICAg
IC5zdG9yZShpbjogJmNhbmNlbGxhYmxlcykKKyAgICAgICAgc2VsZi5ncm91cFNlc3Npb24uJHN0
YXRlCisgICAgICAgICAgICAuc2luayB7IFt1bm93bmVkIHNlbGZdIGluIHNlbGYuc3RhdGVDaGFu
Z2VkKHN0YXRlOiAkMCkgfQorICAgICAgICAgICAgLnN0b3JlKGluOiAmY2FuY2VsbGFibGVzKQor
ICAgIH0KKworICAgIEBvYmpjIHB1YmxpYyB2YXIgYWN0aXZpdHk6IFdLVVJMQWN0aXZpdHlXcmFw
cGVyIHsgc2VsZi5hY3Rpdml0eVdyYXBwZXIgfQorICAgIEBvYmpjIHB1YmxpYyB2YXIgdXVpZDog
VVVJRCB7IGdyb3VwU2Vzc2lvbi5pZCB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmdW5jIHdyYXBw
ZXJTZXNzaW9uU3RhdGUoc3RhdGU6IEdyb3VwU2Vzc2lvbjxVUkxBY3Rpdml0eT4uU3RhdGUpIC0+
IFdLR3JvdXBTZXNzaW9uU3RhdGUgeworICAgICAgICBzd2l0Y2ggc3RhdGUgeworICAgICAgICBj
YXNlIC53YWl0aW5nOgorICAgICAgICAgICAgcmV0dXJuIFdLR3JvdXBTZXNzaW9uU3RhdGUud2Fp
dGluZworICAgICAgICBjYXNlIC5qb2luZWQ6CisgICAgICAgICAgICByZXR1cm4gV0tHcm91cFNl
c3Npb25TdGF0ZS5qb2luZWQKKyAgICAgICAgY2FzZSAuaW52YWxpZGF0ZWQ6CisgICAgICAgICAg
ICByZXR1cm4gV0tHcm91cFNlc3Npb25TdGF0ZS5pbnZhbGlkYXRlZAorICAgICAgICBAdW5rbm93
biBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVW5hbnRpY2lwYXRlZCBzdGF0ZSB2YWx1ZS4KKyAg
ICAgICAgICAgIGFzc2VydGlvbkZhaWx1cmUoKQorICAgICAgICAgICAgcmV0dXJuIFdLR3JvdXBT
ZXNzaW9uU3RhdGUuaW52YWxpZGF0ZWQKKyAgICAgICAgfQorICAgIH0KKworICAgIEBvYmpjIHB1
YmxpYyB2YXIgc3RhdGU6IFdLR3JvdXBTZXNzaW9uU3RhdGUgeworICAgICAgICByZXR1cm4gV0tH
cm91cFNlc3Npb25XcmFwcGVyLndyYXBwZXJTZXNzaW9uU3RhdGUoc3RhdGU6IGdyb3VwU2Vzc2lv
bi5zdGF0ZSkKKyAgICB9CisKKyAgICBAb2JqYyBwdWJsaWMgdmFyIG5ld0FjdGl2aXR5Q2FsbGJh
Y2s6ICgoV0tVUkxBY3Rpdml0eVdyYXBwZXIpIC0+IFZvaWQpPworICAgIEBvYmpjIHB1YmxpYyB2
YXIgc3RhdGVDaGFuZ2VkQ2FsbGJhY2s6ICgoV0tHcm91cFNlc3Npb25TdGF0ZSkgLT4gVm9pZCk/
CisKKyAgICBAb2JqYyBwdWJsaWMgZnVuYyBqb2luKCkgeworICAgICAgICBncm91cFNlc3Npb24u
am9pbigpCisgICAgfQorCisgICAgQG9iamMgcHVibGljIGZ1bmMgbGVhdmUoKSB7CisgICAgICAg
IGdyb3VwU2Vzc2lvbi5sZWF2ZSgpCisgICAgfQorCisgICAgQG9iamMoY29vcmRpbmF0ZVdpdGhD
b29yZGluYXRvcjopCisgICAgcHVibGljIGZ1bmMgY29vcmRpbmF0ZShjb29yZGluYXRvcjogQVZQ
bGF5YmFja0Nvb3JkaW5hdG9yKSB7CisgICAgICAgIGNvb3JkaW5hdG9yLmNvb3JkaW5hdGVXaXRo
U2Vzc2lvbihzZWxmLmdyb3VwU2Vzc2lvbikKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmMgYWN0
aXZpdHlDaGFuZ2VkKGFjdGl2aXR5OiBVUkxBY3Rpdml0eSkgeworICAgICAgICBzZWxmLmFjdGl2
aXR5V3JhcHBlciA9IFdLVVJMQWN0aXZpdHlXcmFwcGVyKGFjdGl2aXR5OiBncm91cFNlc3Npb24u
YWN0aXZpdHkpCisKKyAgICAgICAgZ3VhcmQgbGV0IGNhbGxiYWNrID0gbmV3QWN0aXZpdHlDYWxs
YmFjayBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB9CisKKyAgICAgICAgY2Fs
bGJhY2soYWN0aXZpdHlXcmFwcGVyKQorICAgIH0KKworICAgIHByaXZhdGUgZnVuYyBzdGF0ZUNo
YW5nZWQoc3RhdGU6IEdyb3VwU2Vzc2lvbjxVUkxBY3Rpdml0eT4uU3RhdGUpIHsKKyAgICAgICAg
Z3VhcmQgbGV0IGNhbGxiYWNrID0gc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrKFdLR3JvdXBTZXNzaW9u
V3JhcHBlci53cmFwcGVyU2Vzc2lvblN0YXRlKHN0YXRlOiBzdGF0ZSkpCisgICAgfQorfQorCitA
b2JqYyhXS0dyb3VwU2Vzc2lvbk9ic2VydmVyKQorcHVibGljIGNsYXNzIFdLR3JvdXBTZXNzaW9u
T2JzZXJ2ZXIgOiBOU09iamVjdCB7CisgICAgQG9iamMgcHVibGljIHZhciBuZXdTZXNzaW9uQ2Fs
bGJhY2s6ICgoV0tHcm91cFNlc3Npb25XcmFwcGVyKSAtPiBWb2lkKT8KKworICAgIHByaXZhdGUg
dmFyIG9ic2VydmVyID0gR3JvdXBTZXNzaW9uT2JzZXJ2ZXIoZm9yOiBVUkxBY3Rpdml0eS5zZWxm
KQorICAgIHByaXZhdGUgdmFyIGNhbmNlbGxhYmxlczogU2V0PEFueUNhbmNlbGxhYmxlPiA9IFtd
CisKKyAgICBAb2JqYyBwdWJsaWMgb3ZlcnJpZGUgaW5pdCgpIHsKKyAgICAgICAgc3VwZXIuaW5p
dCgpCisKKyAgICAgICAgb2JzZXJ2ZXIKKyAgICAgICAgICAgIC5zaW5rIHsgW3Vub3duZWQgc2Vs
Zl0gaW4gc2VsZi5yZWNpZXZlZFNlc3Npb24oJDApIH0KKyAgICAgICAgICAgIC5zdG9yZShpbjog
JmNhbmNlbGxhYmxlcykKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmMgcmVjaWV2ZWRTZXNzaW9u
KF8gc2Vzc2lvbjogR3JvdXBTZXNzaW9uPFVSTEFjdGl2aXR5PikgeworICAgICAgICBndWFyZCBs
ZXQgY2FsbGJhY2sgPSBuZXdTZXNzaW9uQ2FsbGJhY2sgZWxzZSB7CisgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgfQorCisgICAgICAgIGxldCBzZXNzaW9uV3JhcHBlciA9IFdLR3JvdXBTZXNz
aW9uV3JhcHBlcihncm91cFNlc3Npb246IHNlc3Npb24pCisgICAgICAgIGNhbGxiYWNrKHNlc3Np
b25XcmFwcGVyKQorICAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVSZW1vdGVJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCmluZGV4IDA2
NmM5NTljM2E3OGNlY2UzNmE3NWIwNzAzOGQwODAwNDU5NzE2NmYuLjVhMTNhOTczNjYyOWQ2YTEz
MTAyMjU5YWNhYmFmMjNkNTBmNzIyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJl
bW90ZUlPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9p
b3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCkBAIC0yNyw2ICsy
Nyw4IEBACiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1NfRkFN
SUxZKQogCitPQkpDX0NMQVNTIFVJU2Nyb2xsVmlldzsKKwogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDlkOTY4MDYxNDIzYjc5
NTVjM2MzN2FkZGU1MjdkYzdjZWMzMjhlODkuLjgwODYyNDg5ODIwNDNkMDIyNjU1NTc4Mzc2NjYx
ZjcyYTZjMjQwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMjk5LDEyICsyOTksOCBAQAogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJv
eHlQcml2YXRlLmgiCiAjaW5jbHVkZSAiUmVtb3RlTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94
eS5oIgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0
aW9ucy9XS0Nvb3JkaW5hdG9yQWRkaXRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBXRUJQQUdFUFJP
WFlfQ09OU1RSVUNUT1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMKLSNkZWZpbmUgV0VCUEFHRVBS
T1hZX0RFU1RSVUNUT1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMKLSNkZWZpbmUgV0VCUEFHRVBS
T1hZX0RJRENPTU1JVExPQURGT1JGUkFNRV9XS0NPT1JESU5BVE9SX0FERElUSU9OUworI2lmIEhB
VkUoR1JPVVBfQUNUSVZJVElFUykKKyNpbmNsdWRlICJHcm91cFNlc3Npb25Ob3RpZmllci5oIgog
I2VuZGlmCiAjZW5kaWYKIApAQCAtNTY1LDggKzU2MSw4IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFn
ZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vzcywg
UmVmCiAgICAgICAgIHByb2Nlc3Muc2V0SWdub3JlSW52YWxpZE1lc3NhZ2VGb3JUZXN0aW5nKCk7
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKQotICAgIFdF
QlBBR0VQUk9YWV9DT05TVFJVQ1RPUl9XS0NPT1JESU5BVE9SX0FERElUSU9OUworI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisg
ICAgR3JvdXBTZXNzaW9uTm90aWZpZXI6OnNoYXJlZE5vdGlmaWVyKCkuYWRkV2ViUGFnZSgqdGhp
cyk7CiAjZW5kaWYKIH0KIApAQCAtNjA0LDggKzYwMCw4IEBAIFdlYlBhZ2VQcm94eTo6fldlYlBh
Z2VQcm94eSgpCiAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fbmV4dEFjdGl2aXR5U3RhdGVD
aGFuZ2VDYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrKCk7CiAKLSNpZiBFTkFCTEUoTUVESUFf
U0VTU0lPTl9DT09SRElOQVRPUikKLSAgICBXRUJQQUdFUFJPWFlfREVTVFJVQ1RPUl9XS0NPT1JE
SU5BVE9SX0FERElUSU9OUworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAm
JiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisgICAgR3JvdXBTZXNzaW9uTm90aWZpZXI6OnNoYXJl
ZE5vdGlmaWVyKCkucmVtb3ZlV2ViUGFnZSgqdGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtNDg5MSw4
ICs0ODg3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShGcmFt
ZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAgICAgICAgcmVtb3RlSW5zcGVj
dG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX1NF
U1NJT05fQ09PUkRJTkFUT1IpCi0gICAgV0VCUEFHRVBST1hZX0RJRENPTU1JVExPQURGT1JGUkFN
RV9XS0NPT1JESU5BVE9SX0FERElUSU9OUworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JE
SU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisgICAgaWYgKGZyYW1lLT5pc01haW5G
cmFtZSgpKQorICAgICAgICBHcm91cFNlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZpZXIoKS53
ZWJQYWdlVVJMQ2hhbmdlZCgqdGhpcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTQ4MjE5MjFlNDc0ZDI3NGFk
N2UwOTAwZDc0ZDZiMTc2M2I4NmYwMy4uMTQzOWQ3MGI0ZDliYWU3ZDZiMTBlMGYwYTI4ZTBiMTQ5
OTAzYWY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0g
ewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDUyOworCW9iamVjdFZlcnNpb24gPSA1NDsKIAlvYmpl
Y3RzID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtMTkw
Miw3ICsxOTAyLDYgQEAKIAkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3Jl
ZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEODI1MkRF
MjVENDkxNkMwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRDgyNTJEQTI1RDQ5MTU0MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3Rl
bmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlDRDgyNTJFMjI1RDQ5MTkxMDA4
NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODI1MkUwMjVE
NDkxODQwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwotCQlDRDk1NDk0MzI2MTU5MTdCMDA4MzcyRDkgLyogV0tHcm91cFNlc3Np
b24uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REYxN0NDMzI2MEU4RkFCMDBGMEE0RTggLyogV0tHcm91cFNlc3Npb24uc3dpZnQgKi87IH07CiAJ
CUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDQxRjMxQUNFMjEw
NTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87IH07CiAJCUNEQTI5QTFCMUNC
REJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQxMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9OwogCQlDREEyOUEyMDFDQkVCNUZCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyog
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi87IH07CkBAIC0xOTM2LDYgKzE5MzUsNyBA
QAogCQlDREU1NTUzMzI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RFNTU1MkEyNDA2Qjg5NjAwOEEzRERCIC8qIFJlbW90ZUxlZ2FjeUNETVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJQ0RFNTU1MzQyNDA2RUI4QzAwOEEzRERCIC8qIFJl
bW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTU1MkUyNDA2Qjg5NzAwOEEzRERCIC8q
IFJlbW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlDREU1
NTUzNTI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNU2Vzc2lvblByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENERTU1NTMxMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREYxQjkxNTI2NkYzOTZBMDAwN0VDMTAg
LyogV0tHcm91cFNlc3Npb24uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREYxQjkwRDI2NkYzOTVFMDAwN0VDMTAgLyogV0tHcm91cFNlc3Npb24u
c3dpZnQgKi87IH07CiAJCUNFMTFBRDUyMUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMUFENTEx
Q0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nLmggKi87IH07CiAJCUNFMUEwQkQ2MUE0OEU2
QzYwMDU0RUY3NCAvKiBUQ0NTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFMUEwQkQwMUE0OEU2QzYwMDU0RUY3NCAvKiBUQ0NTUEkuaCAqLzsgfTsK
IAkJQ0UxQTBCRDcxQTQ4RTZDNjAwNTRFRjc0IC8qIFRleHRJbnB1dFNQSS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxQTBCRDExQTQ4RTZDNjAwNTRF
Rjc0IC8qIFRleHRJbnB1dFNQSS5oICovOyB9OwpAQCAtNTgwOCw2ICs1ODA4LDE0IEBACiAJCUNE
RTU1NTMwMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uTWVzc2FnZXNS
ZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlc1Jl
cGxpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNTU1MzEyNDA2Qjg5NzAw
OEEzRERCIC8qIFJlbW90ZUxlZ2FjeUNETVNlc3Npb25Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREYxN0NDMzI2MEU4RkFC
MDBGMEE0RTggLyogV0tHcm91cFNlc3Npb24uc3dpZnQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnN3
aWZ0OyBwYXRoID0gV0tHcm91cFNlc3Npb24uc3dpZnQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNERjFCOTBEMjY2RjM5NUUwMDA3RUMxMCAvKiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuc3dpZnQ7IHBhdGggPSBXS0dyb3VwU2Vzc2lvbi5zd2lmdDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0RGMUI5MEUyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwU2Vzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcm91cFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RGMUI5MEYyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTEwMjY2RjM5NUUwMDA3RUMxMCAv
KiBXS0dyb3VwU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0dyb3VwU2Vzc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkxMTI2NkYzOTVFMDAwN0VDMTAgLyogR3Jv
dXBTZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JvdXBTZXNzaW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkxMjI2NkYzOTVFMDAwN0VDMTAgLyogR3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JvdXBBY3Rpdml0aWVz
Q29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MTMyNjZG
Mzk1RTAwMDdFQzEwIC8qIEdyb3VwU2Vzc2lvbk5vdGlmaWVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gR3JvdXBTZXNzaW9uTm90aWZpZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNERjFCOTE0MjY2RjM5NUYwMDA3RUMxMCAvKiBHcm91cFNlc3Npb25Ob3RpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcm91cFNlc3Npb25Ob3RpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRTExQUQ0RjFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmcubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb2RlU2lnbmluZy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UxMUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENv
ZGVTaWduaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTaWduaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMUEwQkQwMUE0OEU2QzYwMDU0RUY3
NCAvKiBUQ0NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENDU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTk5LDYgKzcwMDcsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDREYxN0M5MzI2MEQzQjUyMDBGMEE0
RTggLyogQ29vcmRpbmF0b3IgKi8sCisJCQkJQ0RGMUI5MEMyNjZGMzk1RTAwMDdFQzEwIC8qIEdy
b3VwQWN0aXZpdGllcyAqLywKIAkJCQk1N0ZEMzE2QjIyQjMzNjdFMDA4RDBFOEIgLyogU09BdXRo
b3JpemF0aW9uICovLAogCQkJCTk5QzgxRDU1MUMyMERGQkUwMDVDNEM4MiAvKiBBdXRvbWF0aW9u
Q2xpZW50LmggKi8sCiAJCQkJOTlDODFENTYxQzIwREZCRTAwNUM0QzgyIC8qIEF1dG9tYXRpb25D
bGllbnQubW0gKi8sCkBAIC0xMTQ2NCw2ICsxMTQ3MywyMSBAQAogCQkJcGF0aCA9IHVzci9sb2Nh
bC9pbmNsdWRlL1dlYktpdEFkZGl0aW9uczsKIAkJCXNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7CiAJCX07CisJCUNERjFCOTBDMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRp
ZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUNERjFC
OTEyMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oICovLAor
CQkJCUNERjFCOTBGMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRv
ci5tbSAqLywKKwkJCQlDREYxQjkwRTI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uLmgg
Ki8sCisJCQkJQ0RGMUI5MTEyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwU2Vzc2lvbi5tbSAqLywK
KwkJCQlDREYxQjkxNDI2NkYzOTVGMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uTm90aWZpZXIuaCAq
LywKKwkJCQlDREYxQjkxMzI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBTZXNzaW9uTm90aWZpZXIu
bW0gKi8sCisJCQkJQ0RGMUI5MTAyNjZGMzk1RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLmgg
Ki8sCisJCQkJQ0RGMUI5MEQyNjZGMzk1RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0
ICovLAorCQkJKTsKKwkJCXBhdGggPSBHcm91cEFjdGl2aXRpZXM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQlDRTFBMEJDQTFBNDhFNkM2MDA1NEVGNzQgLyogc3BpICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjY4LDExICsxMzI5
Miw5IEBACiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gQ0Q5NTQ5M0IyNjE1OTAwNDAwODM3MkQ5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJXZWJLaXRTd2lmdCIgKi87CiAJCQlidWlsZFBoYXNlcyA9
ICgKLQkJCQlDREYxN0NCRTI2MERBRDFCMDBGMEE0RTggLyogQ29weSBBZGRpdGlvbmFsIFNvdXJj
ZXMgKi8sCiAJCQkJQ0Q5NTQ5MzEyNjE1OTAwNDAwODM3MkQ5IC8qIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q5NTQ5MzIyNjE1OTAwNDAwODM3MkQ5IC8qIFNvdXJjZXMgKi8sCiAJCQkJQ0Q5NTQ5MzMyNjE1
OTAwNDAwODM3MkQ5IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJQ0Q5NTQ5NDIyNjE1OTBFRTAwODM3
MkQ5IC8qIENvcHkgT2JqQyBJbnRlcmZhY2UgSGVhZGVyICovLAogCQkJKTsKIAkJCWJ1aWxkUnVs
ZXMgPSAoCiAJCQkpOwpAQCAtMTM5NTQsNTAgKzEzOTc2LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9i
aW4vc2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJTY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNl
cy5zaFxuIjsKIAkJfTsKLQkJQ0Q5NTQ5NDIyNjE1OTBFRTAwODM3MkQ5IC8qIENvcHkgT2JqQyBJ
bnRlcmZhY2UgSGVhZGVyICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNl
OwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsK
LQkJCWlucHV0RmlsZUxpc3RQYXRocyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJ
CSIkKERFUklWRURfU09VUkNFU19ESVIpLyQoU1dJRlRfT0JKQ19JTlRFUkZBQ0VfSEVBREVSX05B
TUUpIiwKLQkJCSk7Ci0JCQluYW1lID0gIkNvcHkgT2JqQyBJbnRlcmZhY2UgSGVhZGVyIjsKLQkJ
CW91dHB1dEZpbGVMaXN0UGF0aHMgPSAoCi0JCQkpOwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJ
IiQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZS8kKFRBUkdFVF9OQU1FKS8k
KFNXSUZUX09CSkNfSU5URVJGQUNFX0hFQURFUl9OQU1FKSIsCi0JCQkpOwotCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwot
CQkJc2hlbGxTY3JpcHQgPSAiaWYgW1sgXCIkV0tfSEFWRV9DT09SRElOQVRPUlwiID09IFwiWUVT
XCIgXV1cbnRoZW5cbiAgICBkaXR0byBcIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vJHtTV0lGVF9P
QkpDX0lOVEVSRkFDRV9IRUFERVJfTkFNRX1cIiBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS91c3Iv
bG9jYWwvaW5jbHVkZS8ke1RBUkdFVF9OQU1FfS8ke1NXSUZUX09CSkNfSU5URVJGQUNFX0hFQURF
Ul9OQU1FfVwiXG5maVxuIjsKLQkJfTsKLQkJQ0RGMTdDQkUyNjBEQUQxQjAwRjBBNEU4IC8qIENv
cHkgQWRkaXRpb25hbCBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCWlucHV0RmlsZUxpc3RQYXRocyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0g
KAotCQkJCSIkKFNES19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9XS0Nv
b3JkaW5hdG9yLmgiLAotCQkJCSIkKFNES19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFk
ZGl0aW9ucy9XS0Nvb3JkaW5hdG9yLm1tIiwKLQkJCQkiJChTREtfRElSKS91c3IvbG9jYWwvaW5j
bHVkZS9XZWJLaXRBZGRpdGlvbnMvV0tHcm91cFNlc3Npb24uc3dpZnQiLAotCQkJKTsKLQkJCW5h
bWUgPSAiQ29weSBBZGRpdGlvbmFsIFNvdXJjZXMiOwotCQkJb3V0cHV0RmlsZUxpc3RQYXRocyA9
ICgKLQkJCSk7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIp
L3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9XS0Nvb3JkaW5hdG9yLmgiLAotCQkJ
CSIkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25z
L1dLQ29vcmRpbmF0b3IubW0iLAotCQkJCSIkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2Fs
L2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dLR3JvdXBTZXNzaW9uLnN3aWZ0IiwKLQkJCSk7Ci0J
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9
IC9iaW4vYmFzaDsKLQkJCXNoZWxsU2NyaXB0ID0gInNldCAtZVxuXG5SRUxBVElWRV9TT1VSQ0Vf
UEFUSD1cInVzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9uc1wiXG5TT1VSQ0VfUEFUSD1c
IiRTREtfRElSLyRSRUxBVElWRV9TT1VSQ0VfUEFUSFwiXG5ERVNUSU5BVElPTl9QQVRIPVwiJEJV
SUxUX1BST0RVQ1RTX0RJUi8kUkVMQVRJVkVfU09VUkNFX1BBVEhcIlxuXG5mb3IgU09VUkNFIGlu
IFdLQ29vcmRpbmF0b3IuaCBXS0Nvb3JkaW5hdG9yLm1tIFdLR3JvdXBTZXNzaW9uLnN3aWZ0OyBk
b1xuICAgIGlmIFtbIFwiJFNPVVJDRV9QQVRILyRTT1VSQ0VcIiAtbnQgXCIkREVTVElOQVRJT05f
UEFUSC8kU09VUkNFXCIgXV07IHRoZW5cbiAgICAgICAgZGl0dG8gXCIkU09VUkNFX1BBVEgvJFNP
VVJDRVwiIFwiJERFU1RJTkFUSU9OX1BBVEgvJFNPVVJDRVwiXG4gICAgZmlcbmRvbmVcbiI7Ci0J
CX07CiAJCUUxQUMyRTJDMjBGN0I5NTgwMEIwODk3RCAvKiBVbmxvY2sgS2V5Y2hhaW4gKi8gPSB7
CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwpAQCAtMTQ1NzEsNyArMTQ1NDksNyBAQAogCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMg
PSAoCi0JCQkJQ0Q5NTQ5NDMyNjE1OTE3QjAwODM3MkQ5IC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0RGMUI5MTUyNjZGMzk2QTAwMDdFQzEwIC8qIFdLR3JvdXBT
ZXNzaW9uLnN3aWZ0IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430906</attachid>
            <date>2021-06-08 16:14:12 -0700</date>
            <delta_ts>2021-06-09 10:05:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226757-20210608161411.patch</filename>
            <type>text/plain</type>
            <size>65474</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRjMmE3NzY0OGU4NGJhODlj
NmVkODFlOGMwOWUwZjFlZTUwMDBjOWMuLjdmZDg1ZDEyOGU5NmJiOWI2Y2M2YTY5Y2QxNWJjOTIz
YzM5ZDZkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMDYtMDcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVcHN0cmVhbSBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2NzU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgYSBHcm91cEFj
dGl2aXRpZXMtYmFzZWQgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IuCisKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBpbml0
V2l0aFBhcmVudDpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRl
bGVnYXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQbGF5Q29tbWFuZDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQYXVzZUNvbW1hbmQ6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0
ZSBwbGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlU2Vla0NvbW1hbmQ6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBw
bGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlQnVmZmVyaW5nQ29tbWFuZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVnYXRl
IHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQ6XSk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6R3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGlu
YXRvcjo6fkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6R3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpqb2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmxlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlZWtUbyk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNldFRyYWNrKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBvc2l0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBsYXliYWNr
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0
b3I6OnRyYWNrSWRlbnRpZmllckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvcjo6aXNzdWVQbGF5Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBhdXNlQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVNlZWtDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5n
Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpp
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9uOjpncm91cFNlc3Npb24pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lv
bi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246Okdyb3VwQWN0
aXZpdGllc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Ojp+R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZp
dGllc1Nlc3Npb246OmpvaW4pOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNz
aW9uOjpsZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OnN0
YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6dXVp
ZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmZhbGxi
YWNrVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6
YWRkU3RhdGVDaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGll
c1Nlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFN3aWZ0TGli
cmFyeSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
c2hhcmVkTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Tm90aWZpZXI6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcik6CisgICAgICAgIChXZWJL
aXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6c2Vzc2lvblN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6YWRkV2Vi
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
cmVtb3ZlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25O
b3RpZmllcjo6d2ViUGFnZVVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXI6Omhhc1Nlc3Npb25Gb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnRha2VTZXNzaW9uRm9yVVJMKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91
cFNlc3Npb24uc3dpZnQ6IEFkZGVkLgorICAgICAgICAoV0tVUkxBY3Rpdml0eVdyYXBwZXIudXJs
QWN0aXZpdHkpOgorICAgICAgICAoV0tVUkxBY3Rpdml0eVdyYXBwZXIuZmFsbGJhY2tVUkwpOgor
ICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmdyb3VwU2Vzc2lvbik6CisgICAgICAgIChX
S0dyb3VwU2Vzc2lvbldyYXBwZXIuY2FuY2VsbGFibGVzKToKKyAgICAgICAgKFdLR3JvdXBTZXNz
aW9uV3JhcHBlci5hY3Rpdml0eSk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIudXVp
ZCk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIud3JhcHBlclNlc3Npb25TdGF0ZShf
OikpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLnN0YXRlKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uV3JhcHBlci5uZXdBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKFdLR3Jv
dXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXS0dyb3Vw
U2Vzc2lvbldyYXBwZXIuam9pbik6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIubGVh
dmUpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmNvb3JkaW5hdGUoXzopKToKKyAg
ICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5hY3Rpdml0eUNoYW5nZWQoXzopKToKKyAgICAg
ICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5nZWQoXzopKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uT2JzZXJ2ZXIubmV3U2Vzc2lvbkNhbGxiYWNrKToKKyAgICAgICAgKFdLR3Jv
dXBTZXNzaW9uT2JzZXJ2ZXIuY2FuY2VsbGFibGVzKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9u
T2JzZXJ2ZXIucmVjaWV2ZWRTZXNzaW9uKF86KSk6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjptX2xpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDUtMjEgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjc2OTkzKTogNSBUZXN0V2ViS2l0QVBJ
LkF1ZGlvUm91dGluZ0FyYml0cmF0aW9uIChhcGktdGVzdHMpIGFyZSBjb25zdGFudCBmYWlsdXJl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGIxNDgwMTNjOTA0NjVmOTMyZmM2YWQ5NGIxZTdh
Zjk0OTQxMjM4YzkuLjg3MGUzNTFlZmI2ZmMwOTUwODk1MjZhM2Q1NDBmNWMwMzk0ZDNhMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTM3Myw2ICszNzMsMTAgQEAgVUlQcm9jZXNzL0F1dG9t
YXRpb24vaW9zL1dlYkF1dG9tYXRpb25TZXNzaW9uSU9TLm1tCiAKIFVJUHJvY2Vzcy9BdXRvbWF0
aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQogCitVSVByb2Nlc3MvQ29jb2EvR3Jv
dXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tCitVSVByb2Nlc3MvQ29j
b2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb24ubW0KK1VJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tCisK
IFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0KIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhv
cml6YXRpb25TZXNzaW9uLm1tCiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGly
ZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTQ1ZmE1MTlmOWQ1YjBjMjNjNjU1
MTQ2MDQ1MDFhNzY1MGU3NTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgK
QEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKwor
I2luY2x1ZGUgIkdyb3VwQWN0aXZpdGllc1Nlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVNlc3Np
b25Db29yZGluYXRvclByb3h5UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorCitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3I7CitP
QkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZDsKK09C
SkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFuZDsKK09C
SkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kOworT0JK
Q19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZDsK
K09CSkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0
aW9uQ29tbWFuZDsKK09CSkNfQ0xBU1MgV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3IgZmluYWwgOiBwdWJsaWMgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I+IGNyZWF0ZShHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Jik7CisgICAgfkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKCk7CisKKyAgICB1c2luZyBDb21t
YW5kQ29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKCk+OworICAgIHZvaWQgaXNzdWVQ
bGF5Q29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGxheUNvbW1hbmQgKiwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgaXNzdWVQYXVzZUNvbW1hbmQo
QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFuZCAqLCBDb21tYW5kQ29t
cGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBpc3N1ZVNlZWtDb21tYW5kKEFWRGVsZWdhdGlu
Z1BsYXliYWNrQ29vcmRpbmF0b3JTZWVrQ29tbWFuZCAqLCBDb21tYW5kQ29tcGxldGlvbkhhbmRs
ZXImJik7CisgICAgdm9pZCBpc3N1ZUJ1ZmZlcmluZ0NvbW1hbmQoQVZEZWxlZ2F0aW5nUGxheWJh
Y2tDb29yZGluYXRvckJ1ZmZlcmluZ0NvbW1hbmQgKiwgQ29tbWFuZENvbXBsZXRpb25IYW5kbGVy
JiYpOworICAgIHZvaWQgaXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQoQVZEZWxlZ2F0aW5n
UGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCAqKTsKKworcHJpdmF0
ZToKKyAgICBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Jik7CisKKyAgICB2b2lkIHNlc3Npb25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbiYsIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlKTsKKworICAgIHVzaW5nIENv
b3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJik+OworICAgIFN0cmluZyBpZGVudGlm
aWVyKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhh
bmRsZXImJikgZmluYWw7CisgICAgdm9pZCBsZWF2ZSgpIGZpbmFsOworICAgIHZvaWQgc2Vla1Rv
KGRvdWJsZSwgQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lk
IHBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHBh
dXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBzZXRU
cmFjayhjb25zdCBTdHJpbmcmLCBDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFs
OworICAgIHZvaWQgcG9zaXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpNZWRpYVBvc2l0aW9uU3RhdGU+JikgZmluYWw7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hh
bmdlZChXZWJDb3JlOjpNZWRpYVNlc3Npb25SZWFkeVN0YXRlKSBmaW5hbDsKKyAgICB2b2lkIHBs
YXliYWNrU3RhdGVDaGFuZ2VkKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGUpIGZp
bmFsOworICAgIHZvaWQgdHJhY2tJZGVudGlmaWVyQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFJlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0
YWluUHRyPFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsK
KyAgICBSZXRhaW5QdHI8QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvcj4gbV9wbGF5YmFj
a0Nvb3JkaW5hdG9yOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpNZWRpYVBvc2l0aW9u
U3RhdGU+IG1fcG9zaXRpb25TdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvblJlYWR5U3RhdGU+IG1fcmVhZHlTdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6Ok1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGU+IG1fcGxheWJhY2tTdGF0ZTsKKworICAgIEdy
b3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlQ2hhbmdlT2JzZXJ2ZXIgbV9zdGF0ZUNoYW5nZU9i
c2VydmVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFj
dGl2aXRpZXNDb29yZGluYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2Q3OWYxNjEwNTZhMDEwYTRlYWM1
ODJmZDI3ODY4ZjM4OGE2MjExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1t
CkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NF
U1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2ltcG9ydCAi
V0tHcm91cFNlc3Npb24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorCisjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9u
U29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorCitAaW50
ZXJmYWNlIFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSA6IE5TT2JqZWN0PEFW
UGxheWJhY2tDb29yZGluYXRvclBsYXliYWNrQ29udHJvbERlbGVnYXRlPiB7CisgICAgV2Vha1B0
cjxXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yPiBfcGFyZW50OworfQorLSAoaWQp
aW5pdFdpdGhQYXJlbnQ6KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3ImKXBhcmVu
dDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JE
ZWxlZ2F0ZQorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29v
cmRpbmF0b3ImKXBhcmVudAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3BhcmVudCA9IG1ha2VXZWFrUHRyKHBh
cmVudCk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0odm9pZClwbGF5YmFja0Nvb3JkaW5hdG9y
OihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZGlkSXNzdWVQ
bGF5Q29tbWFuZDooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBsYXlDb21tYW5kICop
cGxheUNvbW1hbmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25I
YW5kbGVyIHsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
eworICAgICAgICBpZiAoX3BhcmVudCkgeworICAgICAgICAgICAgX3BhcmVudC0+aXNzdWVQbGF5
Q29tbWFuZChwbGF5Q29tbWFuZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCistKHZvaWQpcGxheWJh
Y2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yIGRpZElzc3VlUGF1c2VDb21tYW5kOihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9y
UGF1c2VDb21tYW5kICopcGF1c2VDb21tYW5kIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciB7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFfcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBfcGFyZW50LT5pc3N1ZVBhdXNlQ29tbWFuZChwYXVzZUNvbW1hbmQsIFtj
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQor
CistKHZvaWQpcGxheWJhY2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGlu
YXRvciAqKWNvb3JkaW5hdG9yIGRpZElzc3VlU2Vla0NvbW1hbmQ6KEFWRGVsZWdhdGluZ1BsYXli
YWNrQ29vcmRpbmF0b3JTZWVrQ29tbWFuZCAqKXNlZWtDb21tYW5kIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciB7CisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFfcGFyZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBfcGFyZW50LT5pc3N1ZVNlZWtDb21tYW5kKHNlZWtD
b21tYW5kLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKworLSh2b2lkKXBsYXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXli
YWNrQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRJc3N1ZUJ1ZmZlcmluZ0NvbW1hbmQ6KEFW
RGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JCdWZmZXJpbmdDb21tYW5kICopYnVmZmVyaW5n
Q29tbWFuZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIgeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Cisg
ICAgICAgIGlmICghX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX3BhcmVu
dC0+aXNzdWVCdWZmZXJpbmdDb21tYW5kKGJ1ZmZlcmluZ0NvbW1hbmQsIFtjb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCistKHZvaWQpcGxh
eWJhY2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3Jk
aW5hdG9yIGRpZElzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kOihBVkRlbGVnYXRpbmdQbGF5
YmFja0Nvb3JkaW5hdG9yUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kICopcHJlcGFyZVRyYW5zaXRp
b25Db21tYW5kIHsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBpZiAoX3BhcmVudCkKKyAgICAgICAgICAgIF9wYXJlbnQtPmlzc3VlUHJl
cGFyZVRyYW5zaXRpb25Db21tYW5kKHByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk7CisgICAgfSk7
Cit9CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgUEFMOwor
CitSZWY8R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I+IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5h
dG9yOjpjcmVhdGUoR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbiYgc2Vzc2lvbikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihzZXNzaW9uKSk7Cit9
CisKK0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRv
cihHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiBzZXNzaW9uKQorICAgIDogbV9zZXNzaW9uKHNlc3Np
b24pCisgICAgLCBtX2RlbGVnYXRlKGFkb3B0TlMoW1tXS0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5h
dG9yRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUGFyZW50Oip0aGlzXSkpCisgICAgLCBtX3BsYXli
YWNrQ29vcmRpbmF0b3IoYWRvcHROUyhbUEFMOjphbGxvY0FWRGVsZWdhdGluZ1BsYXliYWNrQ29v
cmRpbmF0b3JJbnN0YW5jZSgpIGluaXRXaXRoUGxheWJhY2tDb250cm9sRGVsZWdhdGU6bV9kZWxl
Z2F0ZS5nZXQoKV0pKQorICAgICwgbV9zdGF0ZUNoYW5nZU9ic2VydmVyKFt0aGlzXSAoYXV0byYg
c2Vzc2lvbiwgYXV0byBzdGF0ZSkgeyBzZXNzaW9uU3RhdGVDaGFuZ2VkKHNlc3Npb24sIHN0YXRl
KTsgfSkKK3sKKyAgICBbc2Vzc2lvbi5ncm91cFNlc3Npb24oKSBjb29yZGluYXRlV2l0aENvb3Jk
aW5hdG9yOm1fcGxheWJhY2tDb29yZGluYXRvci5nZXQoKV07CisgICAgc2Vzc2lvbi5hZGRTdGF0
ZUNoYW5nZU9ic2VydmVyKG1fc3RhdGVDaGFuZ2VPYnNlcnZlcik7Cit9CisKK0dyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yOjp+R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IoKQoreworICAgIG1f
c2Vzc2lvbi0+Z3JvdXBTZXNzaW9uKCkubmV3QWN0aXZpdHlDYWxsYmFjayA9IG5pbDsKKyAgICBt
X3Nlc3Npb24tPmdyb3VwU2Vzc2lvbigpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbmlsOworfQor
Cit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXNzaW9uU3RhdGVDaGFuZ2VkKGNv
bnN0IEdyb3VwQWN0aXZpdGllc1Nlc3Npb24mIHNlc3Npb24sIEdyb3VwQWN0aXZpdGllc1Nlc3Np
b246OlN0YXRlIHN0YXRlKQoreworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVNlc3Npb25Db29y
ZGluYXRvclN0YXRlOjpXYWl0aW5nKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZp
dGllc1Nlc3Npb246OlN0YXRlOjpXYWl0aW5nKSwgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3Rh
dGU6OldhaXRpbmcgIT0gV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRpbmciKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6
Sm9pbmVkKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0
YXRlOjpKb2luZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Sm9pbmVkICE9IFdL
R3JvdXBTZXNzaW9uU3RhdGVKb2luZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0
PHNpemVfdD4oTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Q2xvc2VkKSA9PSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlOjpJbnZhbGlkYXRlZCks
ICJNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpDbG9zZWQgIT0gV0tHcm91cFNlc3Npb25T
dGF0ZUludmFsaWRhdGVkIik7CisgICAgY2xpZW50KCktPmNvb3JkaW5hdG9yU3RhdGVDaGFuZ2Vk
KHN0YXRpY19jYXN0PE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU+KHN0YXRlKSk7Cit9CisK
K1N0cmluZyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2Vzc2lvbi0+dXVpZCgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGll
c0Nvb3JkaW5hdG9yOjpqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxsYmFj
aykKK3sKKyAgICBtX3Nlc3Npb24tPmpvaW4oKTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpsZWF2ZSgpCit7CisgICAg
bV9zZXNzaW9uLT5sZWF2ZSgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
OjpzZWVrVG8oZG91YmxlIHRpbWUsIENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxs
YmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVTZWVrVG9UaW1l
OkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCAxMDAwKSBvcHRpb25zOjBdOworICAgIGNhbGxi
YWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6
OnBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIFtt
X3BsYXliYWNrQ29vcmRpbmF0b3IgY29vcmRpbmF0ZVJhdGVDaGFuZ2VUb1JhdGU6MSBvcHRpb25z
OjBdOworICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3I6OnBhdXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxs
YmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVSYXRlQ2hhbmdl
VG9SYXRlOjAgb3B0aW9uczowXTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworfQorCit2
b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXRUcmFjayhjb25zdCBTdHJpbmcmIHRy
YWNrLCBDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRv
cjo6cG9zaXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxNZWRpYVBvc2l0aW9u
U3RhdGU+JiBwb3NpdGlvblN0YXRlKQoreworICAgIGlmIChtX3Bvc2l0aW9uU3RhdGUgPT0gcG9z
aXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcG9zaXRpb25TdGF0ZSA9IHBvc2l0
aW9uU3RhdGU7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3Rh
dGVDaGFuZ2VkKE1lZGlhU2Vzc2lvblJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAo
bV9yZWFkeVN0YXRlID09IHJlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlYWR5
U3RhdGUgPSByZWFkeVN0YXRlOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
OjpwbGF5YmFja1N0YXRlQ2hhbmdlZChNZWRpYVNlc3Npb25QbGF5YmFja1N0YXRlIHBsYXliYWNr
U3RhdGUpCit7CisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBwbGF5YmFja1N0YXRlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9wbGF5YmFja1N0YXRlID0gcGxheWJhY2tTdGF0ZTsKK30KKwor
dm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6dHJhY2tJZGVudGlmaWVyQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIgIT0gU3RyaW5n
KFttX3BsYXliYWNrQ29vcmRpbmF0b3IgY3VycmVudEl0ZW1JZGVudGlmaWVyXSkpCisgICAgICAg
IFttX3BsYXliYWNrQ29vcmRpbmF0b3IgdHJhbnNpdGlvblRvSXRlbVdpdGhJZGVudGlmaWVyOmlk
ZW50aWZpZXIgcHJvcG9zaW5nSW5pdGlhbFRpbWluZ0Jhc2VkT25UaW1lYmFzZTpuaWxdOworfQor
Cit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBsYXlDb21tYW5kKEFWRGVs
ZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZCAqcGxheUNvbW1hbmQsIENvbW1h
bmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIGlmICghY2xpZW50KCkpIHsK
KyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBpdGVtVGltZTsKKyAgICBpZiAoQ01USU1FX0lTX05VTUVSSUMocGxh
eUNvbW1hbmQuaXRlbVRpbWUpKQorICAgICAgICBpdGVtVGltZSA9IENNVGltZUdldFNlY29uZHMo
cGxheUNvbW1hbmQuaXRlbVRpbWUpOworICAgIHN0ZDo6b3B0aW9uYWw8TW9ub3RvbmljVGltZT4g
aG9zdFRpbWU7CisgICAgaWYgKENNVElNRV9JU19OVU1FUklDKHBsYXlDb21tYW5kLmhvc3RDbG9j
a1RpbWUpKQorICAgICAgICBob3N0VGltZSA9IE1vbm90b25pY1RpbWU6OmZyb21NYWNoQWJzb2x1
dGVUaW1lKENNQ2xvY2tDb252ZXJ0SG9zdFRpbWVUb1N5c3RlbVVuaXRzKHBsYXlDb21tYW5kLmhv
c3RDbG9ja1RpbWUpKTsKKworICAgIGNsaWVudCgpLT5wbGF5U2Vzc2lvbihpdGVtVGltZSwgaG9z
dFRpbWUsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYm9vbCkgeworICAgICAgICBj
YWxsYmFjaygpOworICAgIH0pOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
Ojppc3N1ZVBhdXNlQ29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGF1c2VD
b21tYW5kICpwYXVzZUNvbW1hbmQsIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNr
KQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNsaWVudCgpLT5wYXVzZVNlc3Npb24oW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldIChib29sKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlU2Vla0NvbW1hbmQo
QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kICpzZWVrQ29tbWFuZCwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFjbGllbnQo
KSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFDTVRJTUVfSVNfTlVNRVJJQyhzZWVrQ29tbWFuZC5pdGVtVGltZSkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjbGllbnQoKS0+c2Vla1Nlc3Npb25Ub1RpbWUoQ01UaW1lR2V0U2Vj
b25kcyhzZWVrQ29tbWFuZC5pdGVtVGltZSksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSAoYm9vbCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5nQ29tbWFuZChBVkRl
bGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqLCBDb21tYW5kQ29t
cGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVz
Q29vcmRpbmF0b3I6Omlzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kKEFWRGVsZWdhdGluZ1Bs
YXliYWNrQ29vcmRpbmF0b3JQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQgKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb24u
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFj
dGl2aXRpZXNTZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE2MzYyYjg5MDEzYTU1YjE0YTgyNmEzODY3
OWQ3Y2ZjZmQwMWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uLmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NF
U1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2luY2x1ZGUg
PHd0Zi9PYnNlcnZlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CisKK09CSkNfQ0xBU1MgV0tHcm91cFNl
c3Npb247CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHcm91cEFjdGl2aXRpZXNTZXNz
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbj4geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbj4gY3JlYXRlKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7CisgICAg
fkdyb3VwQWN0aXZpdGllc1Nlc3Npb24oKTsKKworICAgIHZvaWQgam9pbigpOworICAgIHZvaWQg
bGVhdmUoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgV2Fp
dGluZywKKyAgICAgICAgSm9pbmVkLAorICAgICAgICBJbnZhbGlkYXRlZCwKKyAgICB9OworICAg
IFN0YXRlIHN0YXRlKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdXVpZCgpIGNvbnN0OworICAgIFVS
TCBmYWxsYmFja1VSTCgpIGNvbnN0OworCisgICAgdXNpbmcgU3RhdGVDaGFuZ2VPYnNlcnZlciA9
IFdURjo6T2JzZXJ2ZXI8dm9pZChjb25zdCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiwgU3RhdGUp
PjsKKyAgICB2b2lkIGFkZFN0YXRlQ2hhbmdlT2JzZXJ2ZXIoY29uc3QgU3RhdGVDaGFuZ2VPYnNl
cnZlciYpOworCisgICAgdXNpbmcgRmFsbGJhY2tVUkxPYnNlcnZlciA9IFdURjo6T2JzZXJ2ZXI8
dm9pZChjb25zdCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiwgVVJMKT47CisgICAgdm9pZCBhZGRG
YWxsYmFja1VSTE9ic2VydmVyKGNvbnN0IEZhbGxiYWNrVVJMT2JzZXJ2ZXImKTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOworICAg
IGZyaWVuZCBjbGFzcyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjsKKyAgICBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7CisgICAgV0tHcm91cFNl
c3Npb24qIGdyb3VwU2Vzc2lvbigpIHsgcmV0dXJuIG1fZ3JvdXBTZXNzaW9uLmdldCgpOyB9CisK
KyAgICBSZXRhaW5QdHI8V0tHcm91cFNlc3Npb24+IG1fZ3JvdXBTZXNzaW9uOworICAgIFdlYWtI
YXNoU2V0PFN0YXRlQ2hhbmdlT2JzZXJ2ZXI+IG1fc3RhdGVDaGFuZ2VPYnNlcnZlcnM7CisgICAg
V2Vha0hhc2hTZXQ8RmFsbGJhY2tVUkxPYnNlcnZlcj4gbV9mYWxsYmFja1VSTE9ic2VydmVyczsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNz
aW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0YjI3NjcxNzkzOWZkYWJkZWQ0MzkyY2JkNzBlYjUyNjU5MzRh
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91
cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5tbQpAQCAtMCwwICsxLDEwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhB
VkUoR1JPVVBfQUNUSVZJVElFUykKKworI2ltcG9ydCAiV0tHcm91cFNlc3Npb24uaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1JlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPiBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uOjpjcmVhdGUoUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24p
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbihXVEZN
b3ZlKHNlc3Npb24pKSk7Cit9CisKK0dyb3VwQWN0aXZpdGllc1Nlc3Npb246Okdyb3VwQWN0aXZp
dGllc1Nlc3Npb24oUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24pCisgICAgOiBt
X2dyb3VwU2Vzc2lvbihXVEZNb3ZlKHNlc3Npb24pKQoreworICAgIG1fZ3JvdXBTZXNzaW9uLmdl
dCgpLm5ld0FjdGl2aXR5Q2FsbGJhY2sgPSBbdGhpc10gKFdLVVJMQWN0aXZpdHkgKmFjdGl2aXR5
KSB7CisgICAgICAgIG1fZmFsbGJhY2tVUkxPYnNlcnZlcnMuZm9yRWFjaChbdGhpcywgYWN0aXZp
dHldIChhdXRvJiBvYnNlcnZlcikgeworICAgICAgICAgICAgb2JzZXJ2ZXIoKnRoaXMsIGFjdGl2
aXR5LmZhbGxiYWNrVVJMKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIG1fZ3JvdXBTZXNz
aW9uLmdldCgpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gW3RoaXNdIChXS0dyb3VwU2Vzc2lvblN0
YXRlIHN0YXRlKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihT
dGF0ZTo6V2FpdGluZykgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRl
V2FpdGluZyksICJNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpXYWl0aW5nICE9IFdLR3Jv
dXBTZXNzaW9uU3RhdGVXYWl0aW5nIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihTdGF0ZTo6Sm9pbmVkKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFdLR3JvdXBT
ZXNzaW9uU3RhdGVKb2luZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Sm9pbmVk
ICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlOjpJbnZhbGlkYXRlZCkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRp
bmF0b3JTdGF0ZTo6Q2xvc2VkICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVJbnZhbGlkYXRlZCIpOwor
ICAgICAgICBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXJzLmZvckVhY2goW3RoaXMsIHN0YXRlXSAoYXV0
byYgb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIG9ic2VydmVyKCp0aGlzLCBzdGF0aWNfY2FzdDxT
dGF0ZT4oc3RhdGUpKTsKKyAgICAgICAgfSk7CisgICAgfTsKK30KKworR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbjo6fkdyb3VwQWN0aXZpdGllc1Nlc3Npb24oKQoreworICAgIG1fZ3JvdXBTZXNzaW9u
LmdldCgpLm5ld0FjdGl2aXR5Q2FsbGJhY2sgPSBuaWw7CisgICAgbV9ncm91cFNlc3Npb24uZ2V0
KCkuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBuaWw7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbjo6am9pbigpCit7CisgICAgW21fZ3JvdXBTZXNzaW9uIGpvaW5dOworfQorCit2b2lk
IEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmxlYXZlKCkKK3sKKyAgICBbbV9ncm91cFNlc3Npb24g
bGVhdmVdOworfQorCithdXRvIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OnN0YXRlKCkgY29uc3Qg
LT4gU3RhdGUKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6
OldhaXRpbmcpID09IHN0YXRpY19jYXN0PHNpemVfdD4oV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRp
bmcpLCAiU3RhdGU6OldhaXRpbmcgIT0gV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRpbmciKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6OkpvaW5lZCkgPT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkKSwgIlN0YXRlOjpKb2lu
ZWQgIT0gV0tHcm91cFNlc3Npb25TdGF0ZUpvaW5lZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6SW52YWxpZGF0ZWQpID09IHN0YXRpY19jYXN0PHNpemVf
dD4oV0tHcm91cFNlc3Npb25TdGF0ZUludmFsaWRhdGVkKSwgIlN0YXRlOjpJbnZhbGlkYXRlZCAh
PSBXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQiKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RhdGU+KFttX2dyb3VwU2Vzc2lvbiBzdGF0ZV0pOworfQorCitTdHJpbmcgR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbjo6dXVpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2dyb3VwU2Vzc2lv
biB1dWlkXS5VVUlEU3RyaW5nOworfQorCitVUkwgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6ZmFs
bGJhY2tVUkwoKSBjb25zdAoreworICAgIHJldHVybiBbbV9ncm91cFNlc3Npb24gYWN0aXZpdHld
LmZhbGxiYWNrVVJMOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmFkZFN0YXRl
Q2hhbmdlT2JzZXJ2ZXIoY29uc3QgU3RhdGVDaGFuZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCit7Cisg
ICAgbV9zdGF0ZUNoYW5nZU9ic2VydmVycy5hZGQob2JzZXJ2ZXIpOworfQorCit2b2lkIEdyb3Vw
QWN0aXZpdGllc1Nlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIoY29uc3QgRmFsbGJhY2tV
UkxPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgbV9mYWxsYmFja1VSTE9ic2VydmVycy5hZGQo
b2JzZXJ2ZXIpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3Rp
Zmllci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dy
b3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNWMwNGM1MWNlYWQz
MmFiZjkwMjllYjFkYTlhMjdmOTU4MjkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lv
bk5vdGlmaWVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNU
SVZJVElFUykKKworI2luY2x1ZGUgIkdyb3VwQWN0aXZpdGllc1Nlc3Npb24uaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBXS0dyb3VwU2Vzc2lvbk9ic2VydmVyOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R3JvdXBBY3Rpdml0
aWVzU2Vzc2lvbk5vdGlmaWVyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllciYgc2hhcmVkTm90
aWZpZXIoKTsKKworICAgIGJvb2wgaGFzU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmKTsKKyAgICBS
ZWZQdHI8R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbj4gdGFrZVNlc3Npb25Gb3JVUkwoY29uc3QgVVJM
Jik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uKGNvbnN0IEdyb3VwQWN0aXZpdGllc1Nlc3Npb24m
KTsKKworICAgIHZvaWQgYWRkV2ViUGFnZShXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIHJlbW92
ZVdlYlBhZ2UoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCB3ZWJQYWdlVVJMQ2hhbmdlZChXZWJQ
YWdlUHJveHkmKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8
R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyPjsKKyAgICBHcm91cEFjdGl2aXRpZXNTZXNz
aW9uTm90aWZpZXIoKTsKKworICAgIHZvaWQgc2Vzc2lvblN0YXRlQ2hhbmdlZChjb25zdCBHcm91
cEFjdGl2aXRpZXNTZXNzaW9uJiwgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6U3RhdGUpOworCisg
ICAgSGFzaE1hcDxVUkwsIFJlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPj4gbV9zZXNzaW9uczsK
KyAgICBSZXRhaW5QdHI8V0tHcm91cFNlc3Npb25PYnNlcnZlcj4gbV9zZXNzaW9uT2JzZXJ2ZXI7
CisgICAgV2Vha0hhc2hTZXQ8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VzOworICAgIEdyb3VwQWN0
aXZpdGllc1Nlc3Npb246OlN0YXRlQ2hhbmdlT2JzZXJ2ZXIgbV9zdGF0ZUNoYW5nZU9ic2VydmVy
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MjdlYjg1NTg3ZmZiNDE5ZDUy
ZjYzZjU4MDE0YzAyNjRjNzQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlm
aWVyLm1tCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIuaCIKKworI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisK
KyNpbXBvcnQgIldLR3JvdXBTZXNzaW9uLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKwor
I2ltcG9ydCAiV2ViS2l0U3dpZnRTb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcm91cEFj
dGl2aXRpZXNTZXNzaW9uTm90aWZpZXImIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
c2hhcmVkTm90aWZpZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXI+IG5vdGlmaWVyOworICAgIHJldHVybiBub3RpZmllcjsKK30K
KworR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Tm90aWZpZXIoKQorICAgIDogbV9zZXNzaW9uT2JzZXJ2ZXIoYWRvcHROUyhbYWxsb2NXS0dyb3Vw
U2Vzc2lvbk9ic2VydmVySW5zdGFuY2UoKSBpbml0XSkpCisgICAgLCBtX3N0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIoW3RoaXNdIChhdXRvJiBzZXNzaW9uLCBhdXRvIHN0YXRlKSB7IHNlc3Npb25TdGF0ZUNo
YW5nZWQoc2Vzc2lvbiwgc3RhdGUpOyB9KQoreworICAgIG1fc2Vzc2lvbk9ic2VydmVyLmdldCgp
Lm5ld1Nlc3Npb25DYWxsYmFjayA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSAoV0tHcm91cFNlc3Npb24gKmdyb3VwU2Vzc2lvbikgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gc2Vzc2lvbiA9IEdyb3VwQWN0
aXZpdGllc1Nlc3Npb246OmNyZWF0ZShncm91cFNlc3Npb24pOworICAgICAgICBzZXNzaW9uLT5h
ZGRTdGF0ZUNoYW5nZU9ic2VydmVyKG1fc3RhdGVDaGFuZ2VPYnNlcnZlcik7CisKKyAgICAgICAg
Zm9yIChhdXRvJiBwYWdlIDogY29weVRvVmVjdG9yKG1fd2ViUGFnZXMpKSB7CisgICAgICAgICAg
ICBpZiAocGFnZS0+bWFpbkZyYW1lKCkgJiYgcGFnZS0+bWFpbkZyYW1lKCktPnVybCgpID09IHNl
c3Npb24tPmZhbGxiYWNrVVJMKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdG9y
ID0gR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmNyZWF0ZShzZXNzaW9uKTsKKyAgICAgICAg
ICAgICAgICBwYWdlLT5jcmVhdGVNZWRpYVNlc3Npb25Db29yZGluYXRvcihXVEZNb3ZlKGNvb3Jk
aW5hdG9yKSwgW10gKGJvb2wpIHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25zLmFk
ZChzZXNzaW9uLT5mYWxsYmFja1VSTCgpLCBzZXNzaW9uLmNvcHlSZWYoKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICAgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6c2Vzc2lvbi0+ZmFsbGJhY2tVUkwoKV07
CisgICAgfTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnNlc3Np
b25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbiYgc2Vzc2lvbiwgR3Jv
dXBBY3Rpdml0aWVzU2Vzc2lvbjo6U3RhdGUgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlID09IEdy
b3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlOjpJbnZhbGlkYXRlZCkKKyAgICAgICAgbV9zZXNz
aW9ucy5yZW1vdmUoc2Vzc2lvbi5mYWxsYmFja1VSTCgpKTsKK307CisKK3ZvaWQgR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyOjphZGRXZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkK
K3sKKyAgICBBU1NFUlQoIW1fd2ViUGFnZXMuY29udGFpbnMod2ViUGFnZSkpOworICAgIG1fd2Vi
UGFnZXMuYWRkKHdlYlBhZ2UpOworCisgICAgYXV0byBmcmFtZSA9IHdlYlBhZ2UubWFpbkZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzZXNzaW9u
ID0gdGFrZVNlc3Npb25Gb3JVUkwoZnJhbWUtPnVybCgpKTsKKyAgICBpZiAoIXNlc3Npb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29vcmRpbmF0b3IgPSBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvcjo6Y3JlYXRlKCpzZXNzaW9uKTsKKyAgICB3ZWJQYWdlLmNyZWF0ZU1lZGlhU2Vz
c2lvbkNvb3JkaW5hdG9yKFdURk1vdmUoY29vcmRpbmF0b3IpLCBbXSAoYm9vbCkgeyB9KTsKK30K
Kwordm9pZCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnJlbW92ZVdlYlBhZ2UoV2Vi
UGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIEFTU0VSVChtX3dlYlBhZ2VzLmNvbnRhaW5zKHdl
YlBhZ2UpKTsKKyAgICBtX3dlYlBhZ2VzLnJlbW92ZSh3ZWJQYWdlKTsKK30KKwordm9pZCBHcm91
cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OndlYlBhZ2VVUkxDaGFuZ2VkKFdlYlBhZ2VQcm94
eSYgd2ViUGFnZSkKK3sKKyAgICBBU1NFUlQobV93ZWJQYWdlcy5jb250YWlucyh3ZWJQYWdlKSk7
CisgICAgaWYgKCFtX3dlYlBhZ2VzLmNvbnRhaW5zKHdlYlBhZ2UpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGZyYW1lID0gd2ViUGFnZS5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNlc3Npb24gPSB0YWtlU2Vzc2lvbkZvclVS
TChmcmFtZS0+dXJsKCkpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBjb29yZGluYXRvciA9IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUo
KnNlc3Npb24pOworICAgIHdlYlBhZ2UuY3JlYXRlTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IoV1RG
TW92ZShjb29yZGluYXRvciksIFtdIChib29sKSB7IH0pOworfQorCitib29sIEdyb3VwQWN0aXZp
dGllc1Nlc3Npb25Ob3RpZmllcjo6aGFzU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmIHVybCkKK3sK
KyAgICByZXR1cm4gbV9zZXNzaW9ucy5jb250YWlucyh1cmwpOworfQorCitSZWZQdHI8R3JvdXBB
Y3Rpdml0aWVzU2Vzc2lvbj4gR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOjp0YWtlU2Vz
c2lvbkZvclVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gbV9zZXNzaW9ucy50YWtl
KHVybCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ1ZGViZWM1NTlkYzA3MDc1ZTk3MzM2YjU2NjQ1NGYzYmI5MGJhOWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
V0tHcm91cFNlc3Npb24uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBXS0dyb3VwU2Vzc2lvblN0YXRlKSB7CisgICAgV0tHcm91cFNlc3Npb25T
dGF0ZVdhaXRpbmcgPSAwLAorICAgIFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQgPSAxLAorICAg
IFdLR3JvdXBTZXNzaW9uU3RhdGVJbnZhbGlkYXRlZCA9IDIsCit9OworCitAY2xhc3MgQVZQbGF5
YmFja0Nvb3JkaW5hdG9yOworQGNsYXNzIE5TVVJMOworQGNsYXNzIE5TVVVJRDsKK0BjbGFzcyBX
S0dyb3VwU2Vzc2lvbjsKK0BjbGFzcyBXS1VSTEFjdGl2aXR5OworCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitAaW50ZXJmYWNlIFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIgOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF4gX051bGxhYmxlIG5ld1Nlc3Npb25D
YWxsYmFjaykoV0tHcm91cFNlc3Npb24gKik7CistIChub25udWxsIGluc3RhbmNldHlwZSlpbml0
OworQGVuZAorCitAaW50ZXJmYWNlIFdLR3JvdXBTZXNzaW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBXS1VSTEFjdGl2aXR5ICphY3Rpdml0eTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVVUlEICp1dWlkOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0dyb3VwU2Vzc2lvblN0YXRlIHN0YXRlOwor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF4gX051bGxhYmxlIG5ld0FjdGl2aXR5
Q2FsbGJhY2spKFdLVVJMQWN0aXZpdHkgKik7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
dm9pZCAoXiBfTnVsbGFibGUgc3RhdGVDaGFuZ2VkQ2FsbGJhY2spKFdLR3JvdXBTZXNzaW9uU3Rh
dGUpOworLSAodm9pZClqb2luOworLSAodm9pZClsZWF2ZTsKKy0gKHZvaWQpY29vcmRpbmF0ZVdp
dGhDb29yZGluYXRvcjooQVZQbGF5YmFja0Nvb3JkaW5hdG9yICopcGxheWJhY2tDb29yZGluYXRv
cjsKK0BlbmQKKworQGludGVyZmFjZSBXS1VSTEFjdGl2aXR5IDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1VSTCAqIF9OdWxsYWJsZSBmYWxsYmFja1VSTDsKK0BlbmQK
KworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uc3dpZnQgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uc3dp
ZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzEyNTE1NmMxZjcyYjFlZDdlMjVjODQzODg5NjViYzc5NjlmMDE5OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0
aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5zd2lmdApAQCAtMCwwICsxLDE1MiBAQAorLy8gQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworLy8gYXJlIG1ldDoKKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisvLyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKy8vIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8v
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworLy8gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLy8gQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKy8vIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworLy8gSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisvLyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBj
YW5JbXBvcnQoR3JvdXBBY3Rpdml0aWVzKQorCitpbXBvcnQgQVZGb3VuZGF0aW9uCitpbXBvcnQg
Q29tYmluZQorQF9zcGkoU2FmYXJpKSBpbXBvcnQgR3JvdXBBY3Rpdml0aWVzCitpbXBvcnQgRm91
bmRhdGlvbgorCitAb2JqYyBwdWJsaWMgZW51bSBXS0dyb3VwU2Vzc2lvblN0YXRlIDogSW50IHsK
KyAgICBjYXNlIHdhaXRpbmcgPSAwCisgICAgY2FzZSBqb2luZWQgPSAxCisgICAgY2FzZSBpbnZh
bGlkYXRlZCA9IDIKK30KKworQG9iamMoV0tVUkxBY3Rpdml0eSkKK3B1YmxpYyBmaW5hbCBjbGFz
cyBXS1VSTEFjdGl2aXR5V3JhcHBlciA6IE5TT2JqZWN0IHsKKyAgICBwcml2YXRlIHZhciB1cmxB
Y3Rpdml0eTogVVJMQWN0aXZpdHkKKyAgICBpbml0KGFjdGl2aXR5OiBVUkxBY3Rpdml0eSkgewor
ICAgICAgICBzZWxmLnVybEFjdGl2aXR5ID0gYWN0aXZpdHkKKyAgICAgICAgc3VwZXIuaW5pdCgp
CisgICAgfQorCisgICAgQG9iamMgcHVibGljIHZhciBmYWxsYmFja1VSTDogVVJMPyB7CisgICAg
ICAgIHJldHVybiBzZWxmLnVybEFjdGl2aXR5LndlYnBhZ2VVUkwKKyAgICB9Cit9CisKK0BvYmpj
KFdLR3JvdXBTZXNzaW9uKQorcHVibGljIGZpbmFsIGNsYXNzIFdLR3JvdXBTZXNzaW9uV3JhcHBl
ciA6IE5TT2JqZWN0IHsKKyAgICBwcml2YXRlIHZhciBncm91cFNlc3Npb246IEdyb3VwU2Vzc2lv
bjxVUkxBY3Rpdml0eT4KKyAgICBwcml2YXRlIHZhciBhY3Rpdml0eVdyYXBwZXIgOiBXS1VSTEFj
dGl2aXR5V3JhcHBlcgorICAgIHByaXZhdGUgdmFyIGNhbmNlbGxhYmxlczogU2V0PEFueUNhbmNl
bGxhYmxlPiA9IFtdCisKKyAgICBpbml0KGdyb3VwU2Vzc2lvbjogR3JvdXBTZXNzaW9uPFVSTEFj
dGl2aXR5PikgeworICAgICAgICBzZWxmLmdyb3VwU2Vzc2lvbiA9IGdyb3VwU2Vzc2lvbgorICAg
ICAgICBzZWxmLmFjdGl2aXR5V3JhcHBlciA9IFdLVVJMQWN0aXZpdHlXcmFwcGVyKGFjdGl2aXR5
OiBncm91cFNlc3Npb24uYWN0aXZpdHkpCisKKyAgICAgICAgc3VwZXIuaW5pdCgpCisKKyAgICAg
ICAgc2VsZi5ncm91cFNlc3Npb24uJGFjdGl2aXR5CisgICAgICAgICAgICAuc2luayB7IFt1bm93
bmVkIHNlbGZdIGluIHNlbGYuYWN0aXZpdHlDaGFuZ2VkKGFjdGl2aXR5OiAkMCkgfQorICAgICAg
ICAgICAgLnN0b3JlKGluOiAmY2FuY2VsbGFibGVzKQorICAgICAgICBzZWxmLmdyb3VwU2Vzc2lv
bi4kc3RhdGUKKyAgICAgICAgICAgIC5zaW5rIHsgW3Vub3duZWQgc2VsZl0gaW4gc2VsZi5zdGF0
ZUNoYW5nZWQoc3RhdGU6ICQwKSB9CisgICAgICAgICAgICAuc3RvcmUoaW46ICZjYW5jZWxsYWJs
ZXMpCisgICAgfQorCisgICAgQG9iamMgcHVibGljIHZhciBhY3Rpdml0eTogV0tVUkxBY3Rpdml0
eVdyYXBwZXIgeyBzZWxmLmFjdGl2aXR5V3JhcHBlciB9CisgICAgQG9iamMgcHVibGljIHZhciB1
dWlkOiBVVUlEIHsgZ3JvdXBTZXNzaW9uLmlkIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZ1bmMg
d3JhcHBlclNlc3Npb25TdGF0ZShzdGF0ZTogR3JvdXBTZXNzaW9uPFVSTEFjdGl2aXR5Pi5TdGF0
ZSkgLT4gV0tHcm91cFNlc3Npb25TdGF0ZSB7CisgICAgICAgIHN3aXRjaCBzdGF0ZSB7CisgICAg
ICAgIGNhc2UgLndhaXRpbmc6CisgICAgICAgICAgICByZXR1cm4gV0tHcm91cFNlc3Npb25TdGF0
ZS53YWl0aW5nCisgICAgICAgIGNhc2UgLmpvaW5lZDoKKyAgICAgICAgICAgIHJldHVybiBXS0dy
b3VwU2Vzc2lvblN0YXRlLmpvaW5lZAorICAgICAgICBjYXNlIC5pbnZhbGlkYXRlZDoKKyAgICAg
ICAgICAgIHJldHVybiBXS0dyb3VwU2Vzc2lvblN0YXRlLmludmFsaWRhdGVkCisgICAgICAgIEB1
bmtub3duIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBVbmFudGljaXBhdGVkIHN0YXRlIHZhbHVl
LgorICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZSgpCisgICAgICAgICAgICByZXR1cm4gV0tH
cm91cFNlc3Npb25TdGF0ZS5pbnZhbGlkYXRlZAorICAgICAgICB9CisgICAgfQorCisgICAgQG9i
amMgcHVibGljIHZhciBzdGF0ZTogV0tHcm91cFNlc3Npb25TdGF0ZSB7CisgICAgICAgIHJldHVy
biBXS0dyb3VwU2Vzc2lvbldyYXBwZXIud3JhcHBlclNlc3Npb25TdGF0ZShzdGF0ZTogZ3JvdXBT
ZXNzaW9uLnN0YXRlKQorICAgIH0KKworICAgIEBvYmpjIHB1YmxpYyB2YXIgbmV3QWN0aXZpdHlD
YWxsYmFjazogKChXS1VSTEFjdGl2aXR5V3JhcHBlcikgLT4gVm9pZCk/CisgICAgQG9iamMgcHVi
bGljIHZhciBzdGF0ZUNoYW5nZWRDYWxsYmFjazogKChXS0dyb3VwU2Vzc2lvblN0YXRlKSAtPiBW
b2lkKT8KKworICAgIEBvYmpjIHB1YmxpYyBmdW5jIGpvaW4oKSB7CisgICAgICAgIGdyb3VwU2Vz
c2lvbi5qb2luKCkKKyAgICB9CisKKyAgICBAb2JqYyBwdWJsaWMgZnVuYyBsZWF2ZSgpIHsKKyAg
ICAgICAgZ3JvdXBTZXNzaW9uLmxlYXZlKCkKKyAgICB9CisKKyAgICBAb2JqYyhjb29yZGluYXRl
V2l0aENvb3JkaW5hdG9yOikKKyAgICBwdWJsaWMgZnVuYyBjb29yZGluYXRlKGNvb3JkaW5hdG9y
OiBBVlBsYXliYWNrQ29vcmRpbmF0b3IpIHsKKyAgICAgICAgY29vcmRpbmF0b3IuY29vcmRpbmF0
ZVdpdGhTZXNzaW9uKHNlbGYuZ3JvdXBTZXNzaW9uKQorICAgIH0KKworICAgIHByaXZhdGUgZnVu
YyBhY3Rpdml0eUNoYW5nZWQoYWN0aXZpdHk6IFVSTEFjdGl2aXR5KSB7CisgICAgICAgIHNlbGYu
YWN0aXZpdHlXcmFwcGVyID0gV0tVUkxBY3Rpdml0eVdyYXBwZXIoYWN0aXZpdHk6IGdyb3VwU2Vz
c2lvbi5hY3Rpdml0eSkKKworICAgICAgICBndWFyZCBsZXQgY2FsbGJhY2sgPSBuZXdBY3Rpdml0
eUNhbGxiYWNrIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIH0KKworICAgICAg
ICBjYWxsYmFjayhhY3Rpdml0eVdyYXBwZXIpCisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jIHN0
YXRlQ2hhbmdlZChzdGF0ZTogR3JvdXBTZXNzaW9uPFVSTEFjdGl2aXR5Pi5TdGF0ZSkgeworICAg
ICAgICBndWFyZCBsZXQgY2FsbGJhY2sgPSBzdGF0ZUNoYW5nZWRDYWxsYmFjayBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2soV0tHcm91cFNl
c3Npb25XcmFwcGVyLndyYXBwZXJTZXNzaW9uU3RhdGUoc3RhdGU6IHN0YXRlKSkKKyAgICB9Cit9
CisKK0BvYmpjKFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIpCitwdWJsaWMgY2xhc3MgV0tHcm91cFNl
c3Npb25PYnNlcnZlciA6IE5TT2JqZWN0IHsKKyAgICBAb2JqYyBwdWJsaWMgdmFyIG5ld1Nlc3Np
b25DYWxsYmFjazogKChXS0dyb3VwU2Vzc2lvbldyYXBwZXIpIC0+IFZvaWQpPworCisgICAgcHJp
dmF0ZSB2YXIgb2JzZXJ2ZXIgPSBHcm91cFNlc3Npb25PYnNlcnZlcihmb3I6IFVSTEFjdGl2aXR5
LnNlbGYpCisgICAgcHJpdmF0ZSB2YXIgY2FuY2VsbGFibGVzOiBTZXQ8QW55Q2FuY2VsbGFibGU+
ID0gW10KKworICAgIEBvYmpjIHB1YmxpYyBvdmVycmlkZSBpbml0KCkgeworICAgICAgICBzdXBl
ci5pbml0KCkKKworICAgICAgICBvYnNlcnZlcgorICAgICAgICAgICAgLnNpbmsgeyBbdW5vd25l
ZCBzZWxmXSBpbiBzZWxmLnJlY2lldmVkU2Vzc2lvbigkMCkgfQorICAgICAgICAgICAgLnN0b3Jl
KGluOiAmY2FuY2VsbGFibGVzKQorICAgIH0KKworICAgIHByaXZhdGUgZnVuYyByZWNpZXZlZFNl
c3Npb24oXyBzZXNzaW9uOiBHcm91cFNlc3Npb248VVJMQWN0aXZpdHk+KSB7CisgICAgICAgIGd1
YXJkIGxldCBjYWxsYmFjayA9IG5ld1Nlc3Npb25DYWxsYmFjayBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICB9CisKKyAgICAgICAgbGV0IHNlc3Npb25XcmFwcGVyID0gV0tHcm91
cFNlc3Npb25XcmFwcGVyKGdyb3VwU2Vzc2lvbjogc2Vzc2lvbikKKyAgICAgICAgY2FsbGJhY2so
c2Vzc2lvbldyYXBwZXIpCisgICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYktpdFN3aWZ0U29mdExpbmsuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYktpdFN3aWZ0U29mdExpbmsuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTZk
YTA1NTQ5ZTY1ZGQ1NjMzZDhlMTIyN2FiYWQ2YWFlMjVhNTM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViS2l0U3dpZnRTb2Z0TGluay5oCkBAIC0w
LDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJSQVJZX0ZPUl9IRUFERVIoV2ViS2l0LCBXZWJL
aXRTd2lmdCkKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgV0tHcm91cFNlc3Np
b25PYnNlcnZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YktpdFN3aWZ0U29mdExpbmsubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJL
aXRTd2lmdFNvZnRMaW5rLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlM2M3YzY5MjM5OTBhNWE3NjI0MWVlN2Ji
ZmVhZTFjOGQ1MWEwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJLaXRTd2lmdFNvZnRMaW5rLm1tCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitleHRlcm4gdm9pZCogV2ViS2l0U3dpZnRMaWJyYXJ5KGJv
b2wgaXNPcHRpb25hbCA9IGZhbHNlKTsKK3ZvaWQqIFdlYktpdFN3aWZ0TGlicmFyeShib29sIGlz
T3B0aW9uYWwpCit7CisgICAgc3RhdGljIHZvaWQqIGxpYnJhcnk7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICAgIC8v
IFN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGxpYnJhcnkgaW4gRFlMRF9MSUJSQVJZX1BBVEg6
CisgICAgICAgIGlmICgobGlicmFyeSA9IGRsb3BlbigibGliV2ViS2l0U3dpZnQuZHlsaWIiLCBS
VExEX05PVykpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFRoZW4gc2VhcmNo
IGluIHRoZSBGcmFtZXdvcmtzLyBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmVy
c2lvbiBvZiBXZWJLaXQuZnJhbWV3b3JrOgorICAgICAgICBEbF9pbmZvIGluZm8geyB9OworICAg
ICAgICBpZiAoZGxhZGRyKChjb25zdCB2b2lkKikmV2ViS2l0U3dpZnRMaWJyYXJ5LCAmaW5mbykg
JiYgc3RybGVuKGluZm8uZGxpX2ZuYW1lKSkgeworICAgICAgICAgICAgYXV0byB3ZWJraXRGcmFt
ZXdvcmtEaXJlY3RvcnkgPSBXVEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKGluZm8uZGxp
X2ZuYW1lKTsKKyAgICAgICAgICAgIGF1dG8gZHlsaWJQYXRoID0gV1RGOjpGaWxlU3lzdGVtSW1w
bDo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHdlYmtpdEZyYW1ld29ya0RpcmVjdG9yeSwgIkZy
YW1ld29ya3MvbGliV2ViS2l0U3dpZnQuZHlsaWIiKTsKKyAgICAgICAgICAgIGlmICgobGlicmFy
eSA9IGRsb3BlbihkeWxpYlBhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9OT1cpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbGx5LCBzZWFyY2gg
YXQgdGhlIGluc3RhbGxlZCBzeXN0ZW0gcGF0aDoKKyAgICAgICAgaWYgKChsaWJyYXJ5ID0gZGxv
cGVuKCIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL0ZyYW1ld29y
a3MvbGliV2ViS2l0U3dpZnQuZHlsaWIiLCBSVExEX05PVykpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmICghaXNPcHRpb25hbCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfTUVTU0FHRShsaWJyYXJ5LCAiJXMiLCBkbGVycm9yKCkpOworICAgIH0pOworICAgIHJl
dHVybiBsaWJyYXJ5OworfQorCit9CisKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFX09QVElP
TkFMKFdlYktpdCwgV2ViS2l0U3dpZnQsIFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIpCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
UmVtb3RlSU9TLmgKaW5kZXggMDY2Yzk1OWMzYTc4Y2VjZTM2YTc1YjA3MDM4ZDA4MDA0NTk3MTY2
Zi4uNWExM2E5NzM2NjI5ZDZhMTMxMDIyNTlhY2FiYWYyM2Q1MGY3MjIyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlUmVtb3RlSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlUmVt
b3RlSU9TLmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
ICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKK09CSkNfQ0xBU1MgVUlTY3JvbGxWaWV3OworCiAj
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
aW5kZXggOWQ5NjgwNjE0MjNiNzk1NWMzYzM3YWRkZTUyN2RjN2NlYzMyOGU4OS4uMDIwN2I5NDIw
MWYzMTJiM2VjNjIyMTk0NjRjMzkxNTQ5MDNiZGFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yOTksMTIgKzI5OSw4IEBACiAjaW5jbHVkZSAiTWVkaWFT
ZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRpYVNl
c3Npb25Db29yZGluYXRvclByb3h5LmgiCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQot
I2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3JBZGRpdGlvbnMuaD4KLSNlbHNl
Ci0jZGVmaW5lIFdFQlBBR0VQUk9YWV9DT05TVFJVQ1RPUl9XS0NPT1JESU5BVE9SX0FERElUSU9O
UwotI2RlZmluZSBXRUJQQUdFUFJPWFlfREVTVFJVQ1RPUl9XS0NPT1JESU5BVE9SX0FERElUSU9O
UwotI2RlZmluZSBXRUJQQUdFUFJPWFlfRElEQ09NTUlUTE9BREZPUkZSQU1FX1dLQ09PUkRJTkFU
T1JfQURESVRJT05TCisjaWYgSEFWRShHUk9VUF9BQ1RJVklUSUVTKQorI2luY2x1ZGUgIkdyb3Vw
QWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllci5oIgogI2VuZGlmCiAjZW5kaWYKIApAQCAtNTY1LDgg
KzU2MSw4IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGll
bnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgUmVmCiAgICAgICAgIHByb2Nlc3Muc2V0SWdu
b3JlSW52YWxpZE1lc3NhZ2VGb3JUZXN0aW5nKCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJ
QV9TRVNTSU9OX0NPT1JESU5BVE9SKQotICAgIFdFQlBBR0VQUk9YWV9DT05TVFJVQ1RPUl9XS0NP
T1JESU5BVE9SX0FERElUSU9OUworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9S
KSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisgICAgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5v
dGlmaWVyOjpzaGFyZWROb3RpZmllcigpLmFkZFdlYlBhZ2UoKnRoaXMpOwogI2VuZGlmCiB9CiAK
QEAgLTYwNCw4ICs2MDAsOCBAQCBXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJveHkoKQogICAgIGZv
ciAoYXV0byYgY2FsbGJhY2sgOiBtX25leHRBY3Rpdml0eVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKQog
ICAgICAgICBjYWxsYmFjaygpOwogCi0jaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFU
T1IpCi0gICAgV0VCUEFHRVBST1hZX0RFU1RSVUNUT1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMK
KyNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikgJiYgSEFWRShHUk9VUF9BQ1RJ
VklUSUVTKQorICAgIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZp
ZXIoKS5yZW1vdmVXZWJQYWdlKCp0aGlzKTsKICNlbmRpZgogfQogCkBAIC00ODkxLDggKzQ4ODcs
OSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBGcmFtZUluZm9EYXRhJgogICAgICAgICByZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9D
T09SRElOQVRPUikKLSAgICBXRUJQQUdFUFJPWFlfRElEQ09NTUlUTE9BREZPUkZSQU1FX1dLQ09P
UkRJTkFUT1JfQURESVRJT05TCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1Ip
ICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkp
CisgICAgICAgIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZpZXIo
KS53ZWJQYWdlVVJMQ2hhbmdlZCgqdGhpcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTQ4MjE5MjFlNDc0ZDI3
NGFkN2UwOTAwZDc0ZDZiMTc2M2I4NmYwMy4uODgwMjhlZjg0MzY5YjBkNTkzMGQyYTg5OTlmZTMx
NDMyOWExMWQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2Vz
ID0gewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDUyOworCW9iamVjdFZlcnNpb24gPSA1NDsKIAlv
YmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAt
MTkwMiw3ICsxOTAyLDYgQEAKIAkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q3OEUxMTgxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEODI1
MkRFMjVENDkxNkMwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDgyNTJEQTI1RDQ5MTU0MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExp
c3RlbmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlDRDgyNTJFMjI1RDQ5MTkx
MDA4NjJGRDggLyogUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODI1MkUw
MjVENDkxODQwMDg2MkZEOCAvKiBSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OwotCQlDRDk1NDk0MzI2MTU5MTdCMDA4MzcyRDkgLyogV0tHcm91cFNl
c3Npb24uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREYxN0NDMzI2MEU4RkFCMDBGMEE0RTggLyogV0tHcm91cFNlc3Npb24uc3dpZnQgKi87IH07
CiAJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMDQxRjMxQUNF
MjEwNTAwNEExM0VDIC8qIEJhY2tCb2FyZFNlcnZpY2VzU1BJLmggKi87IH07CiAJCUNEQTI5QTFC
MUNCREJGNDEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExOTFDQkRCRjQxMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlci5oICovOyB9OwogCQlDREEyOUEyMDFDQkVCNUZC
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi87IH07CkBAIC0xOTM2LDYgKzE5MzUs
OCBAQAogCQlDREU1NTUzMzI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RFNTU1MkEyNDA2Qjg5NjAwOEEzRERCIC8qIFJlbW90ZUxlZ2FjeUNETVByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJQ0RFNTU1MzQyNDA2RUI4QzAwOEEzRERCIC8q
IFJlbW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTU1MkUyNDA2Qjg5NzAwOEEzRERC
IC8qIFJlbW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlD
REU1NTUzNTI0MDZFQjhDMDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RNU2Vzc2lvblByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENERTU1NTMxMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9u
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlDREYxQjkxNTI2NkYzOTZBMDAwN0VD
MTAgLyogV0tHcm91cFNlc3Npb24uc3dpZnQgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREYxQjkwRDI2NkYzOTVFMDAwN0VDMTAgLyogV0tHcm91cFNlc3Np
b24uc3dpZnQgKi87IH07CisJCUNERjFCOTFCMjY3MDI1NTUwMDA3RUMxMCAvKiBXZWJLaXRTd2lm
dFNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RGMUI5MUEyNjcwMjFENjAwMDdFQzEwIC8qIFdlYktpdFN3aWZ0U29mdExpbmsubW0gKi87
IH07CiAJCUNFMTFBRDUyMUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMUFENTExQ0JDNDgyRjAw
NjgxRUU1IC8qIENvZGVTaWduaW5nLmggKi87IH07CiAJCUNFMUEwQkQ2MUE0OEU2QzYwMDU0RUY3
NCAvKiBUQ0NTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFMUEwQkQwMUE0OEU2QzYwMDU0RUY3NCAvKiBUQ0NTUEkuaCAqLzsgfTsKIAkJQ0UxQTBC
RDcxQTQ4RTZDNjAwNTRFRjc0IC8qIFRleHRJbnB1dFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxQTBCRDExQTQ4RTZDNjAwNTRFRjc0IC8qIFRl
eHRJbnB1dFNQSS5oICovOyB9OwpAQCAtNTgwOCw2ICs1ODA5LDE2IEBACiAJCUNERTU1NTMwMjQw
NkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uTWVzc2FnZXNSZXBsaWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxlZ2FjeUNETVNlc3Npb25NZXNzYWdlc1JlcGxpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNTU1MzEyNDA2Qjg5NzAwOEEzRERCIC8q
IFJlbW90ZUxlZ2FjeUNETVNlc3Npb25Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREYxN0NDMzI2MEU4RkFCMDBGMEE0RTgg
LyogV0tHcm91cFNlc3Npb24uc3dpZnQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnN3aWZ0OyBwYXRo
ID0gV0tHcm91cFNlc3Npb24uc3dpZnQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
RjFCOTBEMjY2RjM5NUUwMDA3RUMxMCAvKiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuc3dpZnQ7
IHBhdGggPSBXS0dyb3VwU2Vzc2lvbi5zd2lmdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RGMUI5MEUyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc1Nlc3Npb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREYxQjkwRjI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVz
Q29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcm91cEFjdGl2aXRpZXNDb29y
ZGluYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MTAyNjZGMzk1
RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLR3JvdXBTZXNz
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTExMjY2RjM5NUUwMDA3
RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNTZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RGMUI5MTIyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTEzMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
RjFCOTE0MjY2RjM5NUYwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTE5MjY3MDIxRDYwMDA3RUMxMCAvKiBXZWJL
aXRTd2lmdFNvZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN3aWZ0U29mdExpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MUEyNjcwMjFENjAwMDdFQzEwIC8q
IFdlYktpdFN3aWZ0U29mdExpbmsubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXRTd2lm
dFNvZnRMaW5rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTExQUQ0RjFDQkM0
N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDb2RlU2lnbmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0UxMUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTaWduaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNFMUEwQkQwMUE0OEU2QzYwMDU0RUY3NCAvKiBUQ0NTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENDU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02OTk5LDYgKzcwMTAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlDREYxN0M5MzI2MEQzQjUyMDBGMEE0RTggLyogQ29vcmRpbmF0b3IgKi8sCisJ
CQkJQ0RGMUI5MEMyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllcyAqLywKIAkJCQk1
N0ZEMzE2QjIyQjMzNjdFMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uICovLAogCQkJCTk5Qzgx
RDU1MUMyMERGQkUwMDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJOTlDODFE
NTYxQzIwREZCRTAwNUM0QzgyIC8qIEF1dG9tYXRpb25DbGllbnQubW0gKi8sCkBAIC03MDUzLDYg
KzcwNjUsOCBAQAogCQkJCTUyRDVBMUFDMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubW0gKi8sCiAJCQkJQzE4RjNBMTMyNTYzMzJBNjAwNzk3RTY2IC8qIFdl
Ykluc3BlY3RvclByZWZlcmVuY2VPYnNlcnZlci5oICovLAogCQkJCUMxOEYzQTE0MjU2MzMzNDMw
MDc5N0U2NiAvKiBXZWJJbnNwZWN0b3JQcmVmZXJlbmNlT2JzZXJ2ZXIubW0gKi8sCisJCQkJQ0RG
MUI5MTkyNjcwMjFENjAwMDdFQzEwIC8qIFdlYktpdFN3aWZ0U29mdExpbmsuaCAqLywKKwkJCQlD
REYxQjkxQTI2NzAyMUQ2MDAwN0VDMTAgLyogV2ViS2l0U3dpZnRTb2Z0TGluay5tbSAqLywKIAkJ
CQkxQUMwMjczRTE5NjYyMkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2EubW0gKi8sCiAJ
CQkJN0M0Njk0Q0IxQTRCNTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1t
ICovLAogCQkJCUEzOTM3QjYxMjNDRDFCOUIwMDVCMkEyRSAvKiBXZWJQcmVmZXJlbmNlc0NvY29h
Lm1tICovLApAQCAtMTE0NjQsNiArMTE0NzgsMjEgQEAKIAkJCXBhdGggPSB1c3IvbG9jYWwvaW5j
bHVkZS9XZWJLaXRBZGRpdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OwogCQl9OworCQlDREYxQjkwQzI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDREYxQjkxMjI2
NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaCAqLywKKwkJCQlD
REYxQjkwRjI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IubW0g
Ki8sCisJCQkJQ0RGMUI5MEUyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc1Nlc3Np
b24uaCAqLywKKwkJCQlDREYxQjkxMTI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbi5tbSAqLywKKwkJCQlDREYxQjkxNDI2NkYzOTVGMDAwN0VDMTAgLyogR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyLmggKi8sCisJCQkJQ0RGMUI5MTMyNjZGMzk1RTAwMDdFQzEw
IC8qIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllci5tbSAqLywKKwkJCQlDREYxQjkxMDI2
NkYzOTVFMDAwN0VDMTAgLyogV0tHcm91cFNlc3Npb24uaCAqLywKKwkJCQlDREYxQjkwRDI2NkYz
OTVFMDAwN0VDMTAgLyogV0tHcm91cFNlc3Npb24uc3dpZnQgKi8sCisJCQkpOworCQkJcGF0aCA9
IEdyb3VwQWN0aXZpdGllczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUNF
MUEwQkNBMUE0OEU2QzYwMDU0RUY3NCAvKiBzcGkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMTMyNjgsMTEgKzEzMjk3LDkgQEAKIAkJCWlzYSA9IFBCWE5h
dGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDRDk1NDkzQjI2MTU5MDA0
MDA4MzcyRDkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
IldlYktpdFN3aWZ0IiAqLzsKIAkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCUNERjE3Q0JFMjYwREFE
MUIwMEYwQTRFOCAvKiBDb3B5IEFkZGl0aW9uYWwgU291cmNlcyAqLywKIAkJCQlDRDk1NDkzMTI2
MTU5MDA0MDA4MzcyRDkgLyogSGVhZGVycyAqLywKIAkJCQlDRDk1NDkzMjI2MTU5MDA0MDA4Mzcy
RDkgLyogU291cmNlcyAqLywKIAkJCQlDRDk1NDkzMzI2MTU5MDA0MDA4MzcyRDkgLyogRnJhbWV3
b3JrcyAqLywKLQkJCQlDRDk1NDk0MjI2MTU5MEVFMDA4MzcyRDkgLyogQ29weSBPYmpDIEludGVy
ZmFjZSBIZWFkZXIgKi8sCiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CkBAIC0xMzk1
NCw1MCArMTM5ODEsNiBAQAogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKIAkJCXNoZWxsU2NyaXB0
ID0gIlNjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoXG4iOwogCQl9OwotCQlDRDk1
NDk0MjI2MTU5MEVFMDA4MzcyRDkgLyogQ29weSBPYmpDIEludGVyZmFjZSBIZWFkZXIgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRGaWxlTGlzdFBhdGhz
ID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9TT1VSQ0VTX0RJ
UikvJChTV0lGVF9PQkpDX0lOVEVSRkFDRV9IRUFERVJfTkFNRSkiLAotCQkJKTsKLQkJCW5hbWUg
PSAiQ29weSBPYmpDIEludGVyZmFjZSBIZWFkZXIiOwotCQkJb3V0cHV0RmlsZUxpc3RQYXRocyA9
ICgKLQkJCSk7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIp
L3Vzci9sb2NhbC9pbmNsdWRlLyQoVEFSR0VUX05BTUUpLyQoU1dJRlRfT0JKQ19JTlRFUkZBQ0Vf
SEVBREVSX05BTUUpIiwKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJpZiBb
WyBcIiRXS19IQVZFX0NPT1JESU5BVE9SXCIgPT0gXCJZRVNcIiBdXVxudGhlblxuICAgIGRpdHRv
IFwiJHtERVJJVkVEX1NPVVJDRVNfRElSfS8ke1NXSUZUX09CSkNfSU5URVJGQUNFX0hFQURFUl9O
QU1FfVwiIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlLyR7VEFSR0VU
X05BTUV9LyR7U1dJRlRfT0JKQ19JTlRFUkZBQ0VfSEVBREVSX05BTUV9XCJcbmZpXG4iOwotCQl9
OwotCQlDREYxN0NCRTI2MERBRDFCMDBGMEE0RTggLyogQ29weSBBZGRpdGlvbmFsIFNvdXJjZXMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRGaWxlTGlz
dFBhdGhzID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoU0RLX0RJUikvdXNy
L2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3IuaCIsCi0JCQkJIiQo
U0RLX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3Iu
bW0iLAotCQkJCSIkKFNES19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9X
S0dyb3VwU2Vzc2lvbi5zd2lmdCIsCi0JCQkpOwotCQkJbmFtZSA9ICJDb3B5IEFkZGl0aW9uYWwg
U291cmNlcyI7Ci0JCQlvdXRwdXRGaWxlTGlzdFBhdGhzID0gKAotCQkJKTsKLQkJCW91dHB1dFBh
dGhzID0gKAotCQkJCSIkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUvV2Vi
S2l0QWRkaXRpb25zL1dLQ29vcmRpbmF0b3IuaCIsCi0JCQkJIiQoQlVJTFRfUFJPRFVDVFNfRElS
KS91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRpdGlvbnMvV0tDb29yZGluYXRvci5tbSIsCi0J
CQkJIiQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRpdGlv
bnMvV0tHcm91cFNlc3Npb24uc3dpZnQiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9iYXNoOwotCQkJc2hlbGxT
Y3JpcHQgPSAic2V0IC1lXG5cblJFTEFUSVZFX1NPVVJDRV9QQVRIPVwidXNyL2xvY2FsL2luY2x1
ZGUvV2ViS2l0QWRkaXRpb25zXCJcblNPVVJDRV9QQVRIPVwiJFNES19ESVIvJFJFTEFUSVZFX1NP
VVJDRV9QQVRIXCJcbkRFU1RJTkFUSU9OX1BBVEg9XCIkQlVJTFRfUFJPRFVDVFNfRElSLyRSRUxB
VElWRV9TT1VSQ0VfUEFUSFwiXG5cbmZvciBTT1VSQ0UgaW4gV0tDb29yZGluYXRvci5oIFdLQ29v
cmRpbmF0b3IubW0gV0tHcm91cFNlc3Npb24uc3dpZnQ7IGRvXG4gICAgaWYgW1sgXCIkU09VUkNF
X1BBVEgvJFNPVVJDRVwiIC1udCBcIiRERVNUSU5BVElPTl9QQVRILyRTT1VSQ0VcIiBdXTsgdGhl
blxuICAgICAgICBkaXR0byBcIiRTT1VSQ0VfUEFUSC8kU09VUkNFXCIgXCIkREVTVElOQVRJT05f
UEFUSC8kU09VUkNFXCJcbiAgICBmaVxuZG9uZVxuIjsKLQkJfTsKIAkJRTFBQzJFMkMyMEY3Qjk1
ODAwQjA4OTdEIC8qIFVubG9jayBLZXljaGFpbiAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2Ny
aXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xNDEz
Myw2ICsxNDExNiw3IEBACiAJCQkJQ0RBOTNEQjEyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzFB
MTUyRDcyNEU1QTI5QTAwOTc4QzhCIC8qIEhhbmRsZVhQQ0VuZHBvaW50TWVzc2FnZXMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5k
bGVOb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNERjFCOTFCMjY3MDI1NTUwMDA3
RUMxMCAvKiBXZWJLaXRTd2lmdFNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2
NDUyMTQ2NTYxRTAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOUJGNUVDNjQyNTQxMTQ1NjAwOTg0RTc3IC8qIEpTSVBDQmluZGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkxMzQ0MTIxMkNGOUYwMDAxMjhBRkQgLyogSlNOUE1l
dGhvZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE0NTcxLDcgKzE0NTU1LDcgQEAKIAkJCWlzYSA9
IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
IAkJCWZpbGVzID0gKAotCQkJCUNEOTU0OTQzMjYxNTkxN0IwMDgzNzJEOSAvKiBXS0dyb3VwU2Vz
c2lvbi5zd2lmdCBpbiBTb3VyY2VzICovLAorCQkJCUNERjFCOTE1MjY2RjM5NkEwMDA3RUMxMCAv
KiBXS0dyb3VwU2Vzc2lvbi5zd2lmdCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430973</attachid>
            <date>2021-06-09 10:05:30 -0700</date>
            <delta_ts>2021-06-09 16:48:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226757-20210609100529.patch</filename>
            <type>text/plain</type>
            <size>65271</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRjMmE3NzY0OGU4NGJhODlj
NmVkODFlOGMwOWUwZjFlZTUwMDBjOWMuLjdmZDg1ZDEyOGU5NmJiOWI2Y2M2YTY5Y2QxNWJjOTIz
YzM5ZDZkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMDYtMDcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVcHN0cmVhbSBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2NzU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgYSBHcm91cEFj
dGl2aXRpZXMtYmFzZWQgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IuCisKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBpbml0
V2l0aFBhcmVudDpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRl
bGVnYXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQbGF5Q29tbWFuZDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlIHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQYXVzZUNvbW1hbmQ6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0
ZSBwbGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlU2Vla0NvbW1hbmQ6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSBw
bGF5YmFja0Nvb3JkaW5hdG9yOmRpZElzc3VlQnVmZmVyaW5nQ29tbWFuZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVnYXRl
IHBsYXliYWNrQ29vcmRpbmF0b3I6ZGlkSXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQ6XSk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6R3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGlu
YXRvcjo6fkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6R3Jv
dXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlc3Npb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpqb2luKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmxlYXZlKToKKyAgICAgICAg
KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNlZWtUbyk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpwbGF5KToKKyAgICAgICAgKFdlYktp
dDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnNldFRyYWNrKToKKyAgICAgICAgKFdlYktpdDo6
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBvc2l0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnBsYXliYWNr
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0
b3I6OnRyYWNrSWRlbnRpZmllckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNDb29yZGluYXRvcjo6aXNzdWVQbGF5Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdy
b3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBhdXNlQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVNlZWtDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5n
Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpp
c3N1ZVByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9uOjpncm91cFNlc3Npb24pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lv
bi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246Okdyb3VwQWN0
aXZpdGllc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Ojp+R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZp
dGllc1Nlc3Npb246OmpvaW4pOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNz
aW9uOjpsZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OnN0
YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6dXVp
ZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmZhbGxi
YWNrVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6
YWRkU3RhdGVDaGFuZ2VPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGll
c1Nlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFN3aWZ0TGli
cmFyeSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
c2hhcmVkTm90aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Tm90aWZpZXI6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcik6CisgICAgICAgIChXZWJL
aXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6c2Vzc2lvblN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6YWRkV2Vi
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
cmVtb3ZlV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc1Nlc3Npb25O
b3RpZmllcjo6d2ViUGFnZVVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXI6Omhhc1Nlc3Npb25Gb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnRha2VTZXNzaW9uRm9yVVJMKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL1dLR3JvdXBTZXNzaW9uLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91
cFNlc3Npb24uc3dpZnQ6IEFkZGVkLgorICAgICAgICAoV0tVUkxBY3Rpdml0eVdyYXBwZXIudXJs
QWN0aXZpdHkpOgorICAgICAgICAoV0tVUkxBY3Rpdml0eVdyYXBwZXIuZmFsbGJhY2tVUkwpOgor
ICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmdyb3VwU2Vzc2lvbik6CisgICAgICAgIChX
S0dyb3VwU2Vzc2lvbldyYXBwZXIuY2FuY2VsbGFibGVzKToKKyAgICAgICAgKFdLR3JvdXBTZXNz
aW9uV3JhcHBlci5hY3Rpdml0eSk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIudXVp
ZCk6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIud3JhcHBlclNlc3Npb25TdGF0ZShf
OikpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLnN0YXRlKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uV3JhcHBlci5uZXdBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKFdLR3Jv
dXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXS0dyb3Vw
U2Vzc2lvbldyYXBwZXIuam9pbik6CisgICAgICAgIChXS0dyb3VwU2Vzc2lvbldyYXBwZXIubGVh
dmUpOgorICAgICAgICAoV0tHcm91cFNlc3Npb25XcmFwcGVyLmNvb3JkaW5hdGUoXzopKToKKyAg
ICAgICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5hY3Rpdml0eUNoYW5nZWQoXzopKToKKyAgICAg
ICAgKFdLR3JvdXBTZXNzaW9uV3JhcHBlci5zdGF0ZUNoYW5nZWQoXzopKToKKyAgICAgICAgKFdL
R3JvdXBTZXNzaW9uT2JzZXJ2ZXIubmV3U2Vzc2lvbkNhbGxiYWNrKToKKyAgICAgICAgKFdLR3Jv
dXBTZXNzaW9uT2JzZXJ2ZXIuY2FuY2VsbGFibGVzKToKKyAgICAgICAgKFdLR3JvdXBTZXNzaW9u
T2JzZXJ2ZXIucmVjaWV2ZWRTZXNzaW9uKF86KSk6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjptX2xpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6On5XZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDUtMjEgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjc2OTkzKTogNSBUZXN0V2ViS2l0QVBJ
LkF1ZGlvUm91dGluZ0FyYml0cmF0aW9uIChhcGktdGVzdHMpIGFyZSBjb25zdGFudCBmYWlsdXJl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGIxNDgwMTNjOTA0NjVmOTMyZmM2YWQ5NGIxZTdh
Zjk0OTQxMjM4YzkuLjg3MGUzNTFlZmI2ZmMwOTUwODk1MjZhM2Q1NDBmNWMwMzk0ZDNhMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTM3Myw2ICszNzMsMTAgQEAgVUlQcm9jZXNzL0F1dG9t
YXRpb24vaW9zL1dlYkF1dG9tYXRpb25TZXNzaW9uSU9TLm1tCiAKIFVJUHJvY2Vzcy9BdXRvbWF0
aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQogCitVSVByb2Nlc3MvQ29jb2EvR3Jv
dXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tCitVSVByb2Nlc3MvQ29j
b2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb24ubW0KK1VJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tCisK
IFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0KIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhv
cml6YXRpb25TZXNzaW9uLm1tCiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGly
ZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBB
Y3Rpdml0aWVzQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTQ1ZmE1MTlmOWQ1YjBjMjNjNjU1
MTQ2MDQ1MDFhNzY1MGU3NTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLmgK
QEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKwor
I2luY2x1ZGUgIkdyb3VwQWN0aXZpdGllc1Nlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVNlc3Np
b25Db29yZGluYXRvclByb3h5UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorCitPQkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3I7CitP
QkpDX0NMQVNTIEFWRGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZDsKK09C
SkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFuZDsKK09C
SkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kOworT0JK
Q19DTEFTUyBBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZDsK
K09CSkNfQ0xBU1MgQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0
aW9uQ29tbWFuZDsKK09CSkNfQ0xBU1MgV0tHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvckRlbGVn
YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR3JvdXBBY3Rpdml0aWVzQ29vcmRp
bmF0b3IgZmluYWwgOiBwdWJsaWMgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I+IGNyZWF0ZShHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Jik7CisgICAgfkdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yKCk7CisKKyAgICB1c2luZyBDb21t
YW5kQ29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKCk+OworICAgIHZvaWQgaXNzdWVQ
bGF5Q29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGxheUNvbW1hbmQgKiwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgaXNzdWVQYXVzZUNvbW1hbmQo
QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBhdXNlQ29tbWFuZCAqLCBDb21tYW5kQ29t
cGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBpc3N1ZVNlZWtDb21tYW5kKEFWRGVsZWdhdGlu
Z1BsYXliYWNrQ29vcmRpbmF0b3JTZWVrQ29tbWFuZCAqLCBDb21tYW5kQ29tcGxldGlvbkhhbmRs
ZXImJik7CisgICAgdm9pZCBpc3N1ZUJ1ZmZlcmluZ0NvbW1hbmQoQVZEZWxlZ2F0aW5nUGxheWJh
Y2tDb29yZGluYXRvckJ1ZmZlcmluZ0NvbW1hbmQgKiwgQ29tbWFuZENvbXBsZXRpb25IYW5kbGVy
JiYpOworICAgIHZvaWQgaXNzdWVQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQoQVZEZWxlZ2F0aW5n
UGxheWJhY2tDb29yZGluYXRvclByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCAqKTsKKworcHJpdmF0
ZToKKyAgICBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Jik7CisKKyAgICB2b2lkIHNlc3Npb25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbiYsIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlKTsKKworICAgIHVzaW5nIENv
b3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJik+OworICAgIFN0cmluZyBpZGVudGlm
aWVyKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhh
bmRsZXImJikgZmluYWw7CisgICAgdm9pZCBsZWF2ZSgpIGZpbmFsOworICAgIHZvaWQgc2Vla1Rv
KGRvdWJsZSwgQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lk
IHBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHBh
dXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBzZXRU
cmFjayhjb25zdCBTdHJpbmcmLCBDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFs
OworICAgIHZvaWQgcG9zaXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpNZWRpYVBvc2l0aW9uU3RhdGU+JikgZmluYWw7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hh
bmdlZChXZWJDb3JlOjpNZWRpYVNlc3Npb25SZWFkeVN0YXRlKSBmaW5hbDsKKyAgICB2b2lkIHBs
YXliYWNrU3RhdGVDaGFuZ2VkKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGUpIGZp
bmFsOworICAgIHZvaWQgdHJhY2tJZGVudGlmaWVyQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFJlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0
YWluUHRyPFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsK
KyAgICBSZXRhaW5QdHI8QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvcj4gbV9wbGF5YmFj
a0Nvb3JkaW5hdG9yOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpNZWRpYVBvc2l0aW9u
U3RhdGU+IG1fcG9zaXRpb25TdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvblJlYWR5U3RhdGU+IG1fcmVhZHlTdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6Ok1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGU+IG1fcGxheWJhY2tTdGF0ZTsKKworICAgIEdy
b3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlQ2hhbmdlT2JzZXJ2ZXIgbV9zdGF0ZUNoYW5nZU9i
c2VydmVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFj
dGl2aXRpZXNDb29yZGluYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2Q3OWYxNjEwNTZhMDEwYTRlYWM1
ODJmZDI3ODY4ZjM4OGE2MjExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1t
CkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NF
U1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2ltcG9ydCAi
V0tHcm91cFNlc3Npb24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorCisjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9u
U29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorCitAaW50
ZXJmYWNlIFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JEZWxlZ2F0ZSA6IE5TT2JqZWN0PEFW
UGxheWJhY2tDb29yZGluYXRvclBsYXliYWNrQ29udHJvbERlbGVnYXRlPiB7CisgICAgV2Vha1B0
cjxXZWJLaXQ6Okdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yPiBfcGFyZW50OworfQorLSAoaWQp
aW5pdFdpdGhQYXJlbnQ6KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3ImKXBhcmVu
dDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3JE
ZWxlZ2F0ZQorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFdlYktpdDo6R3JvdXBBY3Rpdml0aWVzQ29v
cmRpbmF0b3ImKXBhcmVudAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3BhcmVudCA9IG1ha2VXZWFrUHRyKHBh
cmVudCk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0odm9pZClwbGF5YmFja0Nvb3JkaW5hdG9y
OihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZGlkSXNzdWVQ
bGF5Q29tbWFuZDooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclBsYXlDb21tYW5kICop
cGxheUNvbW1hbmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25I
YW5kbGVyIHsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
eworICAgICAgICBpZiAoX3BhcmVudCkgeworICAgICAgICAgICAgX3BhcmVudC0+aXNzdWVQbGF5
Q29tbWFuZChwbGF5Q29tbWFuZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCistKHZvaWQpcGxheWJh
Y2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yIGRpZElzc3VlUGF1c2VDb21tYW5kOihBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9y
UGF1c2VDb21tYW5kICopcGF1c2VDb21tYW5kIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciB7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFfcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBfcGFyZW50LT5pc3N1ZVBhdXNlQ29tbWFuZChwYXVzZUNvbW1hbmQsIFtj
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQor
CistKHZvaWQpcGxheWJhY2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGlu
YXRvciAqKWNvb3JkaW5hdG9yIGRpZElzc3VlU2Vla0NvbW1hbmQ6KEFWRGVsZWdhdGluZ1BsYXli
YWNrQ29vcmRpbmF0b3JTZWVrQ29tbWFuZCAqKXNlZWtDb21tYW5kIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciB7CisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFfcGFyZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBfcGFyZW50LT5pc3N1ZVNlZWtDb21tYW5kKHNlZWtD
b21tYW5kLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKworLSh2b2lkKXBsYXliYWNrQ29vcmRpbmF0b3I6KEFWRGVsZWdhdGluZ1BsYXli
YWNrQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRJc3N1ZUJ1ZmZlcmluZ0NvbW1hbmQ6KEFW
RGVsZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JCdWZmZXJpbmdDb21tYW5kICopYnVmZmVyaW5n
Q29tbWFuZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIgeworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Cisg
ICAgICAgIGlmICghX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX3BhcmVu
dC0+aXNzdWVCdWZmZXJpbmdDb21tYW5kKGJ1ZmZlcmluZ0NvbW1hbmQsIFtjb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCistKHZvaWQpcGxh
eWJhY2tDb29yZGluYXRvcjooQVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvciAqKWNvb3Jk
aW5hdG9yIGRpZElzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kOihBVkRlbGVnYXRpbmdQbGF5
YmFja0Nvb3JkaW5hdG9yUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kICopcHJlcGFyZVRyYW5zaXRp
b25Db21tYW5kIHsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBpZiAoX3BhcmVudCkKKyAgICAgICAgICAgIF9wYXJlbnQtPmlzc3VlUHJl
cGFyZVRyYW5zaXRpb25Db21tYW5kKHByZXBhcmVUcmFuc2l0aW9uQ29tbWFuZCk7CisgICAgfSk7
Cit9CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgUEFMOwor
CitSZWY8R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I+IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5h
dG9yOjpjcmVhdGUoR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbiYgc2Vzc2lvbikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcihzZXNzaW9uKSk7Cit9
CisKK0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpHcm91cEFjdGl2aXRpZXNDb29yZGluYXRv
cihHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiBzZXNzaW9uKQorICAgIDogbV9zZXNzaW9uKHNlc3Np
b24pCisgICAgLCBtX2RlbGVnYXRlKGFkb3B0TlMoW1tXS0dyb3VwQWN0aXZpdGllc0Nvb3JkaW5h
dG9yRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUGFyZW50Oip0aGlzXSkpCisgICAgLCBtX3BsYXli
YWNrQ29vcmRpbmF0b3IoYWRvcHROUyhbUEFMOjphbGxvY0FWRGVsZWdhdGluZ1BsYXliYWNrQ29v
cmRpbmF0b3JJbnN0YW5jZSgpIGluaXRXaXRoUGxheWJhY2tDb250cm9sRGVsZWdhdGU6bV9kZWxl
Z2F0ZS5nZXQoKV0pKQorICAgICwgbV9zdGF0ZUNoYW5nZU9ic2VydmVyKFt0aGlzXSAoYXV0byYg
c2Vzc2lvbiwgYXV0byBzdGF0ZSkgeyBzZXNzaW9uU3RhdGVDaGFuZ2VkKHNlc3Npb24sIHN0YXRl
KTsgfSkKK3sKKyAgICBbc2Vzc2lvbi5ncm91cFNlc3Npb24oKSBjb29yZGluYXRlV2l0aENvb3Jk
aW5hdG9yOm1fcGxheWJhY2tDb29yZGluYXRvci5nZXQoKV07CisgICAgc2Vzc2lvbi5hZGRTdGF0
ZUNoYW5nZU9ic2VydmVyKG1fc3RhdGVDaGFuZ2VPYnNlcnZlcik7Cit9CisKK0dyb3VwQWN0aXZp
dGllc0Nvb3JkaW5hdG9yOjp+R3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IoKQoreworICAgIG1f
c2Vzc2lvbi0+Z3JvdXBTZXNzaW9uKCkubmV3QWN0aXZpdHlDYWxsYmFjayA9IG5pbDsKKyAgICBt
X3Nlc3Npb24tPmdyb3VwU2Vzc2lvbigpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbmlsOworfQor
Cit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXNzaW9uU3RhdGVDaGFuZ2VkKGNv
bnN0IEdyb3VwQWN0aXZpdGllc1Nlc3Npb24mIHNlc3Npb24sIEdyb3VwQWN0aXZpdGllc1Nlc3Np
b246OlN0YXRlIHN0YXRlKQoreworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVNlc3Npb25Db29y
ZGluYXRvclN0YXRlOjpXYWl0aW5nKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZp
dGllc1Nlc3Npb246OlN0YXRlOjpXYWl0aW5nKSwgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3Rh
dGU6OldhaXRpbmcgIT0gV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRpbmciKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6
Sm9pbmVkKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0
YXRlOjpKb2luZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Sm9pbmVkICE9IFdL
R3JvdXBTZXNzaW9uU3RhdGVKb2luZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0
PHNpemVfdD4oTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Q2xvc2VkKSA9PSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlOjpJbnZhbGlkYXRlZCks
ICJNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpDbG9zZWQgIT0gV0tHcm91cFNlc3Npb25T
dGF0ZUludmFsaWRhdGVkIik7CisgICAgY2xpZW50KCktPmNvb3JkaW5hdG9yU3RhdGVDaGFuZ2Vk
KHN0YXRpY19jYXN0PE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yU3RhdGU+KHN0YXRlKSk7Cit9CisK
K1N0cmluZyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6aWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2Vzc2lvbi0+dXVpZCgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGll
c0Nvb3JkaW5hdG9yOjpqb2luKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxsYmFj
aykKK3sKKyAgICBtX3Nlc3Npb24tPmpvaW4oKTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpsZWF2ZSgpCit7CisgICAg
bV9zZXNzaW9uLT5sZWF2ZSgpOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
OjpzZWVrVG8oZG91YmxlIHRpbWUsIENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxs
YmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVTZWVrVG9UaW1l
OkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCAxMDAwKSBvcHRpb25zOjBdOworICAgIGNhbGxi
YWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6
OnBsYXkoQ29vcmRpbmF0b3JDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIFtt
X3BsYXliYWNrQ29vcmRpbmF0b3IgY29vcmRpbmF0ZVJhdGVDaGFuZ2VUb1JhdGU6MSBvcHRpb25z
OjBdOworICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0
aWVzQ29vcmRpbmF0b3I6OnBhdXNlKENvb3JkaW5hdG9yQ29tcGxldGlvbkhhbmRsZXImJiBjYWxs
YmFjaykKK3sKKyAgICBbbV9wbGF5YmFja0Nvb3JkaW5hdG9yIGNvb3JkaW5hdGVSYXRlQ2hhbmdl
VG9SYXRlOjAgb3B0aW9uczowXTsKKyAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworfQorCit2
b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpzZXRUcmFjayhjb25zdCBTdHJpbmcmIHRy
YWNrLCBDb29yZGluYXRvckNvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRv
cjo6cG9zaXRpb25TdGF0ZUNoYW5nZWQoY29uc3Qgc3RkOjpvcHRpb25hbDxNZWRpYVBvc2l0aW9u
U3RhdGU+JiBwb3NpdGlvblN0YXRlKQoreworICAgIGlmIChtX3Bvc2l0aW9uU3RhdGUgPT0gcG9z
aXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcG9zaXRpb25TdGF0ZSA9IHBvc2l0
aW9uU3RhdGU7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OnJlYWR5U3Rh
dGVDaGFuZ2VkKE1lZGlhU2Vzc2lvblJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAo
bV9yZWFkeVN0YXRlID09IHJlYWR5U3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlYWR5
U3RhdGUgPSByZWFkeVN0YXRlOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
OjpwbGF5YmFja1N0YXRlQ2hhbmdlZChNZWRpYVNlc3Npb25QbGF5YmFja1N0YXRlIHBsYXliYWNr
U3RhdGUpCit7CisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBwbGF5YmFja1N0YXRlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9wbGF5YmFja1N0YXRlID0gcGxheWJhY2tTdGF0ZTsKK30KKwor
dm9pZCBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjo6dHJhY2tJZGVudGlmaWVyQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIgIT0gU3RyaW5n
KFttX3BsYXliYWNrQ29vcmRpbmF0b3IgY3VycmVudEl0ZW1JZGVudGlmaWVyXSkpCisgICAgICAg
IFttX3BsYXliYWNrQ29vcmRpbmF0b3IgdHJhbnNpdGlvblRvSXRlbVdpdGhJZGVudGlmaWVyOmlk
ZW50aWZpZXIgcHJvcG9zaW5nSW5pdGlhbFRpbWluZ0Jhc2VkT25UaW1lYmFzZTpuaWxdOworfQor
Cit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjppc3N1ZVBsYXlDb21tYW5kKEFWRGVs
ZWdhdGluZ1BsYXliYWNrQ29vcmRpbmF0b3JQbGF5Q29tbWFuZCAqcGxheUNvbW1hbmQsIENvbW1h
bmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIGlmICghY2xpZW50KCkpIHsK
KyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBpdGVtVGltZTsKKyAgICBpZiAoQ01USU1FX0lTX05VTUVSSUMocGxh
eUNvbW1hbmQuaXRlbVRpbWUpKQorICAgICAgICBpdGVtVGltZSA9IENNVGltZUdldFNlY29uZHMo
cGxheUNvbW1hbmQuaXRlbVRpbWUpOworICAgIHN0ZDo6b3B0aW9uYWw8TW9ub3RvbmljVGltZT4g
aG9zdFRpbWU7CisgICAgaWYgKENNVElNRV9JU19OVU1FUklDKHBsYXlDb21tYW5kLmhvc3RDbG9j
a1RpbWUpKQorICAgICAgICBob3N0VGltZSA9IE1vbm90b25pY1RpbWU6OmZyb21NYWNoQWJzb2x1
dGVUaW1lKENNQ2xvY2tDb252ZXJ0SG9zdFRpbWVUb1N5c3RlbVVuaXRzKHBsYXlDb21tYW5kLmhv
c3RDbG9ja1RpbWUpKTsKKworICAgIGNsaWVudCgpLT5wbGF5U2Vzc2lvbihpdGVtVGltZSwgaG9z
dFRpbWUsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYm9vbCkgeworICAgICAgICBj
YWxsYmFjaygpOworICAgIH0pOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9y
Ojppc3N1ZVBhdXNlQ29tbWFuZChBVkRlbGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yUGF1c2VD
b21tYW5kICpwYXVzZUNvbW1hbmQsIENvbW1hbmRDb21wbGV0aW9uSGFuZGxlciYmIGNhbGxiYWNr
KQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNsaWVudCgpLT5wYXVzZVNlc3Npb24oW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldIChib29sKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlU2Vla0NvbW1hbmQo
QVZEZWxlZ2F0aW5nUGxheWJhY2tDb29yZGluYXRvclNlZWtDb21tYW5kICpzZWVrQ29tbWFuZCwg
Q29tbWFuZENvbXBsZXRpb25IYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFjbGllbnQo
KSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFDTVRJTUVfSVNfTlVNRVJJQyhzZWVrQ29tbWFuZC5pdGVtVGltZSkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjbGllbnQoKS0+c2Vla1Nlc3Npb25Ub1RpbWUoQ01UaW1lR2V0U2Vj
b25kcyhzZWVrQ29tbWFuZC5pdGVtVGltZSksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSAoYm9vbCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6Omlzc3VlQnVmZmVyaW5nQ29tbWFuZChBVkRl
bGVnYXRpbmdQbGF5YmFja0Nvb3JkaW5hdG9yQnVmZmVyaW5nQ29tbWFuZCAqLCBDb21tYW5kQ29t
cGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVz
Q29vcmRpbmF0b3I6Omlzc3VlUHJlcGFyZVRyYW5zaXRpb25Db21tYW5kKEFWRGVsZWdhdGluZ1Bs
YXliYWNrQ29vcmRpbmF0b3JQcmVwYXJlVHJhbnNpdGlvbkNvbW1hbmQgKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb24u
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFj
dGl2aXRpZXNTZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE2MzYyYjg5MDEzYTU1YjE0YTgyNmEzODY3
OWQ3Y2ZjZmQwMWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uLmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NF
U1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKworI2luY2x1ZGUg
PHd0Zi9PYnNlcnZlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVVJM
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CisKK09CSkNfQ0xBU1MgV0tHcm91cFNl
c3Npb247CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHcm91cEFjdGl2aXRpZXNTZXNz
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbj4geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbj4gY3JlYXRlKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7CisgICAg
fkdyb3VwQWN0aXZpdGllc1Nlc3Npb24oKTsKKworICAgIHZvaWQgam9pbigpOworICAgIHZvaWQg
bGVhdmUoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgV2Fp
dGluZywKKyAgICAgICAgSm9pbmVkLAorICAgICAgICBJbnZhbGlkYXRlZCwKKyAgICB9OworICAg
IFN0YXRlIHN0YXRlKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdXVpZCgpIGNvbnN0OworICAgIFVS
TCBmYWxsYmFja1VSTCgpIGNvbnN0OworCisgICAgdXNpbmcgU3RhdGVDaGFuZ2VPYnNlcnZlciA9
IFdURjo6T2JzZXJ2ZXI8dm9pZChjb25zdCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiwgU3RhdGUp
PjsKKyAgICB2b2lkIGFkZFN0YXRlQ2hhbmdlT2JzZXJ2ZXIoY29uc3QgU3RhdGVDaGFuZ2VPYnNl
cnZlciYpOworCisgICAgdXNpbmcgRmFsbGJhY2tVUkxPYnNlcnZlciA9IFdURjo6T2JzZXJ2ZXI8
dm9pZChjb25zdCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uJiwgVVJMKT47CisgICAgdm9pZCBhZGRG
YWxsYmFja1VSTE9ic2VydmVyKGNvbnN0IEZhbGxiYWNrVVJMT2JzZXJ2ZXImKTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOworICAg
IGZyaWVuZCBjbGFzcyBHcm91cEFjdGl2aXRpZXNDb29yZGluYXRvcjsKKyAgICBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uKFJldGFpblB0cjxXS0dyb3VwU2Vzc2lvbj4mJik7CisgICAgV0tHcm91cFNl
c3Npb24qIGdyb3VwU2Vzc2lvbigpIHsgcmV0dXJuIG1fZ3JvdXBTZXNzaW9uLmdldCgpOyB9CisK
KyAgICBSZXRhaW5QdHI8V0tHcm91cFNlc3Npb24+IG1fZ3JvdXBTZXNzaW9uOworICAgIFdlYWtI
YXNoU2V0PFN0YXRlQ2hhbmdlT2JzZXJ2ZXI+IG1fc3RhdGVDaGFuZ2VPYnNlcnZlcnM7CisgICAg
V2Vha0hhc2hTZXQ8RmFsbGJhY2tVUkxPYnNlcnZlcj4gbV9mYWxsYmFja1VSTE9ic2VydmVyczsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNz
aW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc0YjI3NjcxNzkzOWZkYWJkZWQ0MzkyY2JkNzBlYjUyNjU5MzRh
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91
cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5tbQpAQCAtMCwwICsxLDEwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhB
VkUoR1JPVVBfQUNUSVZJVElFUykKKworI2ltcG9ydCAiV0tHcm91cFNlc3Npb24uaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1JlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPiBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uOjpjcmVhdGUoUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24p
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbihXVEZN
b3ZlKHNlc3Npb24pKSk7Cit9CisKK0dyb3VwQWN0aXZpdGllc1Nlc3Npb246Okdyb3VwQWN0aXZp
dGllc1Nlc3Npb24oUmV0YWluUHRyPFdLR3JvdXBTZXNzaW9uPiYmIHNlc3Npb24pCisgICAgOiBt
X2dyb3VwU2Vzc2lvbihXVEZNb3ZlKHNlc3Npb24pKQoreworICAgIG1fZ3JvdXBTZXNzaW9uLmdl
dCgpLm5ld0FjdGl2aXR5Q2FsbGJhY2sgPSBbdGhpc10gKFdLVVJMQWN0aXZpdHkgKmFjdGl2aXR5
KSB7CisgICAgICAgIG1fZmFsbGJhY2tVUkxPYnNlcnZlcnMuZm9yRWFjaChbdGhpcywgYWN0aXZp
dHldIChhdXRvJiBvYnNlcnZlcikgeworICAgICAgICAgICAgb2JzZXJ2ZXIoKnRoaXMsIGFjdGl2
aXR5LmZhbGxiYWNrVVJMKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIG1fZ3JvdXBTZXNz
aW9uLmdldCgpLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gW3RoaXNdIChXS0dyb3VwU2Vzc2lvblN0
YXRlIHN0YXRlKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihT
dGF0ZTo6V2FpdGluZykgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRl
V2FpdGluZyksICJNZWRpYVNlc3Npb25Db29yZGluYXRvclN0YXRlOjpXYWl0aW5nICE9IFdLR3Jv
dXBTZXNzaW9uU3RhdGVXYWl0aW5nIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihTdGF0ZTo6Sm9pbmVkKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KFdLR3JvdXBT
ZXNzaW9uU3RhdGVKb2luZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JTdGF0ZTo6Sm9pbmVk
ICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlOjpJbnZhbGlkYXRlZCkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQpLCAiTWVkaWFTZXNzaW9uQ29vcmRp
bmF0b3JTdGF0ZTo6Q2xvc2VkICE9IFdLR3JvdXBTZXNzaW9uU3RhdGVJbnZhbGlkYXRlZCIpOwor
ICAgICAgICBtX3N0YXRlQ2hhbmdlT2JzZXJ2ZXJzLmZvckVhY2goW3RoaXMsIHN0YXRlXSAoYXV0
byYgb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIG9ic2VydmVyKCp0aGlzLCBzdGF0aWNfY2FzdDxT
dGF0ZT4oc3RhdGUpKTsKKyAgICAgICAgfSk7CisgICAgfTsKK30KKworR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbjo6fkdyb3VwQWN0aXZpdGllc1Nlc3Npb24oKQoreworICAgIG1fZ3JvdXBTZXNzaW9u
LmdldCgpLm5ld0FjdGl2aXR5Q2FsbGJhY2sgPSBuaWw7CisgICAgbV9ncm91cFNlc3Npb24uZ2V0
KCkuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBuaWw7Cit9CisKK3ZvaWQgR3JvdXBBY3Rpdml0aWVz
U2Vzc2lvbjo6am9pbigpCit7CisgICAgW21fZ3JvdXBTZXNzaW9uIGpvaW5dOworfQorCit2b2lk
IEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmxlYXZlKCkKK3sKKyAgICBbbV9ncm91cFNlc3Npb24g
bGVhdmVdOworfQorCithdXRvIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OnN0YXRlKCkgY29uc3Qg
LT4gU3RhdGUKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6
OldhaXRpbmcpID09IHN0YXRpY19jYXN0PHNpemVfdD4oV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRp
bmcpLCAiU3RhdGU6OldhaXRpbmcgIT0gV0tHcm91cFNlc3Npb25TdGF0ZVdhaXRpbmciKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGU6OkpvaW5lZCkgPT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihXS0dyb3VwU2Vzc2lvblN0YXRlSm9pbmVkKSwgIlN0YXRlOjpKb2lu
ZWQgIT0gV0tHcm91cFNlc3Npb25TdGF0ZUpvaW5lZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTdGF0ZTo6SW52YWxpZGF0ZWQpID09IHN0YXRpY19jYXN0PHNpemVf
dD4oV0tHcm91cFNlc3Npb25TdGF0ZUludmFsaWRhdGVkKSwgIlN0YXRlOjpJbnZhbGlkYXRlZCAh
PSBXS0dyb3VwU2Vzc2lvblN0YXRlSW52YWxpZGF0ZWQiKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RhdGU+KFttX2dyb3VwU2Vzc2lvbiBzdGF0ZV0pOworfQorCitTdHJpbmcgR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbjo6dXVpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2dyb3VwU2Vzc2lv
biB1dWlkXS5VVUlEU3RyaW5nOworfQorCitVUkwgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6ZmFs
bGJhY2tVUkwoKSBjb25zdAoreworICAgIHJldHVybiBbbV9ncm91cFNlc3Npb24gYWN0aXZpdHld
LmZhbGxiYWNrVVJMOworfQorCit2b2lkIEdyb3VwQWN0aXZpdGllc1Nlc3Npb246OmFkZFN0YXRl
Q2hhbmdlT2JzZXJ2ZXIoY29uc3QgU3RhdGVDaGFuZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCit7Cisg
ICAgbV9zdGF0ZUNoYW5nZU9ic2VydmVycy5hZGQob2JzZXJ2ZXIpOworfQorCit2b2lkIEdyb3Vw
QWN0aXZpdGllc1Nlc3Npb246OmFkZEZhbGxiYWNrVVJMT2JzZXJ2ZXIoY29uc3QgRmFsbGJhY2tV
UkxPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgbV9mYWxsYmFja1VSTE9ic2VydmVycy5hZGQo
b2JzZXJ2ZXIpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3Rp
Zmllci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvR3JvdXBBY3Rpdml0aWVzL0dy
b3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNWMwNGM1MWNlYWQz
MmFiZjkwMjllYjFkYTlhMjdmOTU4MjkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lv
bk5vdGlmaWVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpICYmIEhBVkUoR1JPVVBfQUNU
SVZJVElFUykKKworI2luY2x1ZGUgIkdyb3VwQWN0aXZpdGllc1Nlc3Npb24uaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBXS0dyb3VwU2Vzc2lvbk9ic2VydmVyOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R3JvdXBBY3Rpdml0
aWVzU2Vzc2lvbk5vdGlmaWVyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllciYgc2hhcmVkTm90
aWZpZXIoKTsKKworICAgIGJvb2wgaGFzU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmKTsKKyAgICBS
ZWZQdHI8R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbj4gdGFrZVNlc3Npb25Gb3JVUkwoY29uc3QgVVJM
Jik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uKGNvbnN0IEdyb3VwQWN0aXZpdGllc1Nlc3Npb24m
KTsKKworICAgIHZvaWQgYWRkV2ViUGFnZShXZWJQYWdlUHJveHkmKTsKKyAgICB2b2lkIHJlbW92
ZVdlYlBhZ2UoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCB3ZWJQYWdlVVJMQ2hhbmdlZChXZWJQ
YWdlUHJveHkmKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8
R3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyPjsKKyAgICBHcm91cEFjdGl2aXRpZXNTZXNz
aW9uTm90aWZpZXIoKTsKKworICAgIHZvaWQgc2Vzc2lvblN0YXRlQ2hhbmdlZChjb25zdCBHcm91
cEFjdGl2aXRpZXNTZXNzaW9uJiwgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbjo6U3RhdGUpOworCisg
ICAgSGFzaE1hcDxVUkwsIFJlZjxHcm91cEFjdGl2aXRpZXNTZXNzaW9uPj4gbV9zZXNzaW9uczsK
KyAgICBSZXRhaW5QdHI8V0tHcm91cFNlc3Npb25PYnNlcnZlcj4gbV9zZXNzaW9uT2JzZXJ2ZXI7
CisgICAgV2Vha0hhc2hTZXQ8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VzOworICAgIEdyb3VwQWN0
aXZpdGllc1Nlc3Npb246OlN0YXRlQ2hhbmdlT2JzZXJ2ZXIgbV9zdGF0ZUNoYW5nZU9ic2VydmVy
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL0dyb3VwQWN0aXZpdGllcy9Hcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MjdlYjg1NTg3ZmZiNDE5ZDUy
ZjYzZjU4MDE0YzAyNjRjNzQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlm
aWVyLm1tCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIuaCIKKworI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisK
KyNpbXBvcnQgIldLR3JvdXBTZXNzaW9uLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKwor
I2ltcG9ydCAiV2ViS2l0U3dpZnRTb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcm91cEFj
dGl2aXRpZXNTZXNzaW9uTm90aWZpZXImIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6
c2hhcmVkTm90aWZpZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHcm91cEFjdGl2
aXRpZXNTZXNzaW9uTm90aWZpZXI+IG5vdGlmaWVyOworICAgIHJldHVybiBub3RpZmllcjsKK30K
KworR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOjpHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Tm90aWZpZXIoKQorICAgIDogbV9zZXNzaW9uT2JzZXJ2ZXIoYWRvcHROUyhbYWxsb2NXS0dyb3Vw
U2Vzc2lvbk9ic2VydmVySW5zdGFuY2UoKSBpbml0XSkpCisgICAgLCBtX3N0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIoW3RoaXNdIChhdXRvJiBzZXNzaW9uLCBhdXRvIHN0YXRlKSB7IHNlc3Npb25TdGF0ZUNo
YW5nZWQoc2Vzc2lvbiwgc3RhdGUpOyB9KQoreworICAgIG1fc2Vzc2lvbk9ic2VydmVyLmdldCgp
Lm5ld1Nlc3Npb25DYWxsYmFjayA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSAoV0tHcm91cFNlc3Npb24gKmdyb3VwU2Vzc2lvbikgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gc2Vzc2lvbiA9IEdyb3VwQWN0
aXZpdGllc1Nlc3Npb246OmNyZWF0ZShncm91cFNlc3Npb24pOworICAgICAgICBzZXNzaW9uLT5h
ZGRTdGF0ZUNoYW5nZU9ic2VydmVyKG1fc3RhdGVDaGFuZ2VPYnNlcnZlcik7CisKKyAgICAgICAg
Zm9yIChhdXRvJiBwYWdlIDogY29weVRvVmVjdG9yKG1fd2ViUGFnZXMpKSB7CisgICAgICAgICAg
ICBpZiAocGFnZS0+bWFpbkZyYW1lKCkgJiYgcGFnZS0+bWFpbkZyYW1lKCktPnVybCgpID09IHNl
c3Npb24tPmZhbGxiYWNrVVJMKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdG9y
ID0gR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3I6OmNyZWF0ZShzZXNzaW9uKTsKKyAgICAgICAg
ICAgICAgICBwYWdlLT5jcmVhdGVNZWRpYVNlc3Npb25Db29yZGluYXRvcihXVEZNb3ZlKGNvb3Jk
aW5hdG9yKSwgW10gKGJvb2wpIHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25zLmFk
ZChzZXNzaW9uLT5mYWxsYmFja1VSTCgpLCBzZXNzaW9uLmNvcHlSZWYoKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICAgICAgW1tOU1dv
cmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6c2Vzc2lvbi0+ZmFsbGJhY2tVUkwoKV07
CisgICAgfTsKK30KKwordm9pZCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnNlc3Np
b25TdGF0ZUNoYW5nZWQoY29uc3QgR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbiYgc2Vzc2lvbiwgR3Jv
dXBBY3Rpdml0aWVzU2Vzc2lvbjo6U3RhdGUgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlID09IEdy
b3VwQWN0aXZpdGllc1Nlc3Npb246OlN0YXRlOjpJbnZhbGlkYXRlZCkKKyAgICAgICAgbV9zZXNz
aW9ucy5yZW1vdmUoc2Vzc2lvbi5mYWxsYmFja1VSTCgpKTsKK307CisKK3ZvaWQgR3JvdXBBY3Rp
dml0aWVzU2Vzc2lvbk5vdGlmaWVyOjphZGRXZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkK
K3sKKyAgICBBU1NFUlQoIW1fd2ViUGFnZXMuY29udGFpbnMod2ViUGFnZSkpOworICAgIG1fd2Vi
UGFnZXMuYWRkKHdlYlBhZ2UpOworCisgICAgYXV0byBmcmFtZSA9IHdlYlBhZ2UubWFpbkZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzZXNzaW9u
ID0gdGFrZVNlc3Npb25Gb3JVUkwoZnJhbWUtPnVybCgpKTsKKyAgICBpZiAoIXNlc3Npb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29vcmRpbmF0b3IgPSBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvcjo6Y3JlYXRlKCpzZXNzaW9uKTsKKyAgICB3ZWJQYWdlLmNyZWF0ZU1lZGlhU2Vz
c2lvbkNvb3JkaW5hdG9yKFdURk1vdmUoY29vcmRpbmF0b3IpLCBbXSAoYm9vbCkgeyB9KTsKK30K
Kwordm9pZCBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OnJlbW92ZVdlYlBhZ2UoV2Vi
UGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIEFTU0VSVChtX3dlYlBhZ2VzLmNvbnRhaW5zKHdl
YlBhZ2UpKTsKKyAgICBtX3dlYlBhZ2VzLnJlbW92ZSh3ZWJQYWdlKTsKK30KKwordm9pZCBHcm91
cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXI6OndlYlBhZ2VVUkxDaGFuZ2VkKFdlYlBhZ2VQcm94
eSYgd2ViUGFnZSkKK3sKKyAgICBBU1NFUlQobV93ZWJQYWdlcy5jb250YWlucyh3ZWJQYWdlKSk7
CisgICAgaWYgKCFtX3dlYlBhZ2VzLmNvbnRhaW5zKHdlYlBhZ2UpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGZyYW1lID0gd2ViUGFnZS5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNlc3Npb24gPSB0YWtlU2Vzc2lvbkZvclVS
TChmcmFtZS0+dXJsKCkpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBjb29yZGluYXRvciA9IEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yOjpjcmVhdGUo
KnNlc3Npb24pOworICAgIHdlYlBhZ2UuY3JlYXRlTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3IoV1RG
TW92ZShjb29yZGluYXRvciksIFtdIChib29sKSB7IH0pOworfQorCitib29sIEdyb3VwQWN0aXZp
dGllc1Nlc3Npb25Ob3RpZmllcjo6aGFzU2Vzc2lvbkZvclVSTChjb25zdCBVUkwmIHVybCkKK3sK
KyAgICByZXR1cm4gbV9zZXNzaW9ucy5jb250YWlucyh1cmwpOworfQorCitSZWZQdHI8R3JvdXBB
Y3Rpdml0aWVzU2Vzc2lvbj4gR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyOjp0YWtlU2Vz
c2lvbkZvclVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gbV9zZXNzaW9ucy50YWtl
KHVybCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ1ZGViZWM1NTlkYzA3MDc1ZTk3MzM2YjU2NjQ1NGYzYmI5MGJhOWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMv
V0tHcm91cFNlc3Npb24uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBXS0dyb3VwU2Vzc2lvblN0YXRlKSB7CisgICAgV0tHcm91cFNlc3Npb25T
dGF0ZVdhaXRpbmcgPSAwLAorICAgIFdLR3JvdXBTZXNzaW9uU3RhdGVKb2luZWQgPSAxLAorICAg
IFdLR3JvdXBTZXNzaW9uU3RhdGVJbnZhbGlkYXRlZCA9IDIsCit9OworCitAY2xhc3MgQVZQbGF5
YmFja0Nvb3JkaW5hdG9yOworQGNsYXNzIE5TVVJMOworQGNsYXNzIE5TVVVJRDsKK0BjbGFzcyBX
S0dyb3VwU2Vzc2lvbjsKK0BjbGFzcyBXS1VSTEFjdGl2aXR5OworCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitAaW50ZXJmYWNlIFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIgOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF4gX051bGxhYmxlIG5ld1Nlc3Npb25D
YWxsYmFjaykoV0tHcm91cFNlc3Npb24gKik7CistIChub25udWxsIGluc3RhbmNldHlwZSlpbml0
OworQGVuZAorCitAaW50ZXJmYWNlIFdLR3JvdXBTZXNzaW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBXS1VSTEFjdGl2aXR5ICphY3Rpdml0eTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNVVUlEICp1dWlkOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0dyb3VwU2Vzc2lvblN0YXRlIHN0YXRlOwor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF4gX051bGxhYmxlIG5ld0FjdGl2aXR5
Q2FsbGJhY2spKFdLVVJMQWN0aXZpdHkgKik7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
dm9pZCAoXiBfTnVsbGFibGUgc3RhdGVDaGFuZ2VkQ2FsbGJhY2spKFdLR3JvdXBTZXNzaW9uU3Rh
dGUpOworLSAodm9pZClqb2luOworLSAodm9pZClsZWF2ZTsKKy0gKHZvaWQpY29vcmRpbmF0ZVdp
dGhDb29yZGluYXRvcjooQVZQbGF5YmFja0Nvb3JkaW5hdG9yICopcGxheWJhY2tDb29yZGluYXRv
cjsKK0BlbmQKKworQGludGVyZmFjZSBXS1VSTEFjdGl2aXR5IDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1VSTCAqIF9OdWxsYWJsZSBmYWxsYmFja1VSTDsKK0BlbmQK
KworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uc3dpZnQgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Hcm91cEFjdGl2aXRpZXMvV0tHcm91cFNlc3Npb24uc3dp
ZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzEyNTE1NmMxZjcyYjFlZDdlMjVjODQzODg5NjViYzc5NjlmMDE5OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0dyb3VwQWN0
aXZpdGllcy9XS0dyb3VwU2Vzc2lvbi5zd2lmdApAQCAtMCwwICsxLDE1MiBAQAorLy8gQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworLy8gYXJlIG1ldDoKKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisvLyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKy8vIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKy8v
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworLy8gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLy8gQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKy8vIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworLy8gSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKy8vIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisvLyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBj
YW5JbXBvcnQoR3JvdXBBY3Rpdml0aWVzKQorCitpbXBvcnQgQVZGb3VuZGF0aW9uCitpbXBvcnQg
Q29tYmluZQorQF9zcGkoU2FmYXJpKSBpbXBvcnQgR3JvdXBBY3Rpdml0aWVzCitpbXBvcnQgRm91
bmRhdGlvbgorCitAb2JqYyBwdWJsaWMgZW51bSBXS0dyb3VwU2Vzc2lvblN0YXRlIDogSW50IHsK
KyAgICBjYXNlIHdhaXRpbmcgPSAwCisgICAgY2FzZSBqb2luZWQgPSAxCisgICAgY2FzZSBpbnZh
bGlkYXRlZCA9IDIKK30KKworQG9iamMoV0tVUkxBY3Rpdml0eSkKK3B1YmxpYyBmaW5hbCBjbGFz
cyBXS1VSTEFjdGl2aXR5V3JhcHBlciA6IE5TT2JqZWN0IHsKKyAgICBwcml2YXRlIHZhciB1cmxB
Y3Rpdml0eTogVVJMQWN0aXZpdHkKKyAgICBpbml0KGFjdGl2aXR5OiBVUkxBY3Rpdml0eSkgewor
ICAgICAgICBzZWxmLnVybEFjdGl2aXR5ID0gYWN0aXZpdHkKKyAgICAgICAgc3VwZXIuaW5pdCgp
CisgICAgfQorCisgICAgQG9iamMgcHVibGljIHZhciBmYWxsYmFja1VSTDogVVJMPyB7CisgICAg
ICAgIHJldHVybiBzZWxmLnVybEFjdGl2aXR5LndlYnBhZ2VVUkwKKyAgICB9Cit9CisKK0BvYmpj
KFdLR3JvdXBTZXNzaW9uKQorcHVibGljIGZpbmFsIGNsYXNzIFdLR3JvdXBTZXNzaW9uV3JhcHBl
ciA6IE5TT2JqZWN0IHsKKyAgICBwcml2YXRlIHZhciBncm91cFNlc3Npb246IEdyb3VwU2Vzc2lv
bjxVUkxBY3Rpdml0eT4KKyAgICBwcml2YXRlIHZhciBhY3Rpdml0eVdyYXBwZXIgOiBXS1VSTEFj
dGl2aXR5V3JhcHBlcgorICAgIHByaXZhdGUgdmFyIGNhbmNlbGxhYmxlczogU2V0PEFueUNhbmNl
bGxhYmxlPiA9IFtdCisKKyAgICBpbml0KGdyb3VwU2Vzc2lvbjogR3JvdXBTZXNzaW9uPFVSTEFj
dGl2aXR5PikgeworICAgICAgICBzZWxmLmdyb3VwU2Vzc2lvbiA9IGdyb3VwU2Vzc2lvbgorICAg
ICAgICBzZWxmLmFjdGl2aXR5V3JhcHBlciA9IFdLVVJMQWN0aXZpdHlXcmFwcGVyKGFjdGl2aXR5
OiBncm91cFNlc3Npb24uYWN0aXZpdHkpCisKKyAgICAgICAgc3VwZXIuaW5pdCgpCisKKyAgICAg
ICAgc2VsZi5ncm91cFNlc3Npb24uJGFjdGl2aXR5CisgICAgICAgICAgICAuc2luayB7IFt1bm93
bmVkIHNlbGZdIGluIHNlbGYuYWN0aXZpdHlDaGFuZ2VkKGFjdGl2aXR5OiAkMCkgfQorICAgICAg
ICAgICAgLnN0b3JlKGluOiAmY2FuY2VsbGFibGVzKQorICAgICAgICBzZWxmLmdyb3VwU2Vzc2lv
bi4kc3RhdGUKKyAgICAgICAgICAgIC5zaW5rIHsgW3Vub3duZWQgc2VsZl0gaW4gc2VsZi5zdGF0
ZUNoYW5nZWQoc3RhdGU6ICQwKSB9CisgICAgICAgICAgICAuc3RvcmUoaW46ICZjYW5jZWxsYWJs
ZXMpCisgICAgfQorCisgICAgQG9iamMgcHVibGljIHZhciBhY3Rpdml0eTogV0tVUkxBY3Rpdml0
eVdyYXBwZXIgeyBzZWxmLmFjdGl2aXR5V3JhcHBlciB9CisgICAgQG9iamMgcHVibGljIHZhciB1
dWlkOiBVVUlEIHsgZ3JvdXBTZXNzaW9uLmlkIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZ1bmMg
d3JhcHBlclNlc3Npb25TdGF0ZShzdGF0ZTogR3JvdXBTZXNzaW9uPFVSTEFjdGl2aXR5Pi5TdGF0
ZSkgLT4gV0tHcm91cFNlc3Npb25TdGF0ZSB7CisgICAgICAgIHN3aXRjaCBzdGF0ZSB7CisgICAg
ICAgIGNhc2UgLndhaXRpbmc6CisgICAgICAgICAgICByZXR1cm4gV0tHcm91cFNlc3Npb25TdGF0
ZS53YWl0aW5nCisgICAgICAgIGNhc2UgLmpvaW5lZDoKKyAgICAgICAgICAgIHJldHVybiBXS0dy
b3VwU2Vzc2lvblN0YXRlLmpvaW5lZAorICAgICAgICBjYXNlIC5pbnZhbGlkYXRlZDoKKyAgICAg
ICAgICAgIHJldHVybiBXS0dyb3VwU2Vzc2lvblN0YXRlLmludmFsaWRhdGVkCisgICAgICAgIEB1
bmtub3duIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBVbmFudGljaXBhdGVkIHN0YXRlIHZhbHVl
LgorICAgICAgICAgICAgYXNzZXJ0aW9uRmFpbHVyZSgpCisgICAgICAgICAgICByZXR1cm4gV0tH
cm91cFNlc3Npb25TdGF0ZS5pbnZhbGlkYXRlZAorICAgICAgICB9CisgICAgfQorCisgICAgQG9i
amMgcHVibGljIHZhciBzdGF0ZTogV0tHcm91cFNlc3Npb25TdGF0ZSB7CisgICAgICAgIHJldHVy
biBXS0dyb3VwU2Vzc2lvbldyYXBwZXIud3JhcHBlclNlc3Npb25TdGF0ZShzdGF0ZTogZ3JvdXBT
ZXNzaW9uLnN0YXRlKQorICAgIH0KKworICAgIEBvYmpjIHB1YmxpYyB2YXIgbmV3QWN0aXZpdHlD
YWxsYmFjazogKChXS1VSTEFjdGl2aXR5V3JhcHBlcikgLT4gVm9pZCk/CisgICAgQG9iamMgcHVi
bGljIHZhciBzdGF0ZUNoYW5nZWRDYWxsYmFjazogKChXS0dyb3VwU2Vzc2lvblN0YXRlKSAtPiBW
b2lkKT8KKworICAgIEBvYmpjIHB1YmxpYyBmdW5jIGpvaW4oKSB7CisgICAgICAgIGdyb3VwU2Vz
c2lvbi5qb2luKCkKKyAgICB9CisKKyAgICBAb2JqYyBwdWJsaWMgZnVuYyBsZWF2ZSgpIHsKKyAg
ICAgICAgZ3JvdXBTZXNzaW9uLmxlYXZlKCkKKyAgICB9CisKKyAgICBAb2JqYyhjb29yZGluYXRl
V2l0aENvb3JkaW5hdG9yOikKKyAgICBwdWJsaWMgZnVuYyBjb29yZGluYXRlKGNvb3JkaW5hdG9y
OiBBVlBsYXliYWNrQ29vcmRpbmF0b3IpIHsKKyAgICAgICAgY29vcmRpbmF0b3IuY29vcmRpbmF0
ZVdpdGhTZXNzaW9uKHNlbGYuZ3JvdXBTZXNzaW9uKQorICAgIH0KKworICAgIHByaXZhdGUgZnVu
YyBhY3Rpdml0eUNoYW5nZWQoYWN0aXZpdHk6IFVSTEFjdGl2aXR5KSB7CisgICAgICAgIHNlbGYu
YWN0aXZpdHlXcmFwcGVyID0gV0tVUkxBY3Rpdml0eVdyYXBwZXIoYWN0aXZpdHk6IGdyb3VwU2Vz
c2lvbi5hY3Rpdml0eSkKKworICAgICAgICBndWFyZCBsZXQgY2FsbGJhY2sgPSBuZXdBY3Rpdml0
eUNhbGxiYWNrIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIH0KKworICAgICAg
ICBjYWxsYmFjayhhY3Rpdml0eVdyYXBwZXIpCisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jIHN0
YXRlQ2hhbmdlZChzdGF0ZTogR3JvdXBTZXNzaW9uPFVSTEFjdGl2aXR5Pi5TdGF0ZSkgeworICAg
ICAgICBndWFyZCBsZXQgY2FsbGJhY2sgPSBzdGF0ZUNoYW5nZWRDYWxsYmFjayBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2soV0tHcm91cFNl
c3Npb25XcmFwcGVyLndyYXBwZXJTZXNzaW9uU3RhdGUoc3RhdGU6IHN0YXRlKSkKKyAgICB9Cit9
CisKK0BvYmpjKFdLR3JvdXBTZXNzaW9uT2JzZXJ2ZXIpCitwdWJsaWMgY2xhc3MgV0tHcm91cFNl
c3Npb25PYnNlcnZlciA6IE5TT2JqZWN0IHsKKyAgICBAb2JqYyBwdWJsaWMgdmFyIG5ld1Nlc3Np
b25DYWxsYmFjazogKChXS0dyb3VwU2Vzc2lvbldyYXBwZXIpIC0+IFZvaWQpPworCisgICAgcHJp
dmF0ZSB2YXIgb2JzZXJ2ZXIgPSBHcm91cFNlc3Npb25PYnNlcnZlcihmb3I6IFVSTEFjdGl2aXR5
LnNlbGYpCisgICAgcHJpdmF0ZSB2YXIgY2FuY2VsbGFibGVzOiBTZXQ8QW55Q2FuY2VsbGFibGU+
ID0gW10KKworICAgIEBvYmpjIHB1YmxpYyBvdmVycmlkZSBpbml0KCkgeworICAgICAgICBzdXBl
ci5pbml0KCkKKworICAgICAgICBvYnNlcnZlcgorICAgICAgICAgICAgLnNpbmsgeyBbdW5vd25l
ZCBzZWxmXSBpbiBzZWxmLnJlY2lldmVkU2Vzc2lvbigkMCkgfQorICAgICAgICAgICAgLnN0b3Jl
KGluOiAmY2FuY2VsbGFibGVzKQorICAgIH0KKworICAgIHByaXZhdGUgZnVuYyByZWNpZXZlZFNl
c3Npb24oXyBzZXNzaW9uOiBHcm91cFNlc3Npb248VVJMQWN0aXZpdHk+KSB7CisgICAgICAgIGd1
YXJkIGxldCBjYWxsYmFjayA9IG5ld1Nlc3Npb25DYWxsYmFjayBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICB9CisKKyAgICAgICAgbGV0IHNlc3Npb25XcmFwcGVyID0gV0tHcm91
cFNlc3Npb25XcmFwcGVyKGdyb3VwU2Vzc2lvbjogc2Vzc2lvbikKKyAgICAgICAgY2FsbGJhY2so
c2Vzc2lvbldyYXBwZXIpCisgICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYktpdFN3aWZ0U29mdExpbmsuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYktpdFN3aWZ0U29mdExpbmsuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTZk
YTA1NTQ5ZTY1ZGQ1NjMzZDhlMTIyN2FiYWQ2YWFlMjVhNTM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViS2l0U3dpZnRTb2Z0TGluay5oCkBAIC0w
LDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8d3RmL1Nv
ZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJSQVJZX0ZPUl9IRUFERVIoV2ViS2l0LCBXZWJL
aXRTd2lmdCkKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgV0tHcm91cFNlc3Np
b25PYnNlcnZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YktpdFN3aWZ0U29mdExpbmsubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJL
aXRTd2lmdFNvZnRMaW5rLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlYzExNzQzYmIxZDhmMzlhMjUwYjUxYjNl
NTc4NGJhZTFlNTBlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJLaXRTd2lmdFNvZnRMaW5rLm1tCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitleHRlcm4gdm9pZCogV2ViS2l0U3dpZnRMaWJyYXJ5KGJv
b2wgaXNPcHRpb25hbCA9IGZhbHNlKTsKK3ZvaWQqIFdlYktpdFN3aWZ0TGlicmFyeShib29sIGlz
T3B0aW9uYWwpCit7CisgICAgc3RhdGljIHZvaWQqIGxpYnJhcnk7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICAgIC8v
IFN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGxpYnJhcnkgaW4gRFlMRF9MSUJSQVJZX1BBVEg6
CisgICAgICAgIGlmICgobGlicmFyeSA9IGRsb3BlbigibGliV2ViS2l0U3dpZnQuZHlsaWIiLCBS
VExEX05PVykpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFRoZW4gc2VhcmNo
IGluIHRoZSBGcmFtZXdvcmtzLyBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmVy
c2lvbiBvZiBXZWJLaXQuZnJhbWV3b3JrOgorICAgICAgICBEbF9pbmZvIGluZm8geyB9OworICAg
ICAgICBpZiAoZGxhZGRyKChjb25zdCB2b2lkKikmV2ViS2l0U3dpZnRMaWJyYXJ5LCAmaW5mbykg
JiYgc3RybGVuKGluZm8uZGxpX2ZuYW1lKSkgeworICAgICAgICAgICAgYXV0byB3ZWJraXRGcmFt
ZXdvcmtEaXJlY3RvcnkgPSBXVEY6OkZpbGVTeXN0ZW1JbXBsOjpwYXJlbnRQYXRoKGluZm8uZGxp
X2ZuYW1lKTsKKyAgICAgICAgICAgIGF1dG8gZHlsaWJQYXRoID0gV1RGOjpGaWxlU3lzdGVtSW1w
bDo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHdlYmtpdEZyYW1ld29ya0RpcmVjdG9yeSwgIkZy
YW1ld29ya3MvbGliV2ViS2l0U3dpZnQuZHlsaWIiKTsKKyAgICAgICAgICAgIGlmICgobGlicmFy
eSA9IGRsb3BlbihkeWxpYlBhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9OT1cpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlzT3B0aW9uYWwpCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UobGlicmFyeSwgIiVzIiwgZGxl
cnJvcigpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gbGlicmFyeTsKK30KKworfQorCitTT0ZUX0xJ
TktfQ0xBU1NfRk9SX1NPVVJDRV9PUFRJT05BTChXZWJLaXQsIFdlYktpdFN3aWZ0LCBXS0dyb3Vw
U2Vzc2lvbk9ic2VydmVyKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVSZW1vdGVJ
T1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCmluZGV4IDA2NmM5NTljM2E3OGNl
Y2UzNmE3NWIwNzAzOGQwODAwNDU5NzE2NmYuLjVhMTNhOTczNjYyOWQ2YTEzMTAyMjU5YWNhYmFm
MjNkNTBmNzIyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCitPQkpD
X0NMQVNTIFVJU2Nyb2xsVmlldzsKKwogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDlkOTY4MDYxNDIzYjc5NTVjM2MzN2FkZGU1
MjdkYzdjZWMzMjhlODkuLjAyMDdiOTQyMDFmMzEyYjNlYzYyMjE5NDY0YzM5MTU0OTAzYmRhYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjk5LDEyICsy
OTksOCBAQAogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHlQcml2YXRlLmgi
CiAjaW5jbHVkZSAiUmVtb3RlTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eS5oIgogCi0jaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS0Nvb3Jk
aW5hdG9yQWRkaXRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBXRUJQQUdFUFJPWFlfQ09OU1RSVUNU
T1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMKLSNkZWZpbmUgV0VCUEFHRVBST1hZX0RFU1RSVUNU
T1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMKLSNkZWZpbmUgV0VCUEFHRVBST1hZX0RJRENPTU1J
VExPQURGT1JGUkFNRV9XS0NPT1JESU5BVE9SX0FERElUSU9OUworI2lmIEhBVkUoR1JPVVBfQUNU
SVZJVElFUykKKyNpbmNsdWRlICJHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZpZXIuaCIKICNl
bmRpZgogI2VuZGlmCiAKQEAgLTU2NSw4ICs1NjEsOCBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFJl
ZgogICAgICAgICBwcm9jZXNzLnNldElnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZygpOwog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikKLSAgICBXRUJQ
QUdFUFJPWFlfQ09OU1RSVUNUT1JfV0tDT09SRElOQVRPUl9BRERJVElPTlMKKyNpZiBFTkFCTEUo
TUVESUFfU0VTU0lPTl9DT09SRElOQVRPUikgJiYgSEFWRShHUk9VUF9BQ1RJVklUSUVTKQorICAg
IEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllcjo6c2hhcmVkTm90aWZpZXIoKS5hZGRXZWJQ
YWdlKCp0aGlzKTsKICNlbmRpZgogfQogCkBAIC02MDQsOCArNjAwLDggQEAgV2ViUGFnZVByb3h5
Ojp+V2ViUGFnZVByb3h5KCkKICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9uZXh0QWN0aXZp
dHlTdGF0ZUNoYW5nZUNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2soKTsKIAotI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKQotICAgIFdFQlBBR0VQUk9YWV9ERVNUUlVDVE9S
X1dLQ09PUkRJTkFUT1JfQURESVRJT05TCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJ
TkFUT1IpICYmIEhBVkUoR1JPVVBfQUNUSVZJVElFUykKKyAgICBHcm91cEFjdGl2aXRpZXNTZXNz
aW9uTm90aWZpZXI6OnNoYXJlZE5vdGlmaWVyKCkucmVtb3ZlV2ViUGFnZSgqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNDg5MSw4ICs0ODg3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1p
dExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYKICAg
ICAgICAgcmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKICNlbmRpZgogCi0j
aWYgRU5BQkxFKE1FRElBX1NFU1NJT05fQ09PUkRJTkFUT1IpCi0gICAgV0VCUEFHRVBST1hZX0RJ
RENPTU1JVExPQURGT1JGUkFNRV9XS0NPT1JESU5BVE9SX0FERElUSU9OUworI2lmIEVOQUJMRShN
RURJQV9TRVNTSU9OX0NPT1JESU5BVE9SKSAmJiBIQVZFKEdST1VQX0FDVElWSVRJRVMpCisgICAg
aWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICBHcm91cEFjdGl2aXRpZXNTZXNzaW9u
Tm90aWZpZXI6OnNoYXJlZE5vdGlmaWVyKCkud2ViUGFnZVVSTENoYW5nZWQoKnRoaXMpOwogI2Vu
ZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDE0ODIxOTIxZTQ3NGQyNzRhZDdlMDkwMGQ3NGQ2YjE3NjNiODZmMDMuLjg4MDI4
ZWY4NDM2OWIwZDU5MzBkMmE4OTk5ZmUzMTQzMjlhMTFkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMyw3ICszLDcgQEAKIAlhcmNo
aXZlVmVyc2lvbiA9IDE7CiAJY2xhc3NlcyA9IHsKIAl9OwotCW9iamVjdFZlcnNpb24gPSA1MjsK
KwlvYmplY3RWZXJzaW9uID0gNTQ7CiAJb2JqZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQWdncmVn
YXRlVGFyZ2V0IHNlY3Rpb24gKi8KQEAgLTE5MDIsNyArMTkwMiw2IEBACiAJCUNENzhFMTE5MURC
N0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzhFMTE4MURCN0U1QUQwMDE0QTJERSAv
KiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlDRDgyNTJERTI1RDQ5MTZDMDA4NjJGRDggLyogUmVtb3RlUmVt
b3RlQ29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjUyREEyNUQ0OTE1NDAwODYyRkQ4
IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJQ0Q4MjUyRTIyNUQ0OTE5MTAwODYyRkQ4IC8qIFJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDgyNTJFMDI1RDQ5MTg0MDA4NjJGRDggLyogUmVtb3RlUmVtb3Rl
Q29tbWFuZExpc3RlbmVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJQ0Q5NTQ5NDMyNjE1
OTE3QjAwODM3MkQ5IC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0IGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGMTdDQzMyNjBFOEZBQjAwRjBBNEU4IC8qIFdL
R3JvdXBTZXNzaW9uLnN3aWZ0ICovOyB9OwogCQlDREEwNDFGNDFBQ0UyMTA1MDA0QTEzRUMgLyog
QmFja0JvYXJkU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEQTA0MUYzMUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNl
c1NQSS5oICovOyB9OwogCQlDREEyOUExQjFDQkRCRjQxMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMTkxQ0JEQkY0MTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXIuaCAq
LzsgfTsKIAkJQ0RBMjlBMjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
ICovOyB9OwpAQCAtMTkzNiw2ICsxOTM1LDggQEAKIAkJQ0RFNTU1MzMyNDA2RUI4QzAwOEEzRERC
IC8qIFJlbW90ZUxlZ2FjeUNETVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTU1NTJBMjQwNkI4OTYwMDhBM0RE
QiAvKiBSZW1vdGVMZWdhY3lDRE1Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUNE
RTU1NTM0MjQwNkVCOEMwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERTU1NTJFMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJQ0RFNTU1MzUyNDA2RUI4QzAwOEEzRERCIC8qIFJlbW90
ZUxlZ2FjeUNETVNlc3Npb25Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU1NTUzMTI0MDZCODk3MDA4QTNEREIg
LyogUmVtb3RlTGVnYWN5Q0RNU2Vzc2lvblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
KwkJQ0RGMUI5MTUyNjZGMzk2QTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0IGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGMUI5MEQyNjZGMzk1
RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0ICovOyB9OworCQlDREYxQjkxQjI2NzAy
NTU1MDAwN0VDMTAgLyogV2ViS2l0U3dpZnRTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjFCOTFBMjY3MDIxRDYwMDA3RUMxMCAvKiBX
ZWJLaXRTd2lmdFNvZnRMaW5rLm1tICovOyB9OwogCQlDRTExQUQ1MjFDQkM0ODJGMDA2ODFFRTUg
LyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENFMTFBRDUxMUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZy5oICovOyB9Owog
CQlDRTFBMEJENjFBNDhFNkM2MDA1NEVGNzQgLyogVENDU1BJLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTFBMEJEMDFBNDhFNkM2MDA1NEVGNzQgLyog
VENDU1BJLmggKi87IH07CiAJCUNFMUEwQkQ3MUE0OEU2QzYwMDU0RUY3NCAvKiBUZXh0SW5wdXRT
UEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMUEw
QkQxMUE0OEU2QzYwMDU0RUY3NCAvKiBUZXh0SW5wdXRTUEkuaCAqLzsgfTsKQEAgLTU4MDgsNiAr
NTgwOSwxNiBAQAogCQlDREU1NTUzMDI0MDZCODk3MDA4QTNEREIgLyogUmVtb3RlTGVnYWN5Q0RN
U2Vzc2lvbk1lc3NhZ2VzUmVwbGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVMZWdhY3lDRE1T
ZXNzaW9uTWVzc2FnZXNSZXBsaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
RTU1NTMxMjQwNkI4OTcwMDhBM0REQiAvKiBSZW1vdGVMZWdhY3lDRE1TZXNzaW9uUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlTGVnYWN5Q0RNU2Vzc2lv
blByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RGMTdDQzMyNjBFOEZBQjAwRjBBNEU4IC8qIFdLR3JvdXBTZXNzaW9uLnN3aWZ0ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5zd2lmdDsgcGF0aCA9IFdLR3JvdXBTZXNzaW9uLnN3aWZ0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkwRDI2NkYzOTVFMDAwN0VDMTAgLyogV0tHcm91
cFNlc3Npb24uc3dpZnQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLnN3aWZ0OyBwYXRoID0gV0tHcm91cFNlc3Npb24uc3dpZnQ7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTBFMjY2RjM5NUUwMDA3RUMxMCAvKiBH
cm91cEFjdGl2aXRpZXNTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyb3VwQWN0aXZpdGllc1Nl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGMUI5MEYyNjZGMzk1RTAw
MDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gR3JvdXBBY3Rpdml0aWVzQ29vcmRpbmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNERjFCOTEwMjY2RjM5NUUwMDA3RUMxMCAvKiBXS0dyb3VwU2Vzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0dyb3VwU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDREYxQjkxMTI2NkYzOTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyb3VwQWN0aXZpdGllc1Nlc3Npb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjFCOTEyMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91
cEFjdGl2aXRpZXNDb29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcm91cEFjdGl2aXRpZXND
b29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkxMzI2NkYz
OTVFMDAwN0VDMTAgLyogR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gR3JvdXBBY3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkxNDI2NkYzOTVGMDAwN0VDMTAgLyogR3JvdXBB
Y3Rpdml0aWVzU2Vzc2lvbk5vdGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyb3VwQWN0aXZpdGll
c1Nlc3Npb25Ob3RpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREYxQjkx
OTI2NzAyMUQ2MDAwN0VDMTAgLyogV2ViS2l0U3dpZnRTb2Z0TGluay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJLaXRTd2lmdFNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
RjFCOTFBMjY3MDIxRDYwMDA3RUMxMCAvKiBXZWJLaXRTd2lmdFNvZnRMaW5rLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViS2l0U3dpZnRTb2Z0TGluay5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0UxMUFENEYxQ0JDNDdGODAwNjgxRUU1IC8qIENvZGVTaWduaW5nLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29kZVNpZ25pbmcubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMTFBRDUxMUNCQzQ4MkYwMDY4MUVFNSAvKiBD
b2RlU2lnbmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU2lnbmlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTFBMEJEMDFBNDhFNkM2MDA1NEVG
NzQgLyogVENDU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDQ1NQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjk5OSw2ICs3MDEwLDcgQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0RGMTdDOTMyNjBEM0I1MjAwRjBB
NEU4IC8qIENvb3JkaW5hdG9yICovLAorCQkJCUNERjFCOTBDMjY2RjM5NUUwMDA3RUMxMCAvKiBH
cm91cEFjdGl2aXRpZXMgKi8sCiAJCQkJNTdGRDMxNkIyMkIzMzY3RTAwOEQwRThCIC8qIFNPQXV0
aG9yaXphdGlvbiAqLywKIAkJCQk5OUM4MUQ1NTFDMjBERkJFMDA1QzRDODIgLyogQXV0b21hdGlv
bkNsaWVudC5oICovLAogCQkJCTk5QzgxRDU2MUMyMERGQkUwMDVDNEM4MiAvKiBBdXRvbWF0aW9u
Q2xpZW50Lm1tICovLApAQCAtNzA1Myw2ICs3MDY1LDggQEAKIAkJCQk1MkQ1QTFBQzFDNTc0OTRF
MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovLAogCQkJCUMxOEYz
QTEzMjU2MzMyQTYwMDc5N0U2NiAvKiBXZWJJbnNwZWN0b3JQcmVmZXJlbmNlT2JzZXJ2ZXIuaCAq
LywKIAkJCQlDMThGM0ExNDI1NjMzMzQzMDA3OTdFNjYgLyogV2ViSW5zcGVjdG9yUHJlZmVyZW5j
ZU9ic2VydmVyLm1tICovLAorCQkJCUNERjFCOTE5MjY3MDIxRDYwMDA3RUMxMCAvKiBXZWJLaXRT
d2lmdFNvZnRMaW5rLmggKi8sCisJCQkJQ0RGMUI5MUEyNjcwMjFENjAwMDdFQzEwIC8qIFdlYktp
dFN3aWZ0U29mdExpbmsubW0gKi8sCiAJCQkJMUFDMDI3M0UxOTY2MjJENjAwQzEyQjc1IC8qIFdl
YlBhZ2VQcm94eUNvY29hLm1tICovLAogCQkJCTdDNDY5NENCMUE0QjUxMEEwMEFENTg0NSAvKiBX
ZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLywKIAkJCQlBMzkzN0I2MTIzQ0QxQjlCMDA1QjJB
MkUgLyogV2ViUHJlZmVyZW5jZXNDb2NvYS5tbSAqLywKQEAgLTExNDY0LDYgKzExNDc4LDIxIEBA
CiAJCQlwYXRoID0gdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zOwogCQkJc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsKIAkJfTsKKwkJQ0RGMUI5MEMyNjZGMzk1RTAwMDdF
QzEwIC8qIEdyb3VwQWN0aXZpdGllcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQ0RGMUI5MTIyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGll
c0Nvb3JkaW5hdG9yLmggKi8sCisJCQkJQ0RGMUI5MEYyNjZGMzk1RTAwMDdFQzEwIC8qIEdyb3Vw
QWN0aXZpdGllc0Nvb3JkaW5hdG9yLm1tICovLAorCQkJCUNERjFCOTBFMjY2RjM5NUUwMDA3RUMx
MCAvKiBHcm91cEFjdGl2aXRpZXNTZXNzaW9uLmggKi8sCisJCQkJQ0RGMUI5MTEyNjZGMzk1RTAw
MDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc1Nlc3Npb24ubW0gKi8sCisJCQkJQ0RGMUI5MTQyNjZG
Mzk1RjAwMDdFQzEwIC8qIEdyb3VwQWN0aXZpdGllc1Nlc3Npb25Ob3RpZmllci5oICovLAorCQkJ
CUNERjFCOTEzMjY2RjM5NUUwMDA3RUMxMCAvKiBHcm91cEFjdGl2aXRpZXNTZXNzaW9uTm90aWZp
ZXIubW0gKi8sCisJCQkJQ0RGMUI5MTAyNjZGMzk1RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9u
LmggKi8sCisJCQkJQ0RGMUI5MEQyNjZGMzk1RTAwMDdFQzEwIC8qIFdLR3JvdXBTZXNzaW9uLnN3
aWZ0ICovLAorCQkJKTsKKwkJCXBhdGggPSBHcm91cEFjdGl2aXRpZXM7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQlDRTFBMEJDQTFBNDhFNkM2MDA1NEVGNzQgLyogc3BpICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjY4LDExICsx
MzI5Nyw5IEBACiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gQ0Q5NTQ5M0IyNjE1OTAwNDAwODM3MkQ5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJXZWJLaXRTd2lmdCIgKi87CiAJCQlidWlsZFBoYXNl
cyA9ICgKLQkJCQlDREYxN0NCRTI2MERBRDFCMDBGMEE0RTggLyogQ29weSBBZGRpdGlvbmFsIFNv
dXJjZXMgKi8sCiAJCQkJQ0Q5NTQ5MzEyNjE1OTAwNDAwODM3MkQ5IC8qIEhlYWRlcnMgKi8sCiAJ
CQkJQ0Q5NTQ5MzIyNjE1OTAwNDAwODM3MkQ5IC8qIFNvdXJjZXMgKi8sCiAJCQkJQ0Q5NTQ5MzMy
NjE1OTAwNDAwODM3MkQ5IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJQ0Q5NTQ5NDIyNjE1OTBFRTAw
ODM3MkQ5IC8qIENvcHkgT2JqQyBJbnRlcmZhY2UgSGVhZGVyICovLAogCQkJKTsKIAkJCWJ1aWxk
UnVsZXMgPSAoCiAJCQkpOwpAQCAtMTM5NTQsNTAgKzEzOTgxLDYgQEAKIAkJCXNoZWxsUGF0aCA9
IC9iaW4vc2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJTY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291
cmNlcy5zaFxuIjsKIAkJfTsKLQkJQ0Q5NTQ5NDIyNjE1OTBFRTAwODM3MkQ5IC8qIENvcHkgT2Jq
QyBJbnRlcmZhY2UgSGVhZGVyICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBo
YXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJ
KTsKLQkJCWlucHV0RmlsZUxpc3RQYXRocyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAot
CQkJCSIkKERFUklWRURfU09VUkNFU19ESVIpLyQoU1dJRlRfT0JKQ19JTlRFUkZBQ0VfSEVBREVS
X05BTUUpIiwKLQkJCSk7Ci0JCQluYW1lID0gIkNvcHkgT2JqQyBJbnRlcmZhY2UgSGVhZGVyIjsK
LQkJCW91dHB1dEZpbGVMaXN0UGF0aHMgPSAoCi0JCQkpOwotCQkJb3V0cHV0UGF0aHMgPSAoCi0J
CQkJIiQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZS8kKFRBUkdFVF9OQU1F
KS8kKFNXSUZUX09CSkNfSU5URVJGQUNFX0hFQURFUl9OQU1FKSIsCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3No
OwotCQkJc2hlbGxTY3JpcHQgPSAiaWYgW1sgXCIkV0tfSEFWRV9DT09SRElOQVRPUlwiID09IFwi
WUVTXCIgXV1cbnRoZW5cbiAgICBkaXR0byBcIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vJHtTV0lG
VF9PQkpDX0lOVEVSRkFDRV9IRUFERVJfTkFNRX1cIiBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS91
c3IvbG9jYWwvaW5jbHVkZS8ke1RBUkdFVF9OQU1FfS8ke1NXSUZUX09CSkNfSU5URVJGQUNFX0hF
QURFUl9OQU1FfVwiXG5maVxuIjsKLQkJfTsKLQkJQ0RGMTdDQkUyNjBEQUQxQjAwRjBBNEU4IC8q
IENvcHkgQWRkaXRpb25hbCBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCWlucHV0RmlsZUxpc3RQYXRocyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhz
ID0gKAotCQkJCSIkKFNES19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9X
S0Nvb3JkaW5hdG9yLmgiLAotCQkJCSIkKFNES19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktp
dEFkZGl0aW9ucy9XS0Nvb3JkaW5hdG9yLm1tIiwKLQkJCQkiJChTREtfRElSKS91c3IvbG9jYWwv
aW5jbHVkZS9XZWJLaXRBZGRpdGlvbnMvV0tHcm91cFNlc3Npb24uc3dpZnQiLAotCQkJKTsKLQkJ
CW5hbWUgPSAiQ29weSBBZGRpdGlvbmFsIFNvdXJjZXMiOwotCQkJb3V0cHV0RmlsZUxpc3RQYXRo
cyA9ICgKLQkJCSk7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19E
SVIpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9XS0Nvb3JkaW5hdG9yLmgiLAot
CQkJCSIkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRp
b25zL1dLQ29vcmRpbmF0b3IubW0iLAotCQkJCSIkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xv
Y2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL1dLR3JvdXBTZXNzaW9uLnN3aWZ0IiwKLQkJCSk7
Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0
aCA9IC9iaW4vYmFzaDsKLQkJCXNoZWxsU2NyaXB0ID0gInNldCAtZVxuXG5SRUxBVElWRV9TT1VS
Q0VfUEFUSD1cInVzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9uc1wiXG5TT1VSQ0VfUEFU
SD1cIiRTREtfRElSLyRSRUxBVElWRV9TT1VSQ0VfUEFUSFwiXG5ERVNUSU5BVElPTl9QQVRIPVwi
JEJVSUxUX1BST0RVQ1RTX0RJUi8kUkVMQVRJVkVfU09VUkNFX1BBVEhcIlxuXG5mb3IgU09VUkNF
IGluIFdLQ29vcmRpbmF0b3IuaCBXS0Nvb3JkaW5hdG9yLm1tIFdLR3JvdXBTZXNzaW9uLnN3aWZ0
OyBkb1xuICAgIGlmIFtbIFwiJFNPVVJDRV9QQVRILyRTT1VSQ0VcIiAtbnQgXCIkREVTVElOQVRJ
T05fUEFUSC8kU09VUkNFXCIgXV07IHRoZW5cbiAgICAgICAgZGl0dG8gXCIkU09VUkNFX1BBVEgv
JFNPVVJDRVwiIFwiJERFU1RJTkFUSU9OX1BBVEgvJFNPVVJDRVwiXG4gICAgZmlcbmRvbmVcbiI7
Ci0JCX07CiAJCUUxQUMyRTJDMjBGN0I5NTgwMEIwODk3RCAvKiBVbmxvY2sgS2V5Y2hhaW4gKi8g
PSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMTQxMzMsNiArMTQxMTYsNyBAQAogCQkJCUNEQTkzREIxMjJG
OEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5kbGVY
UENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYx
QjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDREYxQjkxQjI2NzAyNTU1MDAwN0VDMTAgLyogV2ViS2l0U3dpZnRTb2Z0TGluay5tbSBp
biBTb3VyY2VzICovLAogCQkJCTI3NDlGNjQ1MjE0NjU2MUUwMDgzODBCRiAvKiBJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRjVFQzY0MjU0MTE0NTYw
MDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDEy
MTJDRjlGMDAwMTI4QUZEIC8qIEpTTlBNZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNDU3
MSw3ICsxNDU1NSw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQlDRDk1NDk0MzI2MTU5
MTdCMDA4MzcyRDkgLyogV0tHcm91cFNlc3Npb24uc3dpZnQgaW4gU291cmNlcyAqLywKKwkJCQlD
REYxQjkxNTI2NkYzOTZBMDAwN0VDMTAgLyogV0tHcm91cFNlc3Npb24uc3dpZnQgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsK
</data>
<flag name="review"
          id="452609"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>