<?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>230906</bug_id>
          
          <creation_ts>2021-09-28 11:38:57 -0700</creation_ts>
          <short_desc>Adopt platform UI for WebAuthn</short_desc>
          <delta_ts>2021-10-12 18:06:28 -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="Garrett Davidson">garrett_davidson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>garrett_davidson</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1797973</commentid>
    <comment_count>0</comment_count>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-09-28 11:38:57 -0700</bug_when>
    <thetext>Adopt platform UI for WebAuthn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797993</commentid>
    <comment_count>1</comment_count>
      <attachid>439506</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-09-28 12:20:51 -0700</bug_when>
    <thetext>Created attachment 439506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798134</commentid>
    <comment_count>2</comment_count>
      <attachid>439552</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-09-28 18:40:53 -0700</bug_when>
    <thetext>Created attachment 439552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798370</commentid>
    <comment_count>3</comment_count>
      <attachid>439610</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-09-29 09:12:59 -0700</bug_when>
    <thetext>Created attachment 439610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800196</commentid>
    <comment_count>4</comment_count>
      <attachid>439610</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-10-04 13:16:50 -0700</bug_when>
    <thetext>Comment on attachment 439610
Patch

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

I think this patch looks good, but I think it has some memory management issues. I&apos;m asking David to do a review -- he can give us the right steps to take.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:87
&gt; +                transportString = @&quot;usb&quot;;

Nit: Seems like these string conversion things should live where AuthenticatorTransport is defined.

Not needed for this patch, though.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:127
&gt; +    ASCCredentialRequestContext *requestContext = [allocASCCredentialRequestContextInstance() initWithRequestTypes:requestTypes];

You should adoptNS here to avoid the possibility of leaking this (e.g., if we add new code someday that does an early return or something).

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:130
&gt; +    ASCPublicKeyCredentialCreationOptions *credentialCreationOptions = [allocASCPublicKeyCredentialCreationOptionsInstance() init];

This should be wrapped in &apos;adoptNS&apos;, since the refcount is increased when you assign to the requestContext member, and we will leak if this isn&apos;t cleaned up.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:144
&gt; +    credentialCreationOptions.supportedAlgorithmIdentifiers = WTFMove(supportedAlgorithmIdentifiers);

I don&apos;t think this will do what you want. You are just moving a pointer, and the refcount will now be +1  (assuming supportedAlgorithmIdentifiers is refcounted).

I think you need to adoptNS the NSMutableArray, so it gets cleaned up.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:153
&gt; +        credentialCreationOptions.excludedCredentials = WTFMove(excludedCredentials);

Ditto the above.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:187
&gt; +    ASCCredentialRequestContext *requestContext = [allocASCCredentialRequestContextInstance() initWithRequestTypes:requestTypes];

I recommend adoptNS here to avoid future mistakes.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:193
&gt; +        requestContext.platformKeyCredentialAssertionOptions = [allocASCPublicKeyCredentialAssertionOptionsInstance() initWithKind:ASCPublicKeyCredentialKindPlatform relyingPartyIdentifier:options.rpId challenge:challenge userVerificationPreference:userVerification allowedCredentials:allowedCredentials];

I think this will leak.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:196
&gt; +        requestContext.securityKeyCredentialAssertionOptions = [allocASCPublicKeyCredentialAssertionOptionsInstance() initWithKind:ASCPublicKeyCredentialKindSecurityKey relyingPartyIdentifier:options.rpId challenge:challenge userVerificationPreference:userVerification allowedCredentials:allowedCredentials];

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800223</commentid>
    <comment_count>5</comment_count>
      <attachid>439610</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-10-04 14:27:44 -0700</bug_when>
    <thetext>Comment on attachment 439610
Patch

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

r- for the reasons Brent mentioned, plus a few others.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:73
&gt; +static inline RetainPtr&lt;NSString&gt; toNSString(UserVerificationRequirement userVerificationRequirement)
&gt; +{
&gt; +    switch (userVerificationRequirement) {
&gt; +    case UserVerificationRequirement::Required:
&gt; +        return adoptNS(@&quot;required&quot;);
&gt; +    case UserVerificationRequirement::Discouraged:
&gt; +        return adoptNS(@&quot;discouraged&quot;);
&gt; +    case UserVerificationRequirement::Preferred:
&gt; +        return adoptNS(@&quot;preferred&quot;);
&gt; +    }
&gt; +
&gt; +    return adoptNS(@&quot;preferred&quot;);

There is no need to adoptNS() here as these are immortal NSString constants.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:81
&gt; +    NSMutableArray&lt;NSString *&gt; *transports = nil;
&gt; +    size_t transportCount = descriptor.transports.size();
&gt; +    if (transportCount) {
&gt; +        transports = [[NSMutableArray alloc] initWithCapacity:transportCount];

The `transports` variable here should be a RetainPtr&lt;&gt; (no need to initialize as C++ does that for you):

    RetainPtr&lt;NSMutableArray&lt;NSString *&gt; *&gt; transports;

And assignment should use adoptNS():

         transports = adoptNS([[NSMutableArray alloc] initWithCapacity:transportCount]);

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:105
&gt; +    return adoptNS([allocASCPublicKeyCredentialDescriptorInstance() initWithCredentialID:toNSData(descriptor.idVector).get() transports:WTFMove(transports)]);

The `WTFMove(transports)` expression is wrong; I&apos;m surprised it even compiles!

This should change to `transports.get()` once you use RetainPtr&lt;&gt;/adopNS() above.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:120
&gt; +    std::optional&lt;PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria&gt; authenticatorSelection = options.authenticatorSelection;
&gt; +    if (authenticatorSelection) {
&gt; +        std::optional&lt;AuthenticatorAttachment&gt; attachment = authenticatorSelection-&gt;authenticatorAttachment;
&gt; +        if (attachment == AuthenticatorAttachment::Platform)
&gt; +            requestTypes = ASCCredentialRequestTypePlatformPublicKeyRegistration;
&gt; +        else if (attachment == AuthenticatorAttachment::CrossPlatform)
&gt; +            requestTypes = ASCCredentialRequestTypeSecurityKeyPublicKeyRegistration;

What if `attachment` is not set?  I don&apos;t see a check to ensure that `attachment` is set before comparing it.

Also, shouldn&apos;t these comparisons use`*attachment` instead of `attachment` to get the value out of the std::optional&lt;&gt;?

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:122
&gt; +        userVerification = toNSString(authenticatorSelection-&gt;userVerification).get();

If you ever returned non-immortal NSString objects from toNSString() in the future, the NSString returned by get() here would be over-released once this line of code completes.

It&apos;s better to change `userVerification` to be `RetainPtr&lt;NSString&gt;` instead, and drop the `.get()` here, and move the `.get()` below to where it&apos;s needed.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:127
&gt;&gt; +    ASCCredentialRequestContext *requestContext = [allocASCCredentialRequestContextInstance() initWithRequestTypes:requestTypes];
&gt; 
&gt; You should adoptNS here to avoid the possibility of leaking this (e.g., if we add new code someday that does an early return or something).

Correct.  You can also use `auto` to reduce typing:

    auto requestContext = adoptNS([allocASCCredentialRequestContextInstance() initWithRequestTypes:requestTypes]);

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:130
&gt;&gt; +    ASCPublicKeyCredentialCreationOptions *credentialCreationOptions = [allocASCPublicKeyCredentialCreationOptionsInstance() init];
&gt; 
&gt; This should be wrapped in &apos;adoptNS&apos;, since the refcount is increased when you assign to the requestContext member, and we will leak if this isn&apos;t cleaned up.

Correct.  Same as previous comment using `auto` and `adoptNS()` here.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:144
&gt;&gt; +    credentialCreationOptions.supportedAlgorithmIdentifiers = WTFMove(supportedAlgorithmIdentifiers);
&gt; 
&gt; I don&apos;t think this will do what you want. You are just moving a pointer, and the refcount will now be +1  (assuming supportedAlgorithmIdentifiers is refcounted).
&gt; 
&gt; I think you need to adoptNS the NSMutableArray, so it gets cleaned up.

Correct.  Please switch to adoptNS() and RetainPtr&lt;&gt; for `supportedAlgorithmIdentifiers`.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:153
&gt;&gt; +        credentialCreationOptions.excludedCredentials = WTFMove(excludedCredentials);
&gt; 
&gt; Ditto the above.

Correct.  Please use adoptNS() and RetainPtr&lt;&gt; for `excludedCredentials`.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:174
&gt; +    std::optional&lt;AuthenticatorAttachment&gt; attachment = options.authenticatorAttachment;
&gt; +    if (attachment == AuthenticatorAttachment::Platform)
&gt; +        requestTypes = ASCCredentialRequestTypePlatformPublicKeyAssertion;
&gt; +    else if (attachment == AuthenticatorAttachment::CrossPlatform)
&gt; +        requestTypes = ASCCredentialRequestTypeSecurityKeyPublicKeyAssertion;

Ditto from comment about about checking whether `attachment` is set before using it, and using `*attachment` instead of `attachment` here.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:176
&gt; +    userVerification = toNSString(options.userVerification).get();

Change `userVerification` to be `RetainPtr&lt;NSString&gt;` in this method as well.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:181
&gt; +    NSMutableArray&lt;ASCPublicKeyCredentialDescriptor *&gt; *allowedCredentials = nil;
&gt; +    if (allowedCredentialCount) {
&gt; +        allowedCredentials = [[NSMutableArray alloc] initWithCapacity:allowedCredentialCount];

Should use RetainPtr&lt;&gt; and adoptNS() here.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:187
&gt;&gt; +    ASCCredentialRequestContext *requestContext = [allocASCCredentialRequestContextInstance() initWithRequestTypes:requestTypes];
&gt; 
&gt; I recommend adoptNS here to avoid future mistakes.

Correct.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:193
&gt;&gt; +        requestContext.platformKeyCredentialAssertionOptions = [allocASCPublicKeyCredentialAssertionOptionsInstance() initWithKind:ASCPublicKeyCredentialKindPlatform relyingPartyIdentifier:options.rpId challenge:challenge userVerificationPreference:userVerification allowedCredentials:allowedCredentials];
&gt; 
&gt; I think this will leak.

Yes, both `allowedCredentials` and `requestContext` need to use RetainPtr&lt;&gt; types with adoptNS().

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:198
&gt; +    return adoptNS(requestContext);

As a bonus, you don&apos;t have to use adoptNS() here if you use it above.

This is one place where you could use WTFMove(requestContext) if the variable is already a RetainPtr&lt;&gt;, though.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:203
&gt; +    RetainPtr&lt;ASCCredentialRequestContext&gt; requestContext = configureRegistrationRequestContext(WTFMove(options));

It&apos;s a bit strange to use `WTFMove(options)` here, but configureRegistrationRequestContext() doesn&apos;t take a rvalue reference.

I don&apos;t think this is wrong, but I&apos;m not 100% sure.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:215
&gt; +    ASCAgentProxy *proxy = [allocASCAgentProxyInstance() init];

Please use RetainPtr&lt;&gt;/adoptNS().

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:218
&gt; +    [proxy performAuthorizationRequestsForContext:requestContext.get() withClearanceHandler:makeBlockPtr([this, handler = WTFMove(handler), window = WTFMove(window)](NSXPCListenerEndpoint *daemonEnpoint, NSError *error) mutable {

What happens when the `this` object is deallocated?  Is this call async, or is guaranteed to finish before the method returns?

If it&apos;s async (or `this` can be deleted from another thread), we may need to look into using a WeakPtr for `this`.  If this all happens on the main thread, you don&apos;t need WeakPtr.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:226
&gt; +        m_presenter = [allocASCAuthorizationRemotePresenterInstance() init];

This needs adoptNS() or it will leak since the assignment to the instance variable will +1 retain it again.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:269
&gt; +                    exceptionCode = (ExceptionCode) error.code;

It&apos;s a bit dodgy to use a C-style cast here.  Usually we create a helper function to map from one type to the other, then provide a default value if an unknown value is seen.

Can an `error.code` be returned that doesn&apos;t map to `ExceptionCode`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800676</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-05 11:39:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/83896254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800877</commentid>
    <comment_count>7</comment_count>
      <attachid>440305</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-10-05 17:14:16 -0700</bug_when>
    <thetext>Created attachment 440305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800881</commentid>
    <comment_count>8</comment_count>
      <attachid>439610</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-10-05 17:18:25 -0700</bug_when>
    <thetext>Comment on attachment 439610
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:120
&gt;&gt; +            requestTypes = ASCCredentialRequestTypeSecurityKeyPublicKeyRegistration;
&gt; 
&gt; What if `attachment` is not set?  I don&apos;t see a check to ensure that `attachment` is set before comparing it.
&gt; 
&gt; Also, shouldn&apos;t these comparisons use`*attachment` instead of `attachment` to get the value out of the std::optional&lt;&gt;?

If `attachment` is unset or an unexpected value, then we intentionally leave `requestTypes` unchanged. My understanding from https://en.cppreference.com/w/cpp/utility/optional/operator_cmp is that std::optional does the expected thing with `==` if `attachment` is unset, which local testing seems to confirm (but I&apos;m by no means an expert here 🙂).

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:174
&gt;&gt; +        requestTypes = ASCCredentialRequestTypeSecurityKeyPublicKeyAssertion;
&gt; 
&gt; Ditto from comment about about checking whether `attachment` is set before using it, and using `*attachment` instead of `attachment` here.

I _think_ this is currently doing what I want, but I&apos;m happy to update it if I&apos;m missing something or there&apos;s a style preference.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:218
&gt;&gt; +    [proxy performAuthorizationRequestsForContext:requestContext.get() withClearanceHandler:makeBlockPtr([this, handler = WTFMove(handler), window = WTFMove(window)](NSXPCListenerEndpoint *daemonEnpoint, NSError *error) mutable {
&gt; 
&gt; What happens when the `this` object is deallocated?  Is this call async, or is guaranteed to finish before the method returns?
&gt; 
&gt; If it&apos;s async (or `this` can be deleted from another thread), we may need to look into using a WeakPtr for `this`.  If this all happens on the main thread, you don&apos;t need WeakPtr.

This method is async. The clearanceHandler may take a while to get invoked, depending on what else is happening on the system. I&apos;ll switch to a WeakPtr.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:269
&gt;&gt; +                    exceptionCode = (ExceptionCode) error.code;
&gt; 
&gt; It&apos;s a bit dodgy to use a C-style cast here.  Usually we create a helper function to map from one type to the other, then provide a default value if an unknown value is seen.
&gt; 
&gt; Can an `error.code` be returned that doesn&apos;t map to `ExceptionCode`?

Currently I don&apos;t think so, but I&apos;m also happy to go the helper function route.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802868</commentid>
    <comment_count>9</comment_count>
      <attachid>440851</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-10-11 16:23:20 -0700</bug_when>
    <thetext>Created attachment 440851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803385</commentid>
    <comment_count>10</comment_count>
      <attachid>440851</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-10-12 14:25:13 -0700</bug_when>
    <thetext>Comment on attachment 440851
Patch

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

r-, but fixing the requested changes should lead to an r+.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:239
&gt; +    NSData *challenge = toNSData(options.challenge).get();

This causes `challenge` to be assigned a deallocated NSData pointer because the temporary RetainPtr&lt;NSData&gt; returned will be deallocated (and release the NSData object with it).

You want to keep the return value as a RetainPtr&lt;NSData&gt;.  Here&apos;s one way:

     auto challenge = toNSData(options.challenge);

The code below will need to be changed to `challenge.get()`, but the compiler will tell you if you missed any.

This must be fixed or we will introduce a use-after-free bug.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:267
&gt; +    NSWindow *window = m_webPageProxy.platformWindow();
&gt; +    [proxy performAuthorizationRequestsForContext:requestContext.get() withClearanceHandler:makeBlockPtr([weakThis = makeWeakPtr(*this), handler = WTFMove(handler), window = WTFMove(window)](NSXPCListenerEndpoint *daemonEnpoint, NSError *error) mutable {

The `window = WTFMove(window)` here is wrong as you&apos;re trying to move an NSWindow * Objective-C object.

I think it would be better to wrap the NSWindow * object in a RetainPtr and WTFMove that:

    RetainPtr&lt;NSWindow&gt; window = m_webPageProxy.platformWindow();

Note that we don&apos;t want to use adoptNS() here because we&apos;re not getting a +1 retained object back (under MRR).

This could also be written as this, but it makes the type more opaque:

    auto window = retainPtr(m_webPageProxy.platformWindow());

This must be fixed.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:287
&gt; +                ASCPlatformPublicKeyCredentialRegistration *registrationCredential = credential;

There is a new checked_objc_cast&lt;&gt; function in the new &lt;wtf/cocoa/TypeCastsCocoa.h&gt; header since you started writing this patch.  It would probably be a good idea to do that here to make sure `credentials` is the type of object you expect it to be:

                auto *registrationCredential = checked_objc_cast&lt;ASCPlatformPublicKeyCredentialRegistration&gt;(credential);

Note that if you nil-check the result of the cast, you can use `dynamic_objc_cast&lt;&gt;` instead:

                auto *registrationCredential = dynamic_objc_cast&lt;ASCPlatformPublicKeyCredentialRegistration&gt;(credential);
                if (!registrationCredential) {
                    /* return early with an error, possibly calling the handler() function */
                }

Since this code deals with authentication, I would strongly suggest using one or the other of these cast methods here and the other places where `credential` is assigned a specific type below.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:294
&gt; +                ASCSecurityKeyPublicKeyCredentialRegistration *registrationCredential = credential;

Ditto.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:301
&gt; +                ASCPlatformPublicKeyCredentialAssertion *assertionCredential = credential;

Ditto.

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:310
&gt; +                ASCPlatformPublicKeyCredentialAssertion *assertionCredential = credential;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803522</commentid>
    <comment_count>11</comment_count>
      <attachid>441011</attachid>
    <who name="Garrett Davidson">garrett_davidson</who>
    <bug_when>2021-10-12 16:09:30 -0700</bug_when>
    <thetext>Created attachment 441011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803526</commentid>
    <comment_count>12</comment_count>
      <attachid>441011</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-10-12 16:16:55 -0700</bug_when>
    <thetext>Comment on attachment 441011
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803529</commentid>
    <comment_count>13</comment_count>
      <attachid>440851</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-10-12 16:20:17 -0700</bug_when>
    <thetext>Comment on attachment 440851
Patch

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

&gt; Source/WebKit/SourcesCocoa.txt:595
&gt; +UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm

If you added a new file to the project, that file still needs to show up in the Xcode project (otherwise searches will ignore the file).

That means you&apos;ll have to add the file to the Xcode project, but not add it to any build targets (or it will get built twice and link failures will occur).

So there should be a corresponding change to add the file to the Xcode project (but not build it since it&apos;s built by the Unified Sources mechanism).

This must be fixed before landing the patch.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:287
&gt;&gt; +                ASCPlatformPublicKeyCredentialRegistration *registrationCredential = credential;
&gt; 
&gt; There is a new checked_objc_cast&lt;&gt; function in the new &lt;wtf/cocoa/TypeCastsCocoa.h&gt; header since you started writing this patch.  It would probably be a good idea to do that here to make sure `credentials` is the type of object you expect it to be:
&gt; 
&gt;                 auto *registrationCredential = checked_objc_cast&lt;ASCPlatformPublicKeyCredentialRegistration&gt;(credential);
&gt; 
&gt; Note that if you nil-check the result of the cast, you can use `dynamic_objc_cast&lt;&gt;` instead:
&gt; 
&gt;                 auto *registrationCredential = dynamic_objc_cast&lt;ASCPlatformPublicKeyCredentialRegistration&gt;(credential);
&gt;                 if (!registrationCredential) {
&gt;                     /* return early with an error, possibly calling the handler() function */
&gt;                 }
&gt; 
&gt; Since this code deals with authentication, I would strongly suggest using one or the other of these cast methods here and the other places where `credential` is assigned a specific type below.

Garrett pointed out that the -isKindOfClass: check is done above, so no need to do it again using checked_objc_cast&lt;&gt; or dynamic_objc_cast&lt;&gt;, and those won&apos;t work with soft-linked classes anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803531</commentid>
    <comment_count>14</comment_count>
      <attachid>440851</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-10-12 16:21:28 -0700</bug_when>
    <thetext>Comment on attachment 440851
Patch

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

&gt;&gt; Source/WebKit/SourcesCocoa.txt:595
&gt;&gt; +UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm
&gt; 
&gt; If you added a new file to the project, that file still needs to show up in the Xcode project (otherwise searches will ignore the file).
&gt; 
&gt; That means you&apos;ll have to add the file to the Xcode project, but not add it to any build targets (or it will get built twice and link failures will occur).
&gt; 
&gt; So there should be a corresponding change to add the file to the Xcode project (but not build it since it&apos;s built by the Unified Sources mechanism).
&gt; 
&gt; This must be fixed before landing the patch.

Please ignore this comment--I thought I deleted it, and the Xcode change is already much further down in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803595</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-12 18:06:26 -0700</bug_when>
    <thetext>Committed r284071 (242899@main): &lt;https://commits.webkit.org/242899@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 441011.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439506</attachid>
            <date>2021-09-28 12:20:51 -0700</date>
            <delta_ts>2021-09-28 18:40:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20210928122050.patch</filename>
            <type>text/plain</type>
            <size>39190</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzY2I2NWNkMTFiM2RkMTgy
MWQ3ZGQ2MzlhYzllZTlkOGYzNDg2YmIuLjhjMmE4ZDliNDllNWU4ZjA2YjQyMTBhNWQ2ZjBjZTQw
YWY2MDA3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICByZGFyOi8vNzQ2NTk1NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdG8gdXNpbmcg
dGhlIHBsYXRmb3JtJ3MgVUkgZm9yIFdlYkF1dGhuIHRyYW5zYWN0aW9ucywgd2hlcmUgYXZhaWxh
YmxlLAorICAgICAgICB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIFdlYkF1dGhuIHBy
b2Nlc3MuCisKKyAgICAgICAgQ292ZXJlZCBieSBtYW51YWwgdGVzdHMuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaDoKKyAgICAg
ICAgV2hlbiBwb3NzaWJsZSwgc3dpdGNoIHRvIGltcG9ydGluZyB0aGUgdW1icmVsbGEgaGVhZGVy
IGRpcmVjdGx5IGluc3RlYWQgb2YKKyAgICAgICAgcmVkZWNsYXJpbmcgdGhlIGVudGlyZSBpbnRl
cmZhY2UuCisKKyAgICAgICAgQWxzbywgZml4IGFuIGV4aXN0aW5nIGJ1ZyBjYXVzZWQgYnkgdGhl
IHJlZGVjbGFyYXRpb24sIHdoZXJlIHRoZQorICAgICAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tl
eUNyZWRlbnRpYWxLaW5kIGVudW0gd2FzIHJlbmFtZWQuCisKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICBCdWlsZCB0aGUgbmV3IGZpbGUuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAgICgtW19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgbWFrZUNyZWRlbnRpYWxXaXRoQ2hhbGxlbmdlOm9yaWdp
bjpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBSZXR1cm4gdGhlIGZ1bGwg
ZXJyb3IgdG8gdGhlIGRlbGVnYXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmVTb2Z0TGluay5tbToKKyAgICAgICAgQWRkIGFsbCBvZiB0aGUgbmV3IHJlcXVpcmVk
IGNsYXNzZXMgZm9yIHNvZnQgbGlua2luZywgYW5kIHNvcnQgdGhlIGxpc3QuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHkubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojp0b0FycmF5QnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6dG9OU0RhdGEpOgorICAgICAgICAoV2ViS2l0Ojp0b05TU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6dG9BU0NEZXNjcmlwdG9yKToKKyAgICAgICAgSGVscGVyIG1l
dGhvZHMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBXSyBhbmQgQVNDIHR5cGVzLgorCisgICAgICAg
IChXZWJLaXQ6OmNvbmZpZ3VyZVJlZ2lzdHJhdGlvblJlcXVlc3RDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6Y29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RDb250ZXh0KToKKyAgICAgICAg
Q3JlYXRlIGFuZCBjb25maWd1cmUgYW4gQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0IGZyb20g
dGhlIHByb3ZpZGVkIG9wdGlvbnMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHk6Om1ha2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmdldEFzc2VydGlvbik6CisgICAgICAgIENv
bmZpZ3VyZSBhbmQgcGVyZm9ybSB0aGUgcmVxdWVzdC4KKworICAgICAgICAoV2ViS2l0OjpXZWJB
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6cGVyZm9ybVJlcXVlc3QpOgorICAgICAgICAt
IENyZWF0ZSBhIHByb3h5IHRvIHRhbGsgdG8gQXV0aGVudGljYXRpb25TZXJ2aWNlc0FnZW50Lgor
ICAgICAgICAtIEFzayB0aGUgcHJveHkgaWYgd2UncmUgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSBy
ZXF1ZXN0LgorICAgICAgICAgIC0gSWYgbm8sIHJldHVybiBhbiBlcnJvci4KKyAgICAgICAgICAt
IElmIHllcywgY3JlYXRlIHByZXNlbnRlciBhbmQgcHJlc2VudCBvdmVyIHRoZSB3ZWIgcGFnZSdz
IHdpbmRvdy4KKyAgICAgICAgLSBXaGVuIHRoZSByZXF1ZXN0IGlmIGZpbmlzaGVkLCBjaGVjayB0
aGUga2luZCBvZiBjcmVkZW50aWFsIHdlIGdvdCwgYW5kIHJldHVybgorICAgICAgICB0aGUgcmVs
ZXZhbnQgQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS9BdXRoZW50aWNhdG9yQXR0YWNobWVudC4K
KyAgICAgICAgLSBJZiB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsZWQgb3IgZmFpbGVkLCBgY3JlZGVu
dGlhbGAgd2lsbCBiZSBuaWwgYW5kIGBlcnJvcmAgd2lsbAorICAgICAgICBiZSBub24tbmlsLiBJ
biBtb3N0IGNhc2VzLCB0aGUgZXJyb3Igd2lsbCBiZSBXS0Vycm9yRG9tYWluLCB3aGljaCB3ZSBj
YW4gY29udmVydAorICAgICAgICBkaXJlY3RseSB0byBFeGNlcHRpb25EYXRhLiBUaGUgb25lIGV4
Y2VwdGlvbiBpcyB0aGUgdXNlciBjYW5jZWxlZCB0aGUgcmVxdWVzdCBpbgorICAgICAgICB0aGUg
cGxhdGZvcm0gVUksIHNvIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgRXhjZXB0aW9uRGF0YSBpbiB0
aGF0IGNhc2UuIFRoZSBmaW5hbAorICAgICAgICAiT3BlcmF0aW9uIGZhaWxlZC4iIGNhc2UgY292
ZXJzIGFueXRoaW5nIGVsc2UgdW5leHBlY3RlZCBoYXBwZW5pbmcuCisKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmlzVXNlclZlcmlmeWluZ1BsYXRm
b3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSk6CisgICAgICAgIElmICtzaG91bGRVc2VBbHRlcm5h
dGVDcmVkZW50aWFsU3RvcmUgaXMgdHJ1ZSwgdGhpcyBpcyBhbHdheXMgdHJ1ZS4gT3RoZXJ3aXNl
LAorICAgICAgICBmYWxsIGJhY2sgdG8gdGhlIG9sZCBiZWhhdmlvci4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50
ZXJEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVs
ZWdhdGUgYXV0aG9yaXphdGlvblByZXNlbnRlcjpjcmVkZW50aWFsUmVxdWVzdGVkRm9yTG9naW5D
aG9pY2U6YXV0aGVudGljYXRlZENvbnRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
IFVzZSB0aGUgbmV3IG5hbWUgb2YgdGhlIGVudW0sIHVuY29uZGl0aW9uYWxseS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JQcm94eS5jcHA6CisgICAgICAgIFdyYXAgYSBmZXcgbWV0aG9kcyBpbiB0aGUgbmV3IGZsYWcu
IFdoZW4gdGhlIGZsYWcgaXMgb24sIHRoZXNlIG1ldGhvZHMgd2lsbCBleGlzdAorICAgICAgICBp
biBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5o
OgorICAgICAgICBOZXcgaXZhciBmb3IgdGhlIHBsYXRmb3JtIHByZXNlbnRlci4KKworICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgdGhlIG5l
dyBmaWxlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICBXaGVuIHBsYXRmb3JtIFVJIGlzIGF2
YWlsYWJsZSwgcHJlZmVyIGl0IG92ZXIgdGhlIFdlYkF1dGhuIHByb2Nlc3MuCisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmdldEFzc2VydGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6aXNVc2VyVmVy
aWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKToKKwogMjAyMS0wOS0yNyAgUGVy
IEFybmUgIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXVtHUFVQXSBSZW1vdmUg
YWNjZXNzIHRvIHVudXNlZCBtYWNoIHNlcnZpY2VzIGluIHNhbmRib3gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3Jl
U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9Db2NvYS9BdXRoZW50aWNhdGlvblNl
cnZpY2VzQ29yZVNQSS5oCmluZGV4IDdjMzNjYmViMWE0NTQwZmQ1NWQ3NTE0MmQyNGNhYjdkODc0
YWM3MjAuLmYyNzA4ZTZlMWYwMjA3NTVmZjkzMzI3ZjcxZGZjMDUzZTRkNzczMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlU1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaApAQCAtMjUsMTkgKzI1LDkgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpZiBIQVZFKEFTQ19BVVRIX1VJKQotCi0vLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83
MjQwNjU4NT46IFVuY29tbWVudCB0aGUgaGVhZGVycyBhZnRlciB0aGUgU0RLIGJlY29tZXMgc3Rh
YmxlLgotLy8jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLS8vCi0vLy8vIEZJWE1FKDIxOTc2
Nyk6IFJlbW92ZSBBU0NBcHBsZUlEQ3JlZGVudGlhbC5oLgotLy8jaW1wb3J0IDxBdXRoZW50aWNh
dGlvblNlcnZpY2VzQ29yZS9BU0NBcHBsZUlEQ3JlZGVudGlhbC5oPgotLy8jaW1wb3J0IDxBdXRo
ZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4
dC5oPgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBdXRob3JpemF0
aW9uUHJlc2VudGVyLmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FT
Q1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlLmg+Ci0vLyNpbXBvcnQgPEF1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlh
bExvZ2luQ2hvaWNlLmg+Ci0vLwotLy8jZWxzZQorI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9V
SSkKKyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0F1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlUHJpdmF0ZS5oPgorI2VsaWYgSEFWRShBU0NfQVVUSF9VSSkKIAogTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KIApAQCAtMTA4LDEwICs5OCwxMCBAQCBleHRlcm4gTlNTdHJpbmcgKiBj
b25zdCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dERhdGFLZXk7CiAKIEBlbmQK
IAotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVk
ZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7Ci0gICAgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVk
ZW50aWFsTG9naW5DaG9pY2VLaW5kUmVnaXN0cmF0aW9uLAotICAgIEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZEFzc2VydGlvbiwKLSAgICBBU0NTZWN1cml0
eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmRBc3NlcnRpb25QbGFjZWhvbGRl
ciwKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3Jl
ZGVudGlhbEtpbmQpIHsKKyAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxLaW5k
UmVnaXN0cmF0aW9uLAorICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmRB
c3NlcnRpb24sCisgICAgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2Vy
dGlvblBsYWNlaG9sZGVyLAogfTsKIAogQGludGVyZmFjZSBBU0NQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgpAQCAtMTM2LDcgKzEy
Niw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5
Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZCkgewogQHByb3BlcnR5IChub25hdG9taWMsIG51bGxh
YmxlLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKm5hbWU7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqZGlzcGxheU5hbWU7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBOU0RhdGEgKnVzZXJI
YW5kbGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZCBsb2dpbkNob2ljZUtpbmQ7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlh
bEtpbmQgY3JlZGVudGlhbEtpbmQ7CiAKICsgKGluc3RhbmNldHlwZSluZXcgTlNfVU5BVkFJTEFC
TEU7CiAtIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAppbmRleCAxMWU3Mjk2ODRlNGEyYWRmMGI1Y2I4OTNhZDY3OTFkOTAwNTgyNjA1Li4xZDYz
Yjk5NTM2NzRjNDc1ZjIxMjQ3YzNlZWVhNThhMWVmMDc5Mjg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC01OTEsNiArNTkxLDcgQEAgVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L05mY1NlcnZpY2UubW0KIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1
dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL1dLTkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUubW0KIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tCitVSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHkubW0KIAogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVj
dGlvbi5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsU2Vydmlj
ZS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCAyNmRkNTYyNjE0MmIyODUzOGJj
MTQ3NjdmN2E1MmRlMWE2NjlhNjZhLi41YjY3MTk5OGYzMDY2ZDYzZTc5ZTNhMTdmNWZkNzk2YWY2
ZGRhNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQpAQCAtNDc5LDcgKzQ3OSw3IEBA
IHN0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2U+IHdr
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uCiAgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBb
Jl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7
CiAgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2Uo
cmVzcG9uc2UtPmRhdGEoKSwgY2xpZW50RGF0YUpTT04uZ2V0KCksIHJlc3BvbnNlLT5hdHRhY2ht
ZW50KCkpLmdldCgpLCBuaWwpOwogICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YSYgZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3Ig
ZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5m
bzpuaWxdKTsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46V0tFcnJvckRvbWFpbiBjb2RlOmV4Y2VwdGlvbi5jb2RlIHVzZXJJbmZvOkB7IE5TTG9jYWxp
emVkRGVzY3JpcHRpb25LZXk6IGV4Y2VwdGlvbi5tZXNzYWdlIH1dKTsKICAgICAgICAgfSk7CiAg
ICAgfTsKICAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3QoeyBXVEZNb3ZlKGhhc2gpLCBbX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlv
bnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3Vs
dDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgeyB9LCB0cnVlLCBTdHJpbmco
KSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZp
Y2VzQ29yZVNvZnRMaW5rLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmgKaW5kZXggYzky
ZjkwMDE3ZjUzOWE5NTM0MjdkZTMxYThmMzYyOThjYzExMWM2ZS4uYjNhNzljMDdhYmEyY2JhZmVl
ZmVmYzZjNjdjYWUxMzZmNzIyMjUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0
TGluay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0Nv
Y29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsuaApAQCAtMzIsMTQgKzMyLDIz
IEBAIFNPRlRfTElOS19GUkFNRVdPUktfRk9SX0hFQURFUihXZWJLaXQsIEF1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NX
ZWJLaXRTUElTdXBwb3J0KTsKIAotI2lmIEhBVkUoQVNDX0FVVEhfVUkpCisjaWYgSEFWRShBU0Nf
QVVUSF9VSSkgfHwgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQogCi1TT0ZUX0xJTktfQ0xBU1Nf
Rk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5L
X0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBZ2VudFByb3h5KTsKK1NPRlRfTElOS19DTEFT
U19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXBwbGVJRENyZWRlbnRpYWwpOwogU09GVF9MSU5LX0NM
QVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4
dCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25Q
cmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBdXRob3Jp
emF0aW9uUmVtb3RlUHJlc2VudGVyKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktp
dCwgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVB
REVSKFdlYktpdCwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNP
RlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVk
ZW50aWFsTG9naW5DaG9pY2UpOwotU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBB
U0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktf
Q0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0FwcGxlSURDcmVkZW50aWFsKTsKK1NPRlRfTElO
S19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFs
UmVnaXN0cmF0aW9uKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUHVi
bGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMpOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9I
RUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKTsKK1NP
RlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3IpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0
eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9I
RUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2lj
ZSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbik7CiAKIFNPRlRfTElOS19DT05TVEFOVF9GT1Jf
SEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRp
b25FcnJvckRvbWFpbiwgTlNFcnJvckRvbWFpbik7CiAjZGVmaW5lIEFTQ0F1dGhvcml6YXRpb25F
cnJvckRvbWFpbiBXZWJLaXQ6OmdldF9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZV9BU0NBdXRo
b3JpemF0aW9uRXJyb3JEb21haW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0
TGluay5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsubW0KaW5kZXggYjkzMTNjODZkZDdk
YzUwMDA2NjJhYWJjM2Q1MzIzOGVhN2NmNTJjYi4uYTIzYWM1M2E3YmMxOWEyZTI1MjVlZDM2OTIw
ZDBkZGMzNGYzMjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRo
ZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tCkBAIC0zMiwxNCArMzIsMjMgQEAgU09G
VF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZSk7CiAKIFNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0
aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1dlYktpdFNQSVN1cHBvcnQpOwogCi0jaWYgSEFW
RShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19BVVRIX1VJKSB8fCBIQVZFKFVOSUZJRURfQVND
X0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGlj
YXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5L
X0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVND
QWdlbnRQcm94eSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlEQ3JlZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xB
U1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBdXRo
b3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJD
RShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uUHJl
c2VudGVyKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRp
b25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXIpOworU09GVF9M
SU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwg
QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNF
KFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5
Q3JlZGVudGlhbEFzc2VydGlvbik7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQs
IEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRp
YWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxM
b2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlEQ3JlZGVudGlhbCk7CitTT0ZUX0xJTktfQ0xB
U1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQbGF0
Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZP
Ul9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDUHVibGljS2V5
Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMpOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0Uo
V2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucyk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
cik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOwor
U09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2Vz
Q29yZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UpOworU09G
VF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29y
ZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uKTsKIAogU09G
VF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2Vz
Q29yZSwgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluLCBOU0Vycm9yRG9tYWluKTsKIFNPRlRf
TElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0Nv
cmUsIEFTQ1BJTlZhbGlkYXRpb25SZXN1bHRLZXksIE5TU3RyaW5nKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhv
cml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRl
Lm1tCmluZGV4IDdjMjA4ZmYwYWQ1NzAwZWMxN2RiNDQzOGI2ODM0OWE0M2NkMjZhOTkuLmYyOTUw
ZmUzMDY5MTVmMDFjN2RhYjhiMDI5MGQ3MGEzZWM3OTAzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlv
blByZXNlbnRlckRlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1t
CkBAIC03OCw3ICs3OCw3IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAgICAgaWYgKFtsb2dp
bkNob2ljZSBpc0tpbmRPZkNsYXNzOldlYktpdDo6Z2V0QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlD
cmVkZW50aWFsTG9naW5DaG9pY2VDbGFzcygpXSkgewogICAgICAgICBhdXRvICpzZWN1cml0eUtl
eUxvZ2luQ2hvaWNlID0gKEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hv
aWNlICopbG9naW5DaG9pY2U7CiAKLSAgICAgICAgaWYgKFtzZWN1cml0eUtleUxvZ2luQ2hvaWNl
IGxvZ2luQ2hvaWNlS2luZF0gPT0gQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9n
aW5DaG9pY2VLaW5kQXNzZXJ0aW9uKSB7CisgICAgICAgIGlmIChbc2VjdXJpdHlLZXlMb2dpbkNo
b2ljZSBjcmVkZW50aWFsS2luZF0gPT0gQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFs
S2luZEFzc2VydGlvbikgewogICAgICAgICAgICAgU3RyaW5nIGxvZ2luQ2hvaWNlTmFtZSA9IHNl
Y3VyaXR5S2V5TG9naW5DaG9pY2UubmFtZTsKICAgICAgICAgICAgIFtzZWxmIGRpc3BhdGNoQ29v
cmRpbmF0b3JDYWxsYmFjazpbbG9naW5DaG9pY2VOYW1lID0gV1RGTW92ZShsb2dpbkNob2ljZU5h
bWUpXSAoV2ViS2l0OjpBdXRoZW50aWNhdG9yUHJlc2VudGVyQ29vcmRpbmF0b3ImIGNvb3JkaW5h
dG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb29yZGluYXRvci5kaWRTZWxlY3RBc3Nl
cnRpb25SZXNwb25zZShsb2dpbkNob2ljZU5hbWUsIG5pbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNjMDI1MDI4NTRiZjNjNmM0Y2FlZjZiOWVkODg2ZjQxYTBjYjFhYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbQpAQCAtMCwwICsxLDMwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaCIKKworI2lt
cG9ydCAiTG9jYWxTZXJ2aWNlLmgiCisjaW1wb3J0ICJXS0Vycm9yLmgiCisjaW1wb3J0ICJXZWJB
dXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNp
bXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXMvQVNDT1NFQ29uc3RhbnRzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JBdHRhY2htZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1
dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uRGF0
YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
Lmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKworI2ltcG9ydCAiQXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmVTb2Z0TGluay5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gdG9BcnJheUJ1
ZmZlcihOU0RhdGEgKmRhdGEpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKTsK
K30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNEYXRhPiB0b05TRGF0YShjb25zdCBCdWZm
ZXJTb3VyY2UmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEubGVuZ3RoKCldKTsKK30KKworc3Rh
dGljIGlubGluZSBSZXRhaW5QdHI8TlNEYXRhPiB0b05TRGF0YShjb25zdCBWZWN0b3I8dWludDhf
dD4gdmVjdG9yKQoreworICAgIHJldHVybiBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOnZlY3Rvci5kYXRhKCkgbGVuZ3RoOnZlY3Rvci5zaXplKCldKTsKK30KKworc3RhdGlj
IGlubGluZSBSZXRhaW5QdHI8TlNTdHJpbmc+IHRvTlNTdHJpbmcoVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkKK3sKKyAgICBzd2l0Y2ggKHVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkgeworICAgIGNhc2UgVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50OjpSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoQCJyZXF1aXJlZCIp
OworICAgIGNhc2UgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpEaXNjb3VyYWdlZDoKKyAg
ICAgICAgcmV0dXJuIGFkb3B0TlMoQCJkaXNjb3VyYWdlZCIpOworICAgIGNhc2UgVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBhZG9wdE5TKEAi
cHJlZmVycmVkIik7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoQCJwcmVmZXJyZWQiKTsK
K30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3I+IHRvQVNDRGVzY3JpcHRvcihQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNj
cmlwdG9yKQoreworICAgIE5TTXV0YWJsZUFycmF5PE5TU3RyaW5nICo+ICp0cmFuc3BvcnRzID0g
bmlsOworICAgIHNpemVfdCB0cmFuc3BvcnRDb3VudCA9IGRlc2NyaXB0b3IudHJhbnNwb3J0cy5z
aXplKCk7CisgICAgaWYgKHRyYW5zcG9ydENvdW50KSB7CisgICAgICAgIHRyYW5zcG9ydHMgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRyYW5zcG9ydENvdW50XTsK
KworICAgICAgICBmb3IgKEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQgdHJhbnNwb3J0IDogZGVzY3Jp
cHRvci50cmFuc3BvcnRzKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqdHJhbnNwb3J0U3RyaW5n
ID0gbmlsOworICAgICAgICAgICAgc3dpdGNoICh0cmFuc3BvcnQpIHsKKyAgICAgICAgICAgIGNh
c2UgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOgorICAgICAgICAgICAgICAgIHRyYW5zcG9y
dFN0cmluZyA9IEAidXNiIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjOgorICAgICAgICAgICAgICAgIHRyYW5zcG9y
dFN0cmluZyA9IEAibmZjIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6QmxlOgorICAgICAgICAgICAgICAgIHRyYW5zcG9y
dFN0cmluZyA9IEAiYmxlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWw6CisgICAgICAgICAgICAgICAgdHJh
bnNwb3J0U3RyaW5nID0gQCJpbnRlcm5hbCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0cmFuc3BvcnRTdHJpbmcpCisgICAgICAgICAg
ICAgICAgW3RyYW5zcG9ydHMgYWRkT2JqZWN0OnRyYW5zcG9ydFN0cmluZ107CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gYWRvcHROUyhbYWxsb2NBU0NQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvckluc3RhbmNlKCkgaW5pdFdpdGhDcmVkZW50aWFsSUQ6dG9OU0RhdGEoZGVzY3Jp
cHRvci5pZFZlY3RvcikuZ2V0KCkgdHJhbnNwb3J0czpXVEZNb3ZlKHRyYW5zcG9ydHMpXSk7Cit9
CisKK3N0YXRpYyBSZXRhaW5QdHI8QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0PiBjb25maWd1
cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dChjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zJiBvcHRpb25zKQoreworICAgIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZXMg
cmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlUGxhdGZvcm1QdWJsaWNLZXlS
ZWdpc3RyYXRpb24gfCBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tl
eVJlZ2lzdHJhdGlvbjsKKworICAgIE5TU3RyaW5nICp1c2VyVmVyaWZpY2F0aW9uID0gbmlsOwor
ICAgIGJvb2wgc2hvdWxkUmVxdWlyZVJlc2lkZW50S2V5ID0gZmFsc2U7CisgICAgc3RkOjpvcHRp
b25hbDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uQ3JpdGVyaWE+IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBvcHRpb25zLmF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb247CisgICAgaWYgKGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pIHsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxBdXRoZW50aWNhdG9yQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGF1
dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JBdHRhY2htZW50OworICAgICAgICBp
ZiAoYXR0YWNobWVudCA9PSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm0pCisgICAg
ICAgICAgICByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1
YmxpY0tleVJlZ2lzdHJhdGlvbjsKKyAgICAgICAgZWxzZSBpZiAoYXR0YWNobWVudCA9PSBBdXRo
ZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0Zm9ybSkKKyAgICAgICAgICAgIHJlcXVlc3RU
eXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0
cmF0aW9uOworCisgICAgICAgIHVzZXJWZXJpZmljYXRpb24gPSB0b05TU3RyaW5nKGF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24pLmdldCgpOworCisgICAgICAgIHNob3Vs
ZFJlcXVpcmVSZXNpZGVudEtleSA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNp
ZGVudEtleTsKKyAgICB9CisKKyAgICBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQgKnJlcXVl
c3RDb250ZXh0ID0gW2FsbG9jQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0SW5zdGFuY2UoKSBp
bml0V2l0aFJlcXVlc3RUeXBlczpyZXF1ZXN0VHlwZXNdOworICAgIHJlcXVlc3RDb250ZXh0LnJl
bHlpbmdQYXJ0eUlkZW50aWZpZXIgPSBvcHRpb25zLnJwLmlkOworCisgICAgQVNDUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyA9IFth
bGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNJbnN0YW5jZSgpIGluaXRd
OworCisgICAgY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5jaGFsbGVuZ2UgPSB0b05TRGF0YShv
cHRpb25zLmNoYWxsZW5nZSkuZ2V0KCk7CisgICAgY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5y
ZWx5aW5nUGFydHlJZGVudGlmaWVyID0gb3B0aW9ucy5ycC5pZDsKKyAgICBjcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLnVzZXJOYW1lID0gb3B0aW9ucy51c2VyLm5hbWU7CisgICAgY3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy51c2VySWRlbnRpZmllciA9IHRvTlNEYXRhKG9wdGlvbnMudXNlci5p
ZCkuZ2V0KCk7CisgICAgY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy51c2VyRGlzcGxheU5hbWUg
PSBvcHRpb25zLnVzZXIuZGlzcGxheU5hbWU7CisgICAgY3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cy51c2VyVmVyaWZpY2F0aW9uUHJlZmVyZW5jZSA9IHVzZXJWZXJpZmljYXRpb247CisgICAgY3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5zaG91bGRSZXF1aXJlUmVzaWRlbnRLZXkgPSBzaG91bGRS
ZXF1aXJlUmVzaWRlbnRLZXk7CisKKyAgICBOU011dGFibGVBcnJheTxOU051bWJlciAqPiAqc3Vw
cG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Om9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcy5zaXplKCldOworICAgIGZvciAo
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycyBhbGdvcml0aG1Q
YXJhbWV0ZXIgOiBvcHRpb25zLnB1YktleUNyZWRQYXJhbXMpCisgICAgICAgIFtzdXBwb3J0ZWRB
bGdvcml0aG1JZGVudGlmaWVycyBhZGRPYmplY3Q6QChhbGdvcml0aG1QYXJhbWV0ZXIuYWxnKV07
CisKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnN1cHBvcnRlZEFsZ29yaXRobUlkZW50
aWZpZXJzID0gV1RGTW92ZShzdXBwb3J0ZWRBbGdvcml0aG1JZGVudGlmaWVycyk7CisKKyAgICBz
aXplX3QgZXhjbHVkZWRDcmVkZW50aWFsQ291bnQgPSBvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFs
cy5zaXplKCk7CisgICAgaWYgKGV4Y2x1ZGVkQ3JlZGVudGlhbENvdW50KSB7CisgICAgICAgIE5T
TXV0YWJsZUFycmF5PEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpleGNsdWRl
ZENyZWRlbnRpYWxzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpl
eGNsdWRlZENyZWRlbnRpYWxDb3VudF07CisKKyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9yIDogb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisg
ICAgICAgICAgICBbZXhjbHVkZWRDcmVkZW50aWFscyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9y
KGRlc2NyaXB0b3IpLmdldCgpXTsKKworICAgICAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
LmV4Y2x1ZGVkQ3JlZGVudGlhbHMgPSBXVEZNb3ZlKGV4Y2x1ZGVkQ3JlZGVudGlhbHMpOworICAg
IH0KKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0
Zm9ybVB1YmxpY0tleVJlZ2lzdHJhdGlvbikKKyAgICAgICAgcmVxdWVzdENvbnRleHQucGxhdGZv
cm1LZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0gY3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
czsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVTZWN1
cml0eUtleVB1YmxpY0tleVJlZ2lzdHJhdGlvbikKKyAgICAgICAgcmVxdWVzdENvbnRleHQuc2Vj
dXJpdHlLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0gY3JlZGVudGlhbENyZWF0aW9uT3B0
aW9uczsKKworICAgIHJldHVybiBhZG9wdE5TKHJlcXVlc3RDb250ZXh0KTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQ+IGNvbmZpZ3VyYXRpb25Bc3Nl
cnRpb25SZXF1ZXN0Q29udGV4dChjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlcyByZXF1ZXN0VHlw
ZXMgPSBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbiB8
IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0aW9uOwor
CisgICAgTlNTdHJpbmcgKnVzZXJWZXJpZmljYXRpb24gPSBuaWw7CisgICAgc3RkOjpvcHRpb25h
bDxBdXRoZW50aWNhdG9yQXR0YWNobWVudD4gYXR0YWNobWVudCA9IG9wdGlvbnMuYXV0aGVudGlj
YXRvckF0dGFjaG1lbnQ7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gQXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OlBsYXRmb3JtKQorICAgICAgICByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFsUmVx
dWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbjsKKyAgICBlbHNlIGlmIChhdHRhY2ht
ZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtKQorICAgICAgICBy
ZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tl
eUFzc2VydGlvbjsKKworICAgIHVzZXJWZXJpZmljYXRpb24gPSB0b05TU3RyaW5nKG9wdGlvbnMu
dXNlclZlcmlmaWNhdGlvbikuZ2V0KCk7CisKKyAgICBzaXplX3QgYWxsb3dlZENyZWRlbnRpYWxD
b3VudCA9IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJy
YXk8QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmFsbG93ZWRDcmVkZW50aWFs
cyA9IG5pbDsKKyAgICBpZiAoYWxsb3dlZENyZWRlbnRpYWxDb3VudCkgeworICAgICAgICBhbGxv
d2VkQ3JlZGVudGlhbHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
OmFsbG93ZWRDcmVkZW50aWFsQ291bnRdOworCisgICAgICAgIGZvciAoUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IgZGVzY3JpcHRvciA6IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAg
ICAgICAgICAgIFthbGxvd2VkQ3JlZGVudGlhbHMgYWRkT2JqZWN0OnRvQVNDRGVzY3JpcHRvcihk
ZXNjcmlwdG9yKS5nZXQoKV07CisgICAgfQorCisgICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250
ZXh0ICpyZXF1ZXN0Q29udGV4dCA9IFthbGxvY0FTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dElu
c3RhbmNlKCkgaW5pdFdpdGhSZXF1ZXN0VHlwZXM6cmVxdWVzdFR5cGVzXTsKKyAgICByZXF1ZXN0
Q29udGV4dC5yZWx5aW5nUGFydHlJZGVudGlmaWVyID0gb3B0aW9ucy5ycElkOworCisgICAgTlNE
YXRhICpjaGFsbGVuZ2UgPSB0b05TRGF0YShvcHRpb25zLmNoYWxsZW5nZSkuZ2V0KCk7CisKKyAg
ICBpZiAocmVxdWVzdFR5cGVzICYgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlUGxhdGZvcm1QdWJs
aWNLZXlBc3NlcnRpb24pCisgICAgICAgIHJlcXVlc3RDb250ZXh0LnBsYXRmb3JtS2V5Q3JlZGVu
dGlhbEFzc2VydGlvbk9wdGlvbnMgPSBbYWxsb2NBU0NQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0
aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdFdpdGhLaW5kOkFTQ1B1YmxpY0tleUNyZWRlbnRpYWxL
aW5kUGxhdGZvcm0gcmVseWluZ1BhcnR5SWRlbnRpZmllcjpvcHRpb25zLnJwSWQgY2hhbGxlbmdl
OmNoYWxsZW5nZSB1c2VyVmVyaWZpY2F0aW9uUHJlZmVyZW5jZTp1c2VyVmVyaWZpY2F0aW9uIGFs
bG93ZWRDcmVkZW50aWFsczphbGxvd2VkQ3JlZGVudGlhbHNdOworCisgICAgaWYgKHJlcXVlc3RU
eXBlcyAmIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0
aW9uKQorICAgICAgICByZXF1ZXN0Q29udGV4dC5zZWN1cml0eUtleUNyZWRlbnRpYWxBc3NlcnRp
b25PcHRpb25zID0gW2FsbG9jQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnNJ
bnN0YW5jZSgpIGluaXRXaXRoS2luZDpBU0NQdWJsaWNLZXlDcmVkZW50aWFsS2luZFNlY3VyaXR5
S2V5IHJlbHlpbmdQYXJ0eUlkZW50aWZpZXI6b3B0aW9ucy5ycElkIGNoYWxsZW5nZTpjaGFsbGVu
Z2UgdXNlclZlcmlmaWNhdGlvblByZWZlcmVuY2U6dXNlclZlcmlmaWNhdGlvbiBhbGxvd2VkQ3Jl
ZGVudGlhbHM6YWxsb3dlZENyZWRlbnRpYWxzXTsKKworICAgIHJldHVybiBhZG9wdE5TKHJlcXVl
c3RDb250ZXh0KTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6
bWFrZUNyZWRlbnRpYWwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSWQsIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIFZlY3Rvcjx1aW50OF90PiYmIGhhc2gsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMmJiBvcHRpb25zLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgUmVxdWVz
dENvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBSZXRhaW5QdHI8QVNDQ3JlZGVu
dGlhbFJlcXVlc3RDb250ZXh0PiByZXF1ZXN0Q29udGV4dCA9IGNvbmZpZ3VyZVJlZ2lzdHJhdGlv
blJlcXVlc3RDb250ZXh0KFdURk1vdmUob3B0aW9ucykpOworICAgIHBlcmZvcm1SZXF1ZXN0KHJl
cXVlc3RDb250ZXh0LCBXVEZNb3ZlKGhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eTo6Z2V0QXNzZXJ0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlk
LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhfdD4mJiBoYXNoLCBQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmJiBvcHRpb25zLCBib29sIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZSwgUmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBS
ZXRhaW5QdHI8QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0PiByZXF1ZXN0Q29udGV4dCA9IGNv
bmZpZ3VyYXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dChvcHRpb25zKTsKKyAgICBwZXJmb3Jt
UmVxdWVzdChyZXF1ZXN0Q29udGV4dCwgV1RGTW92ZShoYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KFJldGFpblB0cjxB
U0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQ+IHJlcXVlc3RDb250ZXh0LCBSZXF1ZXN0Q29tcGxl
dGlvbkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIEFTQ0FnZW50UHJveHkgKnByb3h5ID0gW2Fs
bG9jQVNDQWdlbnRQcm94eUluc3RhbmNlKCkgaW5pdF07CisKKyAgICBOU1dpbmRvdyAqd2luZG93
ID0gbV93ZWJQYWdlUHJveHkucGxhdGZvcm1XaW5kb3coKTsKKyAgICBbcHJveHkgcGVyZm9ybUF1
dGhvcml6YXRpb25SZXF1ZXN0c0ZvckNvbnRleHQ6cmVxdWVzdENvbnRleHQuZ2V0KCkgd2l0aENs
ZWFyYW5jZUhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBoYW5kbGVyID0gV1RGTW92ZShoYW5k
bGVyKSwgd2luZG93ID0gV1RGTW92ZSh3aW5kb3cpXShOU1hQQ0xpc3RlbmVyRW5kcG9pbnQgKmRh
ZW1vbkVucG9pbnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYWVt
b25FbnBvaW50KSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2hhbmRs
ZXIgPSBXVEZNb3ZlKGhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGhhbmRs
ZXIoeyB9LCAoQXV0aGVudGljYXRvckF0dGFjaG1lbnQpMCwgRXhjZXB0aW9uRGF0YSB7IE5vdEFs
bG93ZWRFcnJvciwgIk9wZXJhdGlvbiBmYWlsZWQuIiB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wcmVzZW50ZXIgPSBbYWxs
b2NBU0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XTsKKyAgICAg
ICAgW21fcHJlc2VudGVyIHByZXNlbnRXaXRoV2luZG93OndpbmRvdyBkYWVtb25FbmRwb2ludDpk
YWVtb25FbnBvaW50IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbaGFuZGxlciA9IFdU
Rk1vdmUoaGFuZGxlcildKGlkIDxBU0NDcmVkZW50aWFsUHJvdG9jb2w+IGNyZWRlbnRpYWwsIE5T
RXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0b3JSZXNwb25z
ZURhdGEgcmVzcG9uc2UgPSB7IH07CisgICAgICAgICAgICBBdXRoZW50aWNhdG9yQXR0YWNobWVu
dCBhdHRhY2htZW50OworICAgICAgICAgICAgRXhjZXB0aW9uRGF0YSBleGNlcHRpb25EYXRhID0g
eyB9OworCisgICAgICAgICAgICBpZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFzczpnZXRBU0NQ
bGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb25DbGFzcygpXSkgeworICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07
CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRl
bnRpYWxSZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihyZWdpc3RyYXRp
b25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXR0
ZXN0YXRpb25PYmplY3QgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuYXR0
ZXN0YXRpb25PYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tp
bmRPZkNsYXNzOmdldEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlv
bkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JB
dHRhY2htZW50OjpDcm9zc1BsYXRmb3JtOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmlzQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uICpyZWdpc3RyYXRp
b25DcmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJ
ZCA9IHRvQXJyYXlCdWZmZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOwor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLmF0dGVzdGF0aW9uT2JqZWN0ID0gdG9BcnJheUJ1ZmZl
cihyZWdpc3RyYXRpb25DcmVkZW50aWFsLmF0dGVzdGF0aW9uT2JqZWN0KTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFzczpnZXRBU0NQbGF0Zm9ybVB1Ymxp
Y0tleUNyZWRlbnRpYWxBc3NlcnRpb25DbGFzcygpXSkgeworICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgICAgICAgICAg
ICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGZhbHNlOwor
CisgICAgICAgICAgICAgICAgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9u
ICphc3NlcnRpb25DcmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNw
b25zZS5yYXdJZCA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFs
SUQpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhID0gdG9BcnJh
eUJ1ZmZlcihhc3NlcnRpb25DcmVkZW50aWFsLmF1dGhlbnRpY2F0b3JEYXRhKTsKKyAgICAgICAg
ICAgICAgICByZXNwb25zZS5zaWduYXR1cmUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRl
bnRpYWwuc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS51c2VySGFuZGxlID0g
dG9BcnJheUJ1ZmZlcihhc3NlcnRpb25DcmVkZW50aWFsLnVzZXJIYW5kbGUpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tpbmRPZkNsYXNzOmdldEFTQ1NlY3VyaXR5S2V5
UHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAg
YXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtOworICAg
ICAgICAgICAgICAgIHJlc3BvbnNlLmlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2Ug
PSBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlh
bEFzc2VydGlvbiAqYXNzZXJ0aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAg
ICAgICAgcmVzcG9uc2UucmF3SWQgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwu
Y3JlZGVudGlhbElEKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hdXRoZW50aWNhdG9yRGF0
YSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5hdXRoZW50aWNhdG9yRGF0YSk7
CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2lnbmF0dXJlID0gdG9BcnJheUJ1ZmZlcihhc3Nl
cnRpb25DcmVkZW50aWFsLnNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UudXNl
ckhhbmRsZSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC51c2VySGFuZGxlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IChBdXRo
ZW50aWNhdG9yQXR0YWNobWVudCkgMDsKKyAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4
Y2VwdGlvbkNvZGU7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yTWVzc2FnZSA9IG5p
bDsKKyAgICAgICAgICAgICAgICBpZiAoW2Vycm9yLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6V0tF
cnJvckRvbWFpbl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ29kZSA9IChFeGNl
cHRpb25Db2RlKSBlcnJvci5jb2RlOworICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2Ug
PSBlcnJvci51c2VySW5mb1tOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5XTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25Db2RlID0gTm90QWxs
b3dlZEVycm9yOworCisgICAgICAgICAgICAgICAgICAgIGlmIChbZXJyb3IuZG9tYWluIGlzRXF1
YWxUb1N0cmluZzpBU0NBdXRob3JpemF0aW9uRXJyb3JEb21haW5dICYmIGVycm9yLmNvZGUgPT0g
QVNDQXV0aG9yaXphdGlvbkVycm9yVXNlckNhbmNlbGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JNZXNzYWdlID0gQCJUaGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGJ5IHRo
ZSB1c2VyLiI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSA9IEAiT3BlcmF0aW9uIGZhaWxlZC4iOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkRhdGEgPSB7IGV4Y2VwdGlvbkNvZGUsIGVy
cm9yTWVzc2FnZSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGVyKHJlc3Bv
bnNlLCBhdHRhY2htZW50LCBleGNlcHRpb25EYXRhKTsKKyAgICAgICAgfSkuZ2V0KCldOworICAg
IH0pLmdldCgpXTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6
aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKFF1ZXJ5Q29tcGxl
dGlvbkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIGlmIChbZ2V0QVNDV2ViS2l0U1BJU3VwcG9y
dENsYXNzKCkgc2hvdWxkVXNlQWx0ZXJuYXRlQ3JlZGVudGlhbFN0b3JlXSkgeworICAgICAgICBo
YW5kbGVyKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlcihMb2Nh
bFNlcnZpY2U6OmlzQXZhaWxhYmxlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAxY2EwZGUwNGUwMWNh
YTAzNDdjNTUyOTE0OTFlZWJkMjQ3ZDQ3ZGI0Li4xOTYyODU0YmRmNGE4MjNhYmJhYjA0ZjUwYmM1
ZmQ3YTEzMGUxYjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yUHJveHkuY3BwCkBAIC01NSw2ICs1NSw3IEBAIFdlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5Ojp+V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkoKQogICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
d2ViUGFnZVByb3h5LndlYlBhZ2VJRCgpKTsKIH0KIAorI2lmICFIQVZFKFVOSUZJRURfQVNDX0FV
VEhfVUkpCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVu
dGlhbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywg
VmVjdG9yPHVpbnQ4X3Q+JiYgaGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlv
bkhhbmRsZXImJiBoYW5kbGVyKQogewogICAgIGhhbmRsZVJlcXVlc3QoeyBXVEZNb3ZlKGhhc2gp
LCBXVEZNb3ZlKG9wdGlvbnMpLCBtYWtlV2Vha1B0cihtX3dlYlBhZ2VQcm94eSksIFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBHbG9iYWxGcmFtZUlk
ZW50aWZpZXIgeyBtX3dlYlBhZ2VQcm94eS53ZWJQYWdlSUQoKSwgZnJhbWVJZCB9LCBXVEZNb3Zl
KGZyYW1lSW5mbyksIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgU3RyaW5nKCksIG51bGxwdHIgfSwg
V1RGTW92ZShoYW5kbGVyKSk7CkBAIC02NCw2ICs2NSw3IEBAIHZvaWQgV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHk6OmdldEFzc2VydGlvbihGcmFtZUlkZW50aWZpZXIgZnJhbWVJZCwg
RnJhCiB7CiAgICAgaGFuZGxlUmVxdWVzdCh7IFdURk1vdmUoaGFzaCksIFdURk1vdmUob3B0aW9u
cyksIG1ha2VXZWFrUHRyKG1fd2ViUGFnZVByb3h5KSwgV2ViQXV0aGVudGljYXRpb25QYW5lbFJl
c3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIEdsb2JhbEZyYW1lSWRlbnRpZmllciB7IG1fd2Vi
UGFnZVByb3h5LndlYlBhZ2VJRCgpLCBmcmFtZUlkIH0sIFdURk1vdmUoZnJhbWVJbmZvKSwgcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlLCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGhhbmRsZXIp
KTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojpo
YW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEmJiBkYXRhLCBSZXF1ZXN0
Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQogewpAQCAtNzgsMTAgKzgwLDEyIEBAIHZvaWQg
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVu
dGljYXRpb25SZXF1ZXN0RGF0CiAgICAgbV93ZWJQYWdlUHJveHkud2Vic2l0ZURhdGFTdG9yZSgp
LmF1dGhlbnRpY2F0b3JNYW5hZ2VyKCkuaGFuZGxlUmVxdWVzdChXVEZNb3ZlKGRhdGEpLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CiB9CiAKKyNpZiAhSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQogdm9p
ZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZv
cm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKFF1ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVy
KQogewogICAgIGhhbmRsZXIoTG9jYWxTZXJ2aWNlOjppc0F2YWlsYWJsZSgpKTsKIH0KKyNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKaW5kZXggNTNmOTczYjVhNzRkYjJjNjlhMzZjMmFl
NmIyY2NkODc5ZTQyMmI4YS4uZDU1ZjEzZmQzM2RmY2I5NDdlYTQ5MDc0M2E3MGU3OWY5OTY0Njg4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eS5oCkBAIC00MSw2ICs0MSwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RP
cHRpb25zOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIH0KIAorI2lmIEhBVkUoVU5JRklF
RF9BU0NfQVVUSF9VSSkKK09CSkNfQ0xBU1MgQVNDQXV0aG9yaXphdGlvblJlbW90ZVByZXNlbnRl
cjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwpA
QCAtNzAsNiArNzQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVJlcXVlc3QoV2ViQXV0
aGVudGljYXRpb25SZXF1ZXN0RGF0YSYmLCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJik7CiAK
ICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OworCisjaWYgSEFWRShVTklGSUVEX0FT
Q19BVVRIX1VJKQorICAgIFJldGFpblB0cjxBU0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVy
PiBtX3ByZXNlbnRlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzN2Qw
ZGQyNDcxZWQ0MzhmOWNkNmM3NTllNDMwOGY3YjZkMjIyMmQ1Li42M2QxZDhlNWE0YTdjYTQ1NTRj
NmY4YmZkNWNmZmQ3OTM4N2YyYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI1MTcsNiArMjUxNyw3IEBACiAJCTA3RTE5RjA5MjNE
NTMzQkEwMDk0RkZCNCAvKiBUZXh0VHJhY2tQcml2YXRlUmVtb3RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRUcmFja1ByaXZhdGVSZW1vdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDg2N0Q2QTVGRTg0MDMwN0MwMkFBQzA3IC8qIEFwcEtpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IEFwcEtpdC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9BcHBLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkwODlD
MTY2N0ZFODQxMTU4QzAyQUFDMDcgLyogZW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnN0cmluZ3M7
IG5hbWUgPSBlbjsgcGF0aCA9IGVuLmxwcm9qL0luZm9QbGlzdC5zdHJpbmdzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRENCRjREOTI2RTJFRDMyMDBFQTBFMDcgLyogV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEU5N0Q3NEMyMDBFOEZGMzAwQkY2NjQzIC8qIFNhZmVCcm93c2luZ1NQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTYWZlQnJvd3NpbmdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEVERTg1MDIyMDA0RTc0OTAwMDMwNTYwIC8qIFdlYnNpdGVQb3BVcFBvbGljeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJzaXRlUG9wVXBQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwNDE1OTgyM0M3Q0M3MjAwNjBBM0UyIC8qIFdLU2Nyb2xsVmlld01hYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Njcm9sbFZpZXdNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTkyOTksNiArOTMwMCw3IEBACiAJCQkJNTcwREFBQUQyMzAyNkY1
QzAwRThGQzA0IC8qIE5mY1NlcnZpY2UubW0gKi8sCiAJCQkJNTc3RkY3ODMyMzQ2RUNBQTAwNEVE
RkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLywKIAkJCQk1NzdGRjc4NDIz
NDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5tbSAqLywKKwkJ
CQkwRENCRjREOTI2RTJFRDMyMDBFQTBFMDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHkubW0gKi8sCiAJCQkJNTc3NzM5OTMyNTgwMzg4RjAwNTkzNDhCIC8qIFdLQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlckRlbGVnYXRlLmggKi8sCiAJCQkJNTc3NzM5OTQyNTgwMzg4RjAwNTkz
NDhCIC8qIFdLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tICovLAogCQkJCTU3
MERBQUM0MjMwMzdGN0UwMEU4RkMwNCAvKiBXS05GUmVhZGVyU2Vzc2lvbkRlbGVnYXRlLmggKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCmluZGV4
IGQ1NDU4ZWRiZjQ0NTFjYTU4OGU5ZGZlNDdiMmNhZWFjNTU1NWE2OWMuLjFiMTI4MDlmODQ5MTk4
ZjlhM2M3MjZmMGJhNjYxYzM4MWQ3OWJkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwCkBAIC02OSw3ICs2OSwxMiBAQCB2b2lkIFdlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvcjo6bWFrZUNyZWRlbnRpYWwoY29uc3QgRnJhbWUmIGZyYW1lLCBj
b25zdCBTZWN1cgogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGZyYW1lLCB3ZWJGcmFtZS0+ZnJhbWVJRCgp
KTsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVkKCkpIHsKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FV
VEhfVUkpCisgICAgYm9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBmYWxzZTsKKyNlbHNlCisgICAg
Ym9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpOworI2VuZGlmCisgICAg
aWYgKCF1c2VXZWJBdXRoblByb2Nlc3MpIHsKICAgICAgICAgbV93ZWJQYWdlLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6Ok1ha2VD
cmVkZW50aWFsKHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIGhhc2gsIG9w
dGlvbnMsIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSwgV1RGTW92ZShoYW5kbGVyKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC04Niw3ICs5MSwxMiBAQCB2b2lkIFdlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgU2Vj
dXJpdAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
ID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGZyYW1lLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKTsKLSAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVu
dGljYXRpb25Nb2Rlcm5FbmFibGVkKCkpIHsKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkp
CisgICAgYm9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBmYWxzZTsKKyNlbHNlCisgICAgYm9vbCB1
c2VXZWJBdXRoblByb2Nlc3MgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpOworI2VuZGlmCisgICAgaWYgKCF1
c2VXZWJBdXRoblByb2Nlc3MpIHsKICAgICAgICAgbV93ZWJQYWdlLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OkdldEFzc2VydGlv
bih3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBoYXNoLCBvcHRpb25zLCBp
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSksIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtOTgsNyArMTA4LDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yOjpnZXRBc3NlcnRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBTZWN1cml0CiAK
IHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjppc1VzZXJWZXJpZnlpbmdQbGF0Zm9y
bUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoUXVlcnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIp
CiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpKSB7CisjaWYgSEFWRShVTklGSUVEX0FTQ19B
VVRIX1VJKQorICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gZmFsc2U7CisjZWxzZQorICAg
IGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKTsKKyNlbmRpZgorICAg
IGlmICghdXNlV2ViQXV0aG5Qcm9jZXNzKSB7CiAgICAgICAgIG1fd2ViUGFnZS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpJc1Vz
ZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoKSwgV1RGTW92ZShoYW5k
bGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439552</attachid>
            <date>2021-09-28 18:40:53 -0700</date>
            <delta_ts>2021-09-29 09:12:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20210928184052.patch</filename>
            <type>text/plain</type>
            <size>41160</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUxZmZmMjllYTU5ODlhYWIx
OGY5ODVkNzY2Yjc4N2JiMmYzMmUzMTQuLmU4OWE2OWUyOWFjZGI3NzhiNmYxNGE2NzI1NmRmZGVk
ZjAxY2NhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyB0aGUgcGxhdGZvcm0ncyBVSSBmb3IgV2ViQXV0aG4gdHJhbnNhY3Rpb25zLCB3aGVyZSBhdmFp
bGFibGUsCisgICAgICAgIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgV2ViQXV0aG4g
cHJvY2Vzcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmg6Cisg
ICAgICAgIFdoZW4gcG9zc2libGUsIHN3aXRjaCB0byBpbXBvcnRpbmcgdGhlIHVtYnJlbGxhIGhl
YWRlciBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIHJlZGVjbGFyaW5nIHRoZSBlbnRpcmUg
aW50ZXJmYWNlLgorCisgICAgICAgIEFsc28sIGZpeCBhbiBleGlzdGluZyBidWcgY2F1c2VkIGJ5
IHRoZSByZWRlY2xhcmF0aW9uLCB3aGVyZSB0aGUKKyAgICAgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZCBlbnVtIHdhcyByZW5hbWVkLgorCisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgQnVpbGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAo
LVtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aENoYWxsZW5nZTpv
cmlnaW46b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgUmV0dXJuIHRoZSBm
dWxsIGVycm9yIHRvIHRoZSBkZWxlZ2F0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlU29mdExpbmsubW06CisgICAgICAgIEFkZCBhbGwgb2YgdGhlIG5ldyByZXF1
aXJlZCBjbGFzc2VzIGZvciBzb2Z0IGxpbmtpbmcsIGFuZCBzb3J0IHRoZSBsaXN0LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9BcnJheUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvTlNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6dG9OU1N0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OnRvQVNDRGVzY3JpcHRvcik6CisgICAgICAgIEhlbHBl
ciBtZXRob2RzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gV0sgYW5kIEFTQyB0eXBlcy4KKworICAg
ICAgICAoV2ViS2l0Ojpjb25maWd1cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OmNvbmZpZ3VyYXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAg
ICAgIENyZWF0ZSBhbmQgY29uZmlndXJlIGFuIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCBm
cm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAg
ICBDb25maWd1cmUgYW5kIHBlcmZvcm0gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAg
ICAgLSBDcmVhdGUgYSBwcm94eSB0byB0YWxrIHRvIEF1dGhlbnRpY2F0aW9uU2VydmljZXNBZ2Vu
dC4KKyAgICAgICAgLSBBc2sgdGhlIHByb3h5IGlmIHdlJ3JlIGFsbG93ZWQgdG8gcGVyZm9ybSB0
aGUgcmVxdWVzdC4KKyAgICAgICAgICAtIElmIG5vLCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAg
ICAgLSBJZiB5ZXMsIGNyZWF0ZSBwcmVzZW50ZXIgYW5kIHByZXNlbnQgb3ZlciB0aGUgd2ViIHBh
Z2UncyB3aW5kb3cuCisgICAgICAgIC0gV2hlbiB0aGUgcmVxdWVzdCBpZiBmaW5pc2hlZCwgY2hl
Y2sgdGhlIGtpbmQgb2YgY3JlZGVudGlhbCB3ZSBnb3QsIGFuZCByZXR1cm4KKyAgICAgICAgdGhl
IHJlbGV2YW50IEF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEvQXV0aGVudGljYXRvckF0dGFjaG1l
bnQuCisgICAgICAgIC0gSWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIG9yIGZhaWxlZCwgYGNy
ZWRlbnRpYWxgIHdpbGwgYmUgbmlsIGFuZCBgZXJyb3JgIHdpbGwKKyAgICAgICAgYmUgbm9uLW5p
bC4gSW4gbW9zdCBjYXNlcywgdGhlIGVycm9yIHdpbGwgYmUgV0tFcnJvckRvbWFpbiwgd2hpY2gg
d2UgY2FuIGNvbnZlcnQKKyAgICAgICAgZGlyZWN0bHkgdG8gRXhjZXB0aW9uRGF0YS4gVGhlIG9u
ZSBleGNlcHRpb24gaXMgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIHJlcXVlc3QgaW4KKyAgICAgICAg
dGhlIHBsYXRmb3JtIFVJLCBzbyByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIEV4Y2VwdGlvbkRhdGEg
aW4gdGhhdCBjYXNlLiBUaGUgZmluYWwKKyAgICAgICAgIk9wZXJhdGlvbiBmYWlsZWQuIiBjYXNl
IGNvdmVycyBhbnl0aGluZyBlbHNlIHVuZXhwZWN0ZWQgaGFwcGVuaW5nLgorCisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQ
bGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUpOgorICAgICAgICBJZiArc2hvdWxkVXNlQWx0
ZXJuYXRlQ3JlZGVudGlhbFN0b3JlIGlzIHRydWUsIHRoaXMgaXMgYWx3YXlzIHRydWUuIE90aGVy
d2lzZSwKKyAgICAgICAgZmFsbCBiYWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJl
c2VudGVyRGVsZWdhdGUubW06CisgICAgICAgICgtW1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRl
ckRlbGVnYXRlIGF1dGhvcml6YXRpb25QcmVzZW50ZXI6Y3JlZGVudGlhbFJlcXVlc3RlZEZvckxv
Z2luQ2hvaWNlOmF1dGhlbnRpY2F0ZWRDb250ZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICBVc2UgdGhlIG5ldyBuYW1lIG9mIHRoZSBlbnVtLCB1bmNvbmRpdGlvbmFsbHkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHkuY3BwOgorICAgICAgICBXcmFwIGEgZmV3IG1ldGhvZHMgaW4gdGhlIG5ldyBm
bGFnLiBXaGVuIHRoZSBmbGFnIGlzIG9uLCB0aGVzZSBtZXRob2RzIHdpbGwgZXhpc3QKKyAgICAg
ICAgaW4gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0uCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHkuaDoKKyAgICAgICAgTmV3IGl2YXIgZm9yIHRoZSBwbGF0Zm9ybSBwcmVzZW50ZXIuCisKKyAg
ICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIHRo
ZSBuZXcgZmlsZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgV2hlbiBwbGF0Zm9ybSBVSSBp
cyBhdmFpbGFibGUsIHByZWZlciBpdCBvdmVyIHRoZSBXZWJBdXRobiBwcm9jZXNzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6Om1ha2VDcmVkZW50aWFsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjpnZXRBc3NlcnRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmlzVXNl
clZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSk6CisKIDIwMjEtMDktMjgg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVu
dXNlZCAiY29tLmFwcGxlLnNlY3VyaXR5LmV4Y2VwdGlvbi5maWxlKiIgcnVsZXMgZnJvbSBXZWJL
aXQgc2FuZGJveGVzIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvQ29j
b2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmgKaW5kZXggN2MzM2Ni
ZWIxYTQ1NDBmZDU1ZDc1MTQyZDI0Y2FiN2Q4NzRhYzcyMC4uZjI3MDhlNmUxZjAyMDc1NWZmOTMz
MjdmNzFkZmMwNTNlNGQ3NzMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9z
cGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNQSS5oCkBA
IC0yNSwxOSArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEhBVkUoQVNDX0FVVEhfVUkp
Ci0KLS8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcyNDA2NTg1PjogVW5jb21tZW50IHRoZSBoZWFk
ZXJzIGFmdGVyIHRoZSBTREsgYmVjb21lcyBzdGFibGUuCi0vLyNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQotLy8KLS8vLy8gRklYTUUoMjE5NzY3KTogUmVtb3ZlIEFTQ0FwcGxlSURDcmVkZW50
aWFsLmguCi0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0FwcGxlSURD
cmVkZW50aWFsLmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0F1
dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0Lmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlL0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIuaD4KLS8vI2ltcG9ydCA8
QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFs
TG9naW5DaG9pY2UuaD4KLS8vI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UuaD4KLS8vCi0vLyNlbHNl
CisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorI2ltcG9ydCA8QXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmUvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVQcml2YXRlLmg+CisjZWxpZiBI
QVZFKEFTQ19BVVRIX1VJKQogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCkBAIC0xMDgsMTAg
Kzk4LDEwIEBAIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEFTQ0F1dGhvcml6YXRpb25QcmVzZW50
YXRpb25Db250ZXh0RGF0YUtleTsKIAogQGVuZAogCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmQpIHsKLSAg
ICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmRSZWdpc3Ry
YXRpb24sCi0gICAgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VL
aW5kQXNzZXJ0aW9uLAotICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2lu
Q2hvaWNlS2luZEFzc2VydGlvblBsYWNlaG9sZGVyLAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZCkgeworICAgIEFTQ1NlY3Vy
aXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmRSZWdpc3RyYXRpb24sCisgICAgQVNDU2VjdXJp
dHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvbiwKKyAgICBBU0NTZWN1cml0eUtl
eVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kQXNzZXJ0aW9uUGxhY2Vob2xkZXIsCiB9OwogCiBAaW50
ZXJmYWNlIEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdCA8
TlNTZWN1cmVDb2Rpbmc+CkBAIC0xMzYsNyArMTI2LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmlu
ZyAqbmFtZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwgcmVhZG9ubHksIGNvcHkp
IE5TU3RyaW5nICpkaXNwbGF5TmFtZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwg
cmVhZG9ubHksIGNvcHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VL
aW5kIGxvZ2luQ2hvaWNlS2luZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZCBjcmVkZW50aWFsS2luZDsKIAogKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKIC0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDExZTcyOTY4NGU0YTJhZGYw
YjVjYjg5M2FkNjc5MWQ5MDA1ODI2MDUuLjFkNjNiOTk1MzY3NGM0NzVmMjEyNDdjM2VlZWE1OGEx
ZWYwNzkyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU5MSw2ICs1OTEsNyBAQCBVSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTmZjU2VydmljZS5tbQogVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRl
Lm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tORlJlYWRlclNlc3Npb25E
ZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQubW0KK1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbQogCiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxTZXJ2aWNlLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
Lm1tCmluZGV4IDI2ZGQ1NjI2MTQyYjI4NTM4YmMxNDc2N2Y3YTUyZGUxYTY2OWE2NmEuLjViNjcx
OTk4ZjMwNjZkNjNlNzllM2ExN2Y1ZmQ3OTZhZjZkZGE1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLm1tCkBAIC00NzksNyArNDc5LDcgQEAgc3RhdGljIFJldGFpblB0cjxfV0tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZT4gd2tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb24KICAg
ICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGhhbmRsZXIod2tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpLCBjbGllbnREYXRh
SlNPTi5nZXQoKSwgcmVzcG9uc2UtPmF0dGFjaG1lbnQoKSkuZ2V0KCksIG5pbCk7CiAgICAgICAg
IH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsKLSAgICAg
ICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFp
biBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICAgICAgaGFuZGxl
cihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6ZXhjZXB0
aW9uLmNvZGUgdXNlckluZm86QHsgTlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogZXhjZXB0aW9u
Lm1lc3NhZ2UgfV0pOwogICAgICAgICB9KTsKICAgICB9OwogICAgIF9wYW5lbC0+aGFuZGxlUmVx
dWVzdCh7IFdURk1vdmUoaGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRU
b0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgc3Rk
OjpudWxsb3B0LCB7IH0sIHRydWUsIFN0cmluZygpLCBudWxscHRyIH0sIFdURk1vdmUoY2FsbGJh
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlU29mdExpbmsuaAppbmRleCBjOTJmOTAwMTdmNTM5YTk1MzQyN2RlMzFhOGYzNjI5
OGNjMTExYzZlLi5iM2E3OWMwN2FiYTJjYmFmZWVmZWZjNmM2N2NhZTEzNmY3MjIyNTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9B
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0Nv
cmVTb2Z0TGluay5oCkBAIC0zMiwxNCArMzIsMjMgQEAgU09GVF9MSU5LX0ZSQU1FV09SS19GT1Jf
SEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUpOwogCiBTT0ZUX0xJTktf
Q0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1dlYktpdFNQSVN1cHBvcnQpOwogCi0jaWYgSEFW
RShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19BVVRIX1VJKSB8fCBIQVZFKFVOSUZJRURfQVND
X0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFT
Q0FnZW50UHJveHkpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBcHBs
ZUlEQ3JlZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1
dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVB
REVSKFdlYktpdCwgQVNDQXV0aG9yaXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1Nf
Rk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXIpOworU09G
VF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRl
eHQpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQbGF0Zm9ybVB1Ymxp
Y0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2Vi
S2l0LCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJ
TktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVu
dGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVND
QXBwbGVJRENyZWRlbnRpYWwpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBB
U0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb24pOworU09GVF9MSU5LX0NM
QVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0
aW9ucyk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1B1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2Vi
S2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik7CitTT0ZUX0xJTktfQ0xBU1Nf
Rk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEFzc2Vy
dGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5
UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVB
REVSKFdlYktpdCwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9u
KTsKIAogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViS2l0LCBBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluLCBOU0Vycm9yRG9tYWlu
KTsKICNkZWZpbmUgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluIFdlYktpdDo6Z2V0X0F1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlX0FTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9B
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVT
b2Z0TGluay5tbQppbmRleCBiOTMxM2M4NmRkN2RjNTAwMDY2MmFhYmMzZDUzMjM4ZWE3Y2Y1MmNi
Li5hMjNhYzUzYTdiYzE5YTJlMjUyNWVkMzY5MjBkMGRkYzM0ZjMyODZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNh
dGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExp
bmsubW0KQEAgLTMyLDE0ICszMiwyMyBAQCBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfRk9S
X1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5L
X0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVND
V2ViS2l0U1BJU3VwcG9ydCk7CiAKLSNpZiBIQVZFKEFTQ19BVVRIX1VJKQorI2lmIEhBVkUoQVND
X0FVVEhfVUkpIHx8IEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIAotU09GVF9MSU5LX0NMQVNT
X0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBZ2VudFByb3h5KTsKK1NPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxl
SURDcmVkZW50aWFsKTsKIFNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZP
Ul9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXph
dGlvblJlbW90ZVByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQs
IEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQp
OworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZp
Y2VzQ29yZSwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNPRlRf
TElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUs
IEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19D
TEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1Nl
Y3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxl
SURDcmVkZW50aWFsKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lz
dHJhdGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyk7
CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKTsKK1NPRlRfTElO
S19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFT
Q1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09V
UkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tl
eUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJL
aXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNy
ZWRlbnRpYWxSZWdpc3RyYXRpb24pOwogCiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uRXJyb3JE
b21haW4sIE5TRXJyb3JEb21haW4pOwogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2Vi
S2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDUElOVmFsaWRhdGlvblJlc3VsdEtl
eSwgTlNTdHJpbmcqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NB
dXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KaW5kZXggN2MyMDhmZjBhZDU3MDBlYzE3
ZGI0NDM4YjY4MzQ5YTQzY2QyNmE5OS4uZjI5NTBmZTMwNjkxNWYwMWM3ZGFiOGIwMjkwZDcwYTNl
Yzc5MDMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRo
b3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KQEAgLTc4LDcgKzc4LDcgQEAgTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KICAgICBpZiAoW2xvZ2luQ2hvaWNlIGlzS2luZE9mQ2xhc3M6V2ViS2l0
OjpnZXRBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUNsYXNzKCld
KSB7CiAgICAgICAgIGF1dG8gKnNlY3VyaXR5S2V5TG9naW5DaG9pY2UgPSAoQVNDU2VjdXJpdHlL
ZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UgKilsb2dpbkNob2ljZTsKIAotICAgICAg
ICBpZiAoW3NlY3VyaXR5S2V5TG9naW5DaG9pY2UgbG9naW5DaG9pY2VLaW5kXSA9PSBBU0NTZWN1
cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmRBc3NlcnRpb24pIHsKKyAg
ICAgICAgaWYgKFtzZWN1cml0eUtleUxvZ2luQ2hvaWNlIGNyZWRlbnRpYWxLaW5kXSA9PSBBU0NT
ZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kQXNzZXJ0aW9uKSB7CiAgICAgICAgICAg
ICBTdHJpbmcgbG9naW5DaG9pY2VOYW1lID0gc2VjdXJpdHlLZXlMb2dpbkNob2ljZS5uYW1lOwog
ICAgICAgICAgICAgW3NlbGYgZGlzcGF0Y2hDb29yZGluYXRvckNhbGxiYWNrOltsb2dpbkNob2lj
ZU5hbWUgPSBXVEZNb3ZlKGxvZ2luQ2hvaWNlTmFtZSldIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JQ
cmVzZW50ZXJDb29yZGluYXRvciYgY29vcmRpbmF0b3IpIG11dGFibGUgewogICAgICAgICAgICAg
ICAgIGNvb3JkaW5hdG9yLmRpZFNlbGVjdEFzc2VydGlvblJlc3BvbnNlKGxvZ2luQ2hvaWNlTmFt
ZSwgbmlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MwMjUwMjg1NGJmM2M2YzRjYWVmNmI5
ZWQ4ODZmNDFhMGNiMWFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclBy
b3h5Lm1tCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEhBVkUoVU5JRklFRF9B
U0NfQVVUSF9VSSkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eS5oIgorCisjaW1wb3J0ICJMb2NhbFNlcnZpY2UuaCIKKyNpbXBv
cnQgIldLRXJyb3IuaCIKKyNpbXBvcnQgIldlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNl
cy9BU0NPU0VDb25zdGFudHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvckF0dGFj
aG1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgorCisjaW1wb3J0ICJBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBpbmxp
bmUgUmVmPEFycmF5QnVmZmVyPiB0b0FycmF5QnVmZmVyKE5TRGF0YSAqZGF0YSkKK3sKKyAgICBy
ZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0
cjxOU0RhdGE+IHRvTlNEYXRhKGNvbnN0IEJ1ZmZlclNvdXJjZSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5n
dGg6ZGF0YS5sZW5ndGgoKV0pOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxOU0RhdGE+
IHRvTlNEYXRhKGNvbnN0IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IpCit7CisgICAgcmV0dXJuIGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dmVjdG9yLmRhdGEoKSBsZW5ndGg6
dmVjdG9yLnNpemUoKV0pOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxOU1N0cmluZz4g
dG9OU1N0cmluZyhVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50KQoreworICAgIHN3aXRjaCAodXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KSB7
CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOgorICAgICAg
ICByZXR1cm4gYWRvcHROUyhAInJlcXVpcmVkIik7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkOgorICAgICAgICByZXR1cm4gYWRvcHROUyhAImRpc2Nv
dXJhZ2VkIik7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJl
ZDoKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoQCJwcmVmZXJyZWQiKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRvcHROUyhAInByZWZlcnJlZCIpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0
cjxBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gdG9BU0NEZXNjcmlwdG9yKFB1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCit7CisgICAgTlNNdXRhYmxlQXJy
YXk8TlNTdHJpbmcgKj4gKnRyYW5zcG9ydHMgPSBuaWw7CisgICAgc2l6ZV90IHRyYW5zcG9ydENv
dW50ID0gZGVzY3JpcHRvci50cmFuc3BvcnRzLnNpemUoKTsKKyAgICBpZiAodHJhbnNwb3J0Q291
bnQpIHsKKyAgICAgICAgdHJhbnNwb3J0cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6dHJhbnNwb3J0Q291bnRdOworCisgICAgICAgIGZvciAoQXV0aGVudGljYXRv
clRyYW5zcG9ydCB0cmFuc3BvcnQgOiBkZXNjcmlwdG9yLnRyYW5zcG9ydHMpIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp0cmFuc3BvcnRTdHJpbmcgPSBuaWw7CisgICAgICAgICAgICBzd2l0Y2gg
KHRyYW5zcG9ydCkgeworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpV
c2I6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJ1c2IiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpO
ZmM6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJuZmMiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpC
bGU6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJibGUiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJ
bnRlcm5hbDoKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnRTdHJpbmcgPSBAImludGVybmFsIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHRyYW5zcG9ydFN0cmluZykKKyAgICAgICAgICAgICAgICBbdHJhbnNwb3J0cyBhZGRPYmplY3Q6
dHJhbnNwb3J0U3RyaW5nXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdE5T
KFthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ySW5zdGFuY2UoKSBpbml0V2l0
aENyZWRlbnRpYWxJRDp0b05TRGF0YShkZXNjcmlwdG9yLmlkVmVjdG9yKS5nZXQoKSB0cmFuc3Bv
cnRzOldURk1vdmUodHJhbnNwb3J0cyldKTsKK30KKworc3RhdGljIFJldGFpblB0cjxBU0NDcmVk
ZW50aWFsUmVxdWVzdENvbnRleHQ+IGNvbmZpZ3VyZVJlZ2lzdHJhdGlvblJlcXVlc3RDb250ZXh0
KGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlcyByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFs
UmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleVJlZ2lzdHJhdGlvbiB8IEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0cmF0aW9uOworCisgICAgTlNTdHJp
bmcgKnVzZXJWZXJpZmljYXRpb24gPSBuaWw7CisgICAgYm9vbCBzaG91bGRSZXF1aXJlUmVzaWRl
bnRLZXkgPSBmYWxzZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYT4gYXV0aGVudGljYXRv
clNlbGVjdGlvbiA9IG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbjsKKyAgICBpZiAoYXV0
aGVudGljYXRvclNlbGVjdGlvbikgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0
b3JBdHRhY2htZW50PiBhdHRhY2htZW50ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVu
dGljYXRvckF0dGFjaG1lbnQ7CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0
b3JBdHRhY2htZW50OjpQbGF0Zm9ybSkKKyAgICAgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0Ny
ZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uOworICAgICAg
ICBlbHNlIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1Bs
YXRmb3JtKQorICAgICAgICAgICAgcmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RU
eXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlSZWdpc3RyYXRpb247CisKKyAgICAgICAgdXNlclZlcmlm
aWNhdGlvbiA9IHRvTlNTdHJpbmcoYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNh
dGlvbikuZ2V0KCk7CisKKyAgICAgICAgc2hvdWxkUmVxdWlyZVJlc2lkZW50S2V5ID0gYXV0aGVu
dGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5OworICAgIH0KKworICAgIEFTQ0Ny
ZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCAqcmVxdWVzdENvbnRleHQgPSBbYWxsb2NBU0NDcmVkZW50
aWFsUmVxdWVzdENvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUmVxdWVzdFR5cGVzOnJlcXVlc3RU
eXBlc107CisgICAgcmVxdWVzdENvbnRleHQucmVseWluZ1BhcnR5SWRlbnRpZmllciA9IG9wdGlv
bnMucnAuaWQ7CisKKyAgICBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpj
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0gW2FsbG9jQVNDUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdF07CisKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmNoYWxsZW5nZSA9IHRvTlNEYXRhKG9wdGlvbnMuY2hhbGxlbmdlKS5nZXQoKTsKKyAg
ICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnJlbHlpbmdQYXJ0eUlkZW50aWZpZXIgPSBvcHRp
b25zLnJwLmlkOworICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMudXNlck5hbWUgPSBvcHRp
b25zLnVzZXIubmFtZTsKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnVzZXJJZGVudGlm
aWVyID0gdG9OU0RhdGEob3B0aW9ucy51c2VyLmlkKS5nZXQoKTsKKyAgICBjcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLnVzZXJEaXNwbGF5TmFtZSA9IG9wdGlvbnMudXNlci5kaXNwbGF5TmFtZTsK
KyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnVzZXJWZXJpZmljYXRpb25QcmVmZXJlbmNl
ID0gdXNlclZlcmlmaWNhdGlvbjsKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnNob3Vs
ZFJlcXVpcmVSZXNpZGVudEtleSA9IHNob3VsZFJlcXVpcmVSZXNpZGVudEtleTsKKworICAgIE5T
TXV0YWJsZUFycmF5PE5TTnVtYmVyICo+ICpzdXBwb3J0ZWRBbGdvcml0aG1JZGVudGlmaWVycyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5wdWJLZXlD
cmVkUGFyYW1zLnNpemUoKV07CisgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOjpQYXJhbWV0ZXJzIGFsZ29yaXRobVBhcmFtZXRlciA6IG9wdGlvbnMucHViS2V5Q3Jl
ZFBhcmFtcykKKyAgICAgICAgW3N1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzIGFkZE9iamVj
dDpAKGFsZ29yaXRobVBhcmFtZXRlci5hbGcpXTsKKworICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMuc3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHN1cHBvcnRlZEFs
Z29yaXRobUlkZW50aWZpZXJzKTsKKworICAgIHNpemVfdCBleGNsdWRlZENyZWRlbnRpYWxDb3Vu
dCA9IG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKTsKKyAgICBpZiAoZXhjbHVkZWRD
cmVkZW50aWFsQ291bnQpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8QVNDUHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVkQ3JlZGVudGlhbHMgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmV4Y2x1ZGVkQ3JlZGVudGlhbENvdW50XTsKKwor
ICAgICAgICBmb3IgKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBv
cHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgICAgIFtleGNsdWRlZENyZWRlbnRp
YWxzIGFkZE9iamVjdDp0b0FTQ0Rlc2NyaXB0b3IoZGVzY3JpcHRvcikuZ2V0KCldOworCisgICAg
ICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuZXhjbHVkZWRDcmVkZW50aWFscyA9IFdURk1v
dmUoZXhjbHVkZWRDcmVkZW50aWFscyk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3RUeXBlcyAm
IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uKQor
ICAgICAgICByZXF1ZXN0Q29udGV4dC5wbGF0Zm9ybUtleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgPSBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworCisgICAgaWYgKHJlcXVlc3RUeXBlcyAm
IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0cmF0aW9u
KQorICAgICAgICByZXF1ZXN0Q29udGV4dC5zZWN1cml0eUtleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgPSBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworCisgICAgcmV0dXJuIGFkb3B0TlMo
cmVxdWVzdENvbnRleHQpOworfQorCitzdGF0aWMgUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1
ZXN0Q29udGV4dD4gY29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RDb250ZXh0KGNvbnN0IFB1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU0NDcmVk
ZW50aWFsUmVxdWVzdFR5cGVzIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlw
ZVBsYXRmb3JtUHVibGljS2V5QXNzZXJ0aW9uIHwgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2Vj
dXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb247CisKKyAgICBOU1N0cmluZyAqdXNlclZlcmlmaWNh
dGlvbiA9IG5pbDsKKyAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBh
dHRhY2htZW50ID0gb3B0aW9ucy5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKKyAgICBpZiAoYXR0
YWNobWVudCA9PSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm0pCisgICAgICAgIHJl
cXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5QXNz
ZXJ0aW9uOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gQXV0aGVudGljYXRvckF0dGFjaG1l
bnQ6OkNyb3NzUGxhdGZvcm0pCisgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0aW9uOworCisgICAgdXNlclZlcmlm
aWNhdGlvbiA9IHRvTlNTdHJpbmcob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKS5nZXQoKTsKKwor
ICAgIHNpemVfdCBhbGxvd2VkQ3JlZGVudGlhbENvdW50ID0gb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheTxBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciAqPiAqYWxsb3dlZENyZWRlbnRpYWxzID0gbmlsOworICAgIGlmIChhbGxvd2VkQ3Jl
ZGVudGlhbENvdW50KSB7CisgICAgICAgIGFsbG93ZWRDcmVkZW50aWFscyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YWxsb3dlZENyZWRlbnRpYWxDb3VudF07CisK
KyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9yIDog
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKQorICAgICAgICAgICAgW2FsbG93ZWRDcmVkZW50aWFs
cyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2NyaXB0b3IpLmdldCgpXTsKKyAgICB9CisK
KyAgICBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQgKnJlcXVlc3RDb250ZXh0ID0gW2FsbG9j
QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFJlcXVlc3RUeXBl
czpyZXF1ZXN0VHlwZXNdOworICAgIHJlcXVlc3RDb250ZXh0LnJlbHlpbmdQYXJ0eUlkZW50aWZp
ZXIgPSBvcHRpb25zLnJwSWQ7CisKKyAgICBOU0RhdGEgKmNoYWxsZW5nZSA9IHRvTlNEYXRhKG9w
dGlvbnMuY2hhbGxlbmdlKS5nZXQoKTsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0NDcmVk
ZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbikKKyAgICAgICAgcmVx
dWVzdENvbnRleHQucGxhdGZvcm1LZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyA9IFthbGxv
Y0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb25PcHRpb25zSW5zdGFuY2UoKSBpbml0V2l0
aEtpbmQ6QVNDUHVibGljS2V5Q3JlZGVudGlhbEtpbmRQbGF0Zm9ybSByZWx5aW5nUGFydHlJZGVu
dGlmaWVyOm9wdGlvbnMucnBJZCBjaGFsbGVuZ2U6Y2hhbGxlbmdlIHVzZXJWZXJpZmljYXRpb25Q
cmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24gYWxsb3dlZENyZWRlbnRpYWxzOmFsbG93ZWRDcmVk
ZW50aWFsc107CisKKyAgICBpZiAocmVxdWVzdFR5cGVzICYgQVNDQ3JlZGVudGlhbFJlcXVlc3RU
eXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb24pCisgICAgICAgIHJlcXVlc3RDb250ZXh0
LnNlY3VyaXR5S2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMgPSBbYWxsb2NBU0NQdWJsaWNL
ZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdFdpdGhLaW5kOkFTQ1B1
YmxpY0tleUNyZWRlbnRpYWxLaW5kU2VjdXJpdHlLZXkgcmVseWluZ1BhcnR5SWRlbnRpZmllcjpv
cHRpb25zLnJwSWQgY2hhbGxlbmdlOmNoYWxsZW5nZSB1c2VyVmVyaWZpY2F0aW9uUHJlZmVyZW5j
ZTp1c2VyVmVyaWZpY2F0aW9uIGFsbG93ZWRDcmVkZW50aWFsczphbGxvd2VkQ3JlZGVudGlhbHNd
OworCisgICAgcmV0dXJuIGFkb3B0TlMocmVxdWVzdENvbnRleHQpOworfQorCit2b2lkIFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlhbChGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4X3Q+JiYg
aGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYmIG9wdGlvbnMsIGJvb2wg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVy
KQoreworICAgIFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQ+IHJlcXVlc3RD
b250ZXh0ID0gY29uZmlndXJlUmVnaXN0cmF0aW9uUmVxdWVzdENvbnRleHQoV1RGTW92ZShvcHRp
b25zKSk7CisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdENvbnRleHQsIFdURk1vdmUoaGFuZGxl
cikpOworfQorCit2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpnZXRBc3Nl
cnRpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSWQsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8s
IFZlY3Rvcjx1aW50OF90PiYmIGhhc2gsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlv
bkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVz
dENvbnRleHQ+IHJlcXVlc3RDb250ZXh0ID0gY29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RD
b250ZXh0KG9wdGlvbnMpOworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3RDb250ZXh0LCBXVEZN
b3ZlKGhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eTo6cGVyZm9ybVJlcXVlc3QoUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4g
cmVxdWVzdENvbnRleHQsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7Cisg
ICAgQVNDQWdlbnRQcm94eSAqcHJveHkgPSBbYWxsb2NBU0NBZ2VudFByb3h5SW5zdGFuY2UoKSBp
bml0XTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dlYlBhZ2VQcm94eS5wbGF0Zm9ybVdp
bmRvdygpOworICAgIFtwcm94eSBwZXJmb3JtQXV0aG9yaXphdGlvblJlcXVlc3RzRm9yQ29udGV4
dDpyZXF1ZXN0Q29udGV4dC5nZXQoKSB3aXRoQ2xlYXJhbmNlSGFuZGxlcjptYWtlQmxvY2tQdHIo
W3RoaXMsIGhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpLCB3aW5kb3cgPSBXVEZNb3ZlKHdpbmRv
dyldKE5TWFBDTGlzdGVuZXJFbmRwb2ludCAqZGFlbW9uRW5wb2ludCwgTlNFcnJvciAqZXJyb3Ip
IG11dGFibGUgeworICAgICAgICBpZiAoIWRhZW1vbkVucG9pbnQpIHsKKyAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbaGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcih7IH0sIChBdXRoZW50aWNhdG9yQXR0YWNo
bWVudCkwLCBFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9yLCAiT3BlcmF0aW9uIGZhaWxl
ZC4iIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX3ByZXNlbnRlciA9IFthbGxvY0FTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVz
ZW50ZXJJbnN0YW5jZSgpIGluaXRdOworICAgICAgICBbbV9wcmVzZW50ZXIgcHJlc2VudFdpdGhX
aW5kb3c6d2luZG93IGRhZW1vbkVuZHBvaW50OmRhZW1vbkVucG9pbnQgY29tcGxldGlvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFtoYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKV0oaWQgPEFTQ0NyZWRl
bnRpYWxQcm90b2NvbD4gY3JlZGVudGlhbCwgTlNFcnJvciAqZXJyb3IpIG11dGFibGUgeworICAg
ICAgICAgICAgQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSByZXNwb25zZSA9IHsgfTsKKyAgICAg
ICAgICAgIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF0dGFjaG1lbnQ7CisgICAgICAgICAgICBF
eGNlcHRpb25EYXRhIGV4Y2VwdGlvbkRhdGEgPSB7IH07CisKKyAgICAgICAgICAgIGlmIChbY3Jl
ZGVudGlhbCBpc0tpbmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJl
Z2lzdHJhdGlvbkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhl
bnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5p
c0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlID0gdHJ1ZTsKKworICAgICAgICAgICAg
ICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbiAqcmVnaXN0cmF0
aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UucmF3
SWQgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuY3JlZGVudGlhbElEKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS5hdHRlc3RhdGlvbk9iamVjdCA9IHRvQXJyYXlCdWZm
ZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5hdHRlc3RhdGlvbk9iamVjdCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlzS2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQ
dWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uQ2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRl
bnRpYWxSZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihyZWdpc3RyYXRp
b25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXR0
ZXN0YXRpb25PYmplY3QgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuYXR0
ZXN0YXRpb25PYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tp
bmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbkNsYXNz
KCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5pc0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBBU0NQbGF0Zm9y
bVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24gKmFzc2VydGlvbkNyZWRlbnRpYWwgPSBjcmVk
ZW50aWFsOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihh
c3NlcnRpb25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9u
c2UuYXV0aGVudGljYXRvckRhdGEgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwu
YXV0aGVudGljYXRvckRhdGEpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNpZ25hdHVyZSA9
IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5zaWduYXR1cmUpOworICAgICAgICAg
ICAgICAgIHJlc3BvbnNlLnVzZXJIYW5kbGUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRl
bnRpYWwudXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlz
S2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9u
Q2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg
QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uICphc3NlcnRpb25DcmVkZW50
aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJZCA9IHRvQXJy
YXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOworICAgICAgICAgICAg
ICAgIHJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhID0gdG9BcnJheUJ1ZmZlcihhc3NlcnRpb25D
cmVkZW50aWFsLmF1dGhlbnRpY2F0b3JEYXRhKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5z
aWduYXR1cmUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwuc2lnbmF0dXJlKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS51c2VySGFuZGxlID0gdG9BcnJheUJ1ZmZlcihhc3Nl
cnRpb25DcmVkZW50aWFsLnVzZXJIYW5kbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdHRhY2htZW50ID0gKEF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSAwOworICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZTsKKyAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqZXJyb3JNZXNzYWdlID0gbmlsOworICAgICAgICAgICAgICAgIGlmIChbZXJy
b3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpXS0Vycm9yRG9tYWluXSkgeworICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25Db2RlID0gKEV4Y2VwdGlvbkNvZGUpIGVycm9yLmNvZGU7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLnVzZXJJbmZvW05TTG9jYWxpemVk
RGVzY3JpcHRpb25LZXldOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNvZGUgPSBOb3RBbGxvd2VkRXJyb3I7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFtlcnJvci5kb21haW4gaXNFcXVhbFRvU3RyaW5nOkFTQ0F1dGhvcml6YXRpb25F
cnJvckRvbWFpbl0gJiYgZXJyb3IuY29kZSA9PSBBU0NBdXRob3JpemF0aW9uRXJyb3JVc2VyQ2Fu
Y2VsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBAIlRoaXMgcmVx
dWVzdCBoYXMgYmVlbiBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuIjsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gQCJPcGVyYXRp
b24gZmFpbGVkLiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXhjZXB0
aW9uRGF0YSA9IHsgZXhjZXB0aW9uQ29kZSwgZXJyb3JNZXNzYWdlIH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGhhbmRsZXIocmVzcG9uc2UsIGF0dGFjaG1lbnQsIGV4Y2VwdGlvbkRh
dGEpOworICAgICAgICB9KS5nZXQoKV07CisgICAgfSkuZ2V0KCldOworfQorCit2b2lkIFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhl
bnRpY2F0b3JBdmFpbGFibGUoUXVlcnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7Cisg
ICAgaWYgKFtnZXRBU0NXZWJLaXRTUElTdXBwb3J0Q2xhc3MoKSBzaG91bGRVc2VBbHRlcm5hdGVD
cmVkZW50aWFsU3RvcmVdKSB7CisgICAgICAgIGhhbmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBoYW5kbGVyKExvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShVTklGSUVEX0FTQ19B
VVRIX1VJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHkuY3BwCmluZGV4IDFjYTBkZTA0ZTAxY2FhMDM0N2M1NTI5MTQ5MWVlYmQyNDdkNDdkYjQu
LjE5NjI4NTRiZGY0YTgyM2FiYmFiMDRmNTBiYzVmZDdhMTMwZTFiMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6On5XZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eSgpCiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCkpOwog
fQogCisjaWYgIUhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIHZvaWQgV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHk6Om1ha2VDcmVkZW50aWFsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlk
LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhfdD4mJiBoYXNoLCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiYgb3B0aW9ucywgYm9vbCBwcm9jZXNzaW5n
VXNlckdlc3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAg
aGFuZGxlUmVxdWVzdCh7IFdURk1vdmUoaGFzaCksIFdURk1vdmUob3B0aW9ucyksIG1ha2VXZWFr
UHRyKG1fd2ViUGFnZVByb3h5KSwgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFp
bGFibGUsIG51bGxwdHIsIEdsb2JhbEZyYW1lSWRlbnRpZmllciB7IG1fd2ViUGFnZVByb3h5Lndl
YlBhZ2VJRCgpLCBmcmFtZUlkIH0sIFdURk1vdmUoZnJhbWVJbmZvKSwgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlLCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGhhbmRsZXIpKTsKQEAgLTY0LDYg
KzY1LDcgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6Z2V0QXNzZXJ0
aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlkLCBGcmEKIHsKICAgICBoYW5kbGVSZXF1ZXN0KHsg
V1RGTW92ZShoYXNoKSwgV1RGTW92ZShvcHRpb25zKSwgbWFrZVdlYWtQdHIobV93ZWJQYWdlUHJv
eHkpLCBXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwg
R2xvYmFsRnJhbWVJZGVudGlmaWVyIHsgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCksIGZyYW1l
SWQgfSwgV1RGTW92ZShmcmFtZUluZm8pLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFN0cmluZygp
LCBudWxscHRyIH0sIFdURk1vdmUoaGFuZGxlcikpOwogfQorI2VuZGlmCiAKIHZvaWQgV2ViQXV0
aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRp
b25SZXF1ZXN0RGF0YSYmIGRhdGEsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIp
CiB7CkBAIC03OCwxMCArODAsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eTo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXQKICAgICBtX3dl
YlBhZ2VQcm94eS53ZWJzaXRlRGF0YVN0b3JlKCkuYXV0aGVudGljYXRvck1hbmFnZXIoKS5oYW5k
bGVSZXF1ZXN0KFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAorI2lmICFI
QVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoUXVl
cnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgaGFuZGxlcihMb2NhbFNlcnZp
Y2U6OmlzQXZhaWxhYmxlKCkpOwogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaApp
bmRleCA1M2Y5NzNiNWE3NGRiMmM2OWEzNmMyYWU2YjJjY2Q4NzllNDIyYjhhLi5kNTVmMTNmZDMz
ZGZjYjk0N2VhNDkwNzQzYTcwZTc5Zjk5NjQ2ODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKQEAgLTQxLDYgKzQxLDEwIEBAIHN0cnVj
dCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7CiBzdHJ1Y3QgU2VjdXJpdHlPcmln
aW5EYXRhOwogfQogCisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorT0JKQ19DTEFTUyBB
U0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC03MCw2ICs3NCwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgaGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiYsIFJl
cXVlc3RDb21wbGV0aW9uSGFuZGxlciYmKTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdl
UHJveHk7CisKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCisgICAgUmV0YWluUHRyPEFT
Q0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXI+IG1fcHJlc2VudGVyOworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM3ZDBkZDI0NzFlZDQzOGY5Y2Q2Yzc1OWU0MzA4Zjdi
NmQyMjIyZDUuLjYzZDFkOGU1YTRhN2NhNDU1NGM2ZjhiZmQ1Y2ZmZDc5Mzg3ZjJhNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjUx
Nyw2ICsyNTE3LDcgQEAKIAkJMDdFMTlGMDkyM0Q1MzNCQTAwOTRGRkI0IC8qIFRleHRUcmFja1By
aXZhdGVSZW1vdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY3RDZBNUZFODQwMzA3QzAyQUFDMDcgLyog
QXBwS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXBwS2l0LmZyYW1ld29yazsgcGF0
aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTA4OUMxNjY3RkU4NDExNThDMDJBQUMwNyAvKiBlbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQucGxpc3Quc3RyaW5nczsgbmFtZSA9IGVuOyBwYXRoID0gZW4ubHByb2ov
SW5mb1BsaXN0LnN0cmluZ3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEQ0JGNEQ5
MjZFMkVEMzIwMEVBMEUwNyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRTk3RDc0QzIwMEU4RkYzMDBCRjY2NDMg
LyogU2FmZUJyb3dzaW5nU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVCcm93c2luZ1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRURFODUwMjIwMDRFNzQ5MDAwMzA1NjAgLyog
V2Vic2l0ZVBvcFVwUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVQb3BVcFBvbGljeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA0MTU5ODIzQzdDQzcyMDA2MEEzRTIg
LyogV0tTY3JvbGxWaWV3TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
U2Nyb2xsVmlld01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI5OSw2ICs5
MzAwLDcgQEAKIAkJCQk1NzBEQUFBRDIzMDI2RjVDMDBFOEZDMDQgLyogTmZjU2VydmljZS5tbSAq
LywKIAkJCQk1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5l
bENsaWVudC5oICovLAogCQkJCTU3N0ZGNzg0MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50
aWNhdGlvblBhbmVsQ2xpZW50Lm1tICovLAorCQkJCTBEQ0JGNEQ5MjZFMkVEMzIwMEVBMEUwNyAv
KiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSAqLywKIAkJCQk1Nzc3Mzk5MzI1
ODAzODhGMDA1OTM0OEIgLyogV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUuaCAq
LywKIAkJCQk1Nzc3Mzk5NDI1ODAzODhGMDA1OTM0OEIgLyogV0tBU0NBdXRob3JpemF0aW9uUHJl
c2VudGVyRGVsZWdhdGUubW0gKi8sCiAJCQkJNTcwREFBQzQyMzAzN0Y3RTAwRThGQzA0IC8qIFdL
TkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvci5jcHAKaW5kZXggZDU0NThlZGJmNDQ1MWNhNTg4ZTlkZmU0N2Iy
Y2FlYWM1NTU1YTY5Yy4uMWIxMjgwOWY4NDkxOThmOWEzYzcyNmYwYmE2NjFjMzgxZDc5YmQyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKQEAg
LTY5LDcgKzY5LDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjptYWtlQ3Jl
ZGVudGlhbChjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoZnJhbWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQo
KSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhu
UHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25N
b2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdlYkF1dGhuUHJvY2Vzcykgewog
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6TWFrZUNyZWRlbnRpYWwod2ViRnJhbWUtPmZyYW1lSUQo
KSwgd2ViRnJhbWUtPmluZm8oKSwgaGFzaCwgb3B0aW9ucywgaXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg2LDcg
KzkxLDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjpnZXRBc3NlcnRpb24o
Y29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBTZWN1cml0CiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZnJh
bWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKSkgewor
I2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2Vz
cyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5F
bmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdlYkF1dGhuUHJvY2VzcykgewogICAgICAg
ICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eTo6R2V0QXNzZXJ0aW9uKHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZy
YW1lLT5pbmZvKCksIGhhc2gsIG9wdGlvbnMsIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSwgV1RG
TW92ZShoYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05OCw3ICsxMDgsMTIg
QEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmdldEFzc2VydGlvbihjb25zdCBG
cmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyaXQKIAogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3I6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZShRdWVy
eUNvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVk
KCkpIHsKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCisgICAgYm9vbCB1c2VXZWJBdXRo
blByb2Nlc3MgPSBmYWxzZTsKKyNlbHNlCisgICAgYm9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9u
TW9kZXJuRW5hYmxlZCgpOworI2VuZGlmCisgICAgaWYgKCF1c2VXZWJBdXRoblByb2Nlc3MpIHsK
ICAgICAgICAgbV93ZWJQYWdlLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHk6OklzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGlj
YXRvckF2YWlsYWJsZSgpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBi
MzQ0MTkzZmEwMGEyNDAyODg1NTVjMTFkNDQwYmVhNzA2ZWFkYWI3Li44ZTIwMmNkYjhjNjk0NGQ4
MTU3YzZkYzdkYWRlM2U3NGEwMTU4OWRiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgdGlt
ZW91dCB0ZXN0IHRvIGV4cGVjdCBOb3RBbGxvd2VkRXJyb3IsIHdoaWNoIGlzIHRoZSBleHBlY3Rl
ZCBlcnJvcgorICAgICAgICBjb2RlIHdoZW4gYSB0aW1lb3V0IG9jY3VycywgcGVyIFN0ZXAgMjEg
b2YgdGhlICJDcmVhdGUgYSBOZXcgQ3JlZGVudGlhbCIKKyAgICAgICAgYWxnb3JpdGhtLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDkt
MjggIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZGQgU1BJ
IHRvIHNlbGVjdCBhIHRhYiBjcmVhdGVkIGJ5IF9XS0luc3BlY3RvckV4dGVuc2lvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9f
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IGFiYTRmYjkwN2ZiMjI3YzM3NDBkYWYw
OWFmMTFjNzE0ODA2OTdlMjQuLmI3OWFmODBhZGEwODk4NmFkOTA5ZTNjZjcyZDYyMzA3NjhmZDMw
MmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTM0LDYgKzM0LDcg
QEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExv
Y2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9BdXRoZW50aWNhdG9yQXR0YWNobWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KQEAgLTE4MDEsNyAr
MTgwMiwxMSBAQCBURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJ
VGltZW91dCkKIAogICAgICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CiAgICAgICAgIEVYUEVD
VF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOworI2lmIEhBVkUoVU5JRklFRF9BU0Nf
QVVUSF9VSSkKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIE5vdEFsbG93ZWRFcnJvcik7
CisjZWxzZQogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOwor
I2VuZGlmCiAgICAgfV07CiAgICAgVXRpbDo6cnVuKCZ3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFu
KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439610</attachid>
            <date>2021-09-29 09:12:59 -0700</date>
            <delta_ts>2021-10-05 17:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20210929091259.patch</filename>
            <type>text/plain</type>
            <size>41113</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUxZmZmMjllYTU5ODlhYWIx
OGY5ODVkNzY2Yjc4N2JiMmYzMmUzMTQuLmU4OWE2OWUyOWFjZGI3NzhiNmYxNGE2NzI1NmRmZGVk
ZjAxY2NhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyB0aGUgcGxhdGZvcm0ncyBVSSBmb3IgV2ViQXV0aG4gdHJhbnNhY3Rpb25zLCB3aGVyZSBhdmFp
bGFibGUsCisgICAgICAgIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgV2ViQXV0aG4g
cHJvY2Vzcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmg6Cisg
ICAgICAgIFdoZW4gcG9zc2libGUsIHN3aXRjaCB0byBpbXBvcnRpbmcgdGhlIHVtYnJlbGxhIGhl
YWRlciBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIHJlZGVjbGFyaW5nIHRoZSBlbnRpcmUg
aW50ZXJmYWNlLgorCisgICAgICAgIEFsc28sIGZpeCBhbiBleGlzdGluZyBidWcgY2F1c2VkIGJ5
IHRoZSByZWRlY2xhcmF0aW9uLCB3aGVyZSB0aGUKKyAgICAgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZCBlbnVtIHdhcyByZW5hbWVkLgorCisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgQnVpbGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAo
LVtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aENoYWxsZW5nZTpv
cmlnaW46b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgUmV0dXJuIHRoZSBm
dWxsIGVycm9yIHRvIHRoZSBkZWxlZ2F0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlU29mdExpbmsubW06CisgICAgICAgIEFkZCBhbGwgb2YgdGhlIG5ldyByZXF1
aXJlZCBjbGFzc2VzIGZvciBzb2Z0IGxpbmtpbmcsIGFuZCBzb3J0IHRoZSBsaXN0LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9BcnJheUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvTlNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6dG9OU1N0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OnRvQVNDRGVzY3JpcHRvcik6CisgICAgICAgIEhlbHBl
ciBtZXRob2RzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gV0sgYW5kIEFTQyB0eXBlcy4KKworICAg
ICAgICAoV2ViS2l0Ojpjb25maWd1cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OmNvbmZpZ3VyYXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAg
ICAgIENyZWF0ZSBhbmQgY29uZmlndXJlIGFuIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCBm
cm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAg
ICBDb25maWd1cmUgYW5kIHBlcmZvcm0gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAg
ICAgLSBDcmVhdGUgYSBwcm94eSB0byB0YWxrIHRvIEF1dGhlbnRpY2F0aW9uU2VydmljZXNBZ2Vu
dC4KKyAgICAgICAgLSBBc2sgdGhlIHByb3h5IGlmIHdlJ3JlIGFsbG93ZWQgdG8gcGVyZm9ybSB0
aGUgcmVxdWVzdC4KKyAgICAgICAgICAtIElmIG5vLCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAg
ICAgLSBJZiB5ZXMsIGNyZWF0ZSBwcmVzZW50ZXIgYW5kIHByZXNlbnQgb3ZlciB0aGUgd2ViIHBh
Z2UncyB3aW5kb3cuCisgICAgICAgIC0gV2hlbiB0aGUgcmVxdWVzdCBpZiBmaW5pc2hlZCwgY2hl
Y2sgdGhlIGtpbmQgb2YgY3JlZGVudGlhbCB3ZSBnb3QsIGFuZCByZXR1cm4KKyAgICAgICAgdGhl
IHJlbGV2YW50IEF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEvQXV0aGVudGljYXRvckF0dGFjaG1l
bnQuCisgICAgICAgIC0gSWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIG9yIGZhaWxlZCwgYGNy
ZWRlbnRpYWxgIHdpbGwgYmUgbmlsIGFuZCBgZXJyb3JgIHdpbGwKKyAgICAgICAgYmUgbm9uLW5p
bC4gSW4gbW9zdCBjYXNlcywgdGhlIGVycm9yIHdpbGwgYmUgV0tFcnJvckRvbWFpbiwgd2hpY2gg
d2UgY2FuIGNvbnZlcnQKKyAgICAgICAgZGlyZWN0bHkgdG8gRXhjZXB0aW9uRGF0YS4gVGhlIG9u
ZSBleGNlcHRpb24gaXMgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIHJlcXVlc3QgaW4KKyAgICAgICAg
dGhlIHBsYXRmb3JtIFVJLCBzbyByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIEV4Y2VwdGlvbkRhdGEg
aW4gdGhhdCBjYXNlLiBUaGUgZmluYWwKKyAgICAgICAgIk9wZXJhdGlvbiBmYWlsZWQuIiBjYXNl
IGNvdmVycyBhbnl0aGluZyBlbHNlIHVuZXhwZWN0ZWQgaGFwcGVuaW5nLgorCisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQ
bGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUpOgorICAgICAgICBJZiArc2hvdWxkVXNlQWx0
ZXJuYXRlQ3JlZGVudGlhbFN0b3JlIGlzIHRydWUsIHRoaXMgaXMgYWx3YXlzIHRydWUuIE90aGVy
d2lzZSwKKyAgICAgICAgZmFsbCBiYWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJl
c2VudGVyRGVsZWdhdGUubW06CisgICAgICAgICgtW1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRl
ckRlbGVnYXRlIGF1dGhvcml6YXRpb25QcmVzZW50ZXI6Y3JlZGVudGlhbFJlcXVlc3RlZEZvckxv
Z2luQ2hvaWNlOmF1dGhlbnRpY2F0ZWRDb250ZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICBVc2UgdGhlIG5ldyBuYW1lIG9mIHRoZSBlbnVtLCB1bmNvbmRpdGlvbmFsbHkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHkuY3BwOgorICAgICAgICBXcmFwIGEgZmV3IG1ldGhvZHMgaW4gdGhlIG5ldyBm
bGFnLiBXaGVuIHRoZSBmbGFnIGlzIG9uLCB0aGVzZSBtZXRob2RzIHdpbGwgZXhpc3QKKyAgICAg
ICAgaW4gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0uCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHkuaDoKKyAgICAgICAgTmV3IGl2YXIgZm9yIHRoZSBwbGF0Zm9ybSBwcmVzZW50ZXIuCisKKyAg
ICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIHRo
ZSBuZXcgZmlsZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgV2hlbiBwbGF0Zm9ybSBVSSBp
cyBhdmFpbGFibGUsIHByZWZlciBpdCBvdmVyIHRoZSBXZWJBdXRobiBwcm9jZXNzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6Om1ha2VDcmVkZW50aWFsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjpnZXRBc3NlcnRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmlzVXNl
clZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSk6CisKIDIwMjEtMDktMjgg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVu
dXNlZCAiY29tLmFwcGxlLnNlY3VyaXR5LmV4Y2VwdGlvbi5maWxlKiIgcnVsZXMgZnJvbSBXZWJL
aXQgc2FuZGJveGVzIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvQ29j
b2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmgKaW5kZXggN2MzM2Ni
ZWIxYTQ1NDBmZDU1ZDc1MTQyZDI0Y2FiN2Q4NzRhYzcyMC4uZjI3MDhlNmUxZjAyMDc1NWZmOTMz
MjdmNzFkZmMwNTNlNGQ3NzMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9z
cGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNQSS5oCkBA
IC0yNSwxOSArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEhBVkUoQVNDX0FVVEhfVUkp
Ci0KLS8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcyNDA2NTg1PjogVW5jb21tZW50IHRoZSBoZWFk
ZXJzIGFmdGVyIHRoZSBTREsgYmVjb21lcyBzdGFibGUuCi0vLyNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQotLy8KLS8vLy8gRklYTUUoMjE5NzY3KTogUmVtb3ZlIEFTQ0FwcGxlSURDcmVkZW50
aWFsLmguCi0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0FwcGxlSURD
cmVkZW50aWFsLmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0F1
dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0Lmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlL0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIuaD4KLS8vI2ltcG9ydCA8
QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFs
TG9naW5DaG9pY2UuaD4KLS8vI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UuaD4KLS8vCi0vLyNlbHNl
CisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorI2ltcG9ydCA8QXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmUvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVQcml2YXRlLmg+CisjZWxpZiBI
QVZFKEFTQ19BVVRIX1VJKQogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCkBAIC0xMDgsMTAg
Kzk4LDEwIEBAIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IEFTQ0F1dGhvcml6YXRpb25QcmVzZW50
YXRpb25Db250ZXh0RGF0YUtleTsKIAogQGVuZAogCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmQpIHsKLSAg
ICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmRSZWdpc3Ry
YXRpb24sCi0gICAgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VL
aW5kQXNzZXJ0aW9uLAotICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2lu
Q2hvaWNlS2luZEFzc2VydGlvblBsYWNlaG9sZGVyLAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZCkgeworICAgIEFTQ1NlY3Vy
aXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmRSZWdpc3RyYXRpb24sCisgICAgQVNDU2VjdXJp
dHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvbiwKKyAgICBBU0NTZWN1cml0eUtl
eVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kQXNzZXJ0aW9uUGxhY2Vob2xkZXIsCiB9OwogCiBAaW50
ZXJmYWNlIEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdCA8
TlNTZWN1cmVDb2Rpbmc+CkBAIC0xMzYsNyArMTI2LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmlu
ZyAqbmFtZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwgcmVhZG9ubHksIGNvcHkp
IE5TU3RyaW5nICpkaXNwbGF5TmFtZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwg
cmVhZG9ubHksIGNvcHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VL
aW5kIGxvZ2luQ2hvaWNlS2luZDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZCBjcmVkZW50aWFsS2luZDsKIAogKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKIC0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDExZTcyOTY4NGU0YTJhZGYw
YjVjYjg5M2FkNjc5MWQ5MDA1ODI2MDUuLjFkNjNiOTk1MzY3NGM0NzVmMjEyNDdjM2VlZWE1OGEx
ZWYwNzkyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU5MSw2ICs1OTEsNyBAQCBVSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTmZjU2VydmljZS5tbQogVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRl
Lm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tORlJlYWRlclNlc3Npb25E
ZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQubW0KK1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbQogCiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vTW9jay9Nb2NrTG9jYWxTZXJ2aWNlLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
Lm1tCmluZGV4IDI2ZGQ1NjI2MTQyYjI4NTM4YmMxNDc2N2Y3YTUyZGUxYTY2OWE2NmEuLjViNjcx
OTk4ZjMwNjZkNjNlNzllM2ExN2Y1ZmQ3OTZhZjZkZGE1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLm1tCkBAIC00NzksNyArNDc5LDcgQEAgc3RhdGljIFJldGFpblB0cjxfV0tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZT4gd2tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb24KICAg
ICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGhhbmRsZXIod2tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpLCBjbGllbnREYXRh
SlNPTi5nZXQoKSwgcmVzcG9uc2UtPmF0dGFjaG1lbnQoKSkuZ2V0KCksIG5pbCk7CiAgICAgICAg
IH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsKLSAgICAg
ICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFp
biBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICAgICAgaGFuZGxl
cihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6ZXhjZXB0
aW9uLmNvZGUgdXNlckluZm86QHsgTlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTogZXhjZXB0aW9u
Lm1lc3NhZ2UgfV0pOwogICAgICAgICB9KTsKICAgICB9OwogICAgIF9wYW5lbC0+aGFuZGxlUmVx
dWVzdCh7IFdURk1vdmUoaGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRU
b0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgc3Rk
OjpudWxsb3B0LCB7IH0sIHRydWUsIFN0cmluZygpLCBudWxscHRyIH0sIFdURk1vdmUoY2FsbGJh
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlU29mdExpbmsuaAppbmRleCBjOTJmOTAwMTdmNTM5YTk1MzQyN2RlMzFhOGYzNjI5
OGNjMTExYzZlLi5iM2E3OWMwN2FiYTJjYmFmZWVmZWZjNmM2N2NhZTEzNmY3MjIyNTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9B
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0Nv
cmVTb2Z0TGluay5oCkBAIC0zMiwxNCArMzIsMjMgQEAgU09GVF9MSU5LX0ZSQU1FV09SS19GT1Jf
SEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUpOwogCiBTT0ZUX0xJTktf
Q0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1dlYktpdFNQSVN1cHBvcnQpOwogCi0jaWYgSEFW
RShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19BVVRIX1VJKSB8fCBIQVZFKFVOSUZJRURfQVND
X0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFT
Q0FnZW50UHJveHkpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBcHBs
ZUlEQ3JlZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1
dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVB
REVSKFdlYktpdCwgQVNDQXV0aG9yaXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1Nf
Rk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXIpOworU09G
VF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRl
eHQpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQbGF0Zm9ybVB1Ymxp
Y0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2Vi
S2l0LCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJ
TktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVu
dGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVND
QXBwbGVJRENyZWRlbnRpYWwpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBB
U0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb24pOworU09GVF9MSU5LX0NM
QVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0
aW9ucyk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1B1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2Vi
S2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik7CitTT0ZUX0xJTktfQ0xBU1Nf
Rk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEFzc2Vy
dGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5
UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVB
REVSKFdlYktpdCwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9u
KTsKIAogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViS2l0LCBBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluLCBOU0Vycm9yRG9tYWlu
KTsKICNkZWZpbmUgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluIFdlYktpdDo6Z2V0X0F1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlX0FTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9B
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVT
b2Z0TGluay5tbQppbmRleCBiOTMxM2M4NmRkN2RjNTAwMDY2MmFhYmMzZDUzMjM4ZWE3Y2Y1MmNi
Li5hMjNhYzUzYTdiYzE5YTJlMjUyNWVkMzY5MjBkMGRkYzM0ZjMyODZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNh
dGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExp
bmsubW0KQEAgLTMyLDE0ICszMiwyMyBAQCBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfRk9S
X1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5L
X0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVND
V2ViS2l0U1BJU3VwcG9ydCk7CiAKLSNpZiBIQVZFKEFTQ19BVVRIX1VJKQorI2lmIEhBVkUoQVND
X0FVVEhfVUkpIHx8IEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIAotU09GVF9MSU5LX0NMQVNT
X0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBZ2VudFByb3h5KTsKK1NPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxl
SURDcmVkZW50aWFsKTsKIFNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZP
Ul9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXph
dGlvblJlbW90ZVByZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQs
IEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQp
OworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZp
Y2VzQ29yZSwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNPRlRf
TElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUs
IEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19D
TEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1Nl
Y3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxl
SURDcmVkZW50aWFsKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lz
dHJhdGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyk7
CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKTsKK1NPRlRfTElO
S19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFT
Q1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09V
UkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tl
eUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJL
aXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNy
ZWRlbnRpYWxSZWdpc3RyYXRpb24pOwogCiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uRXJyb3JE
b21haW4sIE5TRXJyb3JEb21haW4pOwogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2Vi
S2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDUElOVmFsaWRhdGlvblJlc3VsdEtl
eSwgTlNTdHJpbmcqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NB
dXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KaW5kZXggN2MyMDhmZjBhZDU3MDBlYzE3
ZGI0NDM4YjY4MzQ5YTQzY2QyNmE5OS4uZjI5NTBmZTMwNjkxNWYwMWM3ZGFiOGIwMjkwZDcwYTNl
Yzc5MDMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRo
b3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0KQEAgLTc4LDcgKzc4LDcgQEAgTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KICAgICBpZiAoW2xvZ2luQ2hvaWNlIGlzS2luZE9mQ2xhc3M6V2ViS2l0
OjpnZXRBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUNsYXNzKCld
KSB7CiAgICAgICAgIGF1dG8gKnNlY3VyaXR5S2V5TG9naW5DaG9pY2UgPSAoQVNDU2VjdXJpdHlL
ZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UgKilsb2dpbkNob2ljZTsKIAotICAgICAg
ICBpZiAoW3NlY3VyaXR5S2V5TG9naW5DaG9pY2UgbG9naW5DaG9pY2VLaW5kXSA9PSBBU0NTZWN1
cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZUtpbmRBc3NlcnRpb24pIHsKKyAg
ICAgICAgaWYgKFtzZWN1cml0eUtleUxvZ2luQ2hvaWNlIGNyZWRlbnRpYWxLaW5kXSA9PSBBU0NT
ZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kQXNzZXJ0aW9uKSB7CiAgICAgICAgICAg
ICBTdHJpbmcgbG9naW5DaG9pY2VOYW1lID0gc2VjdXJpdHlLZXlMb2dpbkNob2ljZS5uYW1lOwog
ICAgICAgICAgICAgW3NlbGYgZGlzcGF0Y2hDb29yZGluYXRvckNhbGxiYWNrOltsb2dpbkNob2lj
ZU5hbWUgPSBXVEZNb3ZlKGxvZ2luQ2hvaWNlTmFtZSldIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JQ
cmVzZW50ZXJDb29yZGluYXRvciYgY29vcmRpbmF0b3IpIG11dGFibGUgewogICAgICAgICAgICAg
ICAgIGNvb3JkaW5hdG9yLmRpZFNlbGVjdEFzc2VydGlvblJlc3BvbnNlKGxvZ2luQ2hvaWNlTmFt
ZSwgbmlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MwMjUwMjg1NGJmM2M2YzRjYWVmNmI5
ZWQ4ODZmNDFhMGNiMWFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclBy
b3h5Lm1tCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEhBVkUoVU5JRklFRF9B
U0NfQVVUSF9VSSkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eS5oIgorCisjaW1wb3J0ICJMb2NhbFNlcnZpY2UuaCIKKyNpbXBv
cnQgIldLRXJyb3IuaCIKKyNpbXBvcnQgIldlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNl
cy9BU0NPU0VDb25zdGFudHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvckF0dGFj
aG1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgorCisjaW1wb3J0ICJBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBpbmxp
bmUgUmVmPEFycmF5QnVmZmVyPiB0b0FycmF5QnVmZmVyKE5TRGF0YSAqZGF0YSkKK3sKKyAgICBy
ZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0
cjxOU0RhdGE+IHRvTlNEYXRhKGNvbnN0IEJ1ZmZlclNvdXJjZSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5n
dGg6ZGF0YS5sZW5ndGgoKV0pOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxOU0RhdGE+
IHRvTlNEYXRhKGNvbnN0IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IpCit7CisgICAgcmV0dXJuIGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6dmVjdG9yLmRhdGEoKSBsZW5ndGg6
dmVjdG9yLnNpemUoKV0pOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxOU1N0cmluZz4g
dG9OU1N0cmluZyhVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50KQoreworICAgIHN3aXRjaCAodXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KSB7
CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOgorICAgICAg
ICByZXR1cm4gYWRvcHROUyhAInJlcXVpcmVkIik7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkOgorICAgICAgICByZXR1cm4gYWRvcHROUyhAImRpc2Nv
dXJhZ2VkIik7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJl
ZDoKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoQCJwcmVmZXJyZWQiKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRvcHROUyhAInByZWZlcnJlZCIpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0
cjxBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gdG9BU0NEZXNjcmlwdG9yKFB1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCit7CisgICAgTlNNdXRhYmxlQXJy
YXk8TlNTdHJpbmcgKj4gKnRyYW5zcG9ydHMgPSBuaWw7CisgICAgc2l6ZV90IHRyYW5zcG9ydENv
dW50ID0gZGVzY3JpcHRvci50cmFuc3BvcnRzLnNpemUoKTsKKyAgICBpZiAodHJhbnNwb3J0Q291
bnQpIHsKKyAgICAgICAgdHJhbnNwb3J0cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6dHJhbnNwb3J0Q291bnRdOworCisgICAgICAgIGZvciAoQXV0aGVudGljYXRv
clRyYW5zcG9ydCB0cmFuc3BvcnQgOiBkZXNjcmlwdG9yLnRyYW5zcG9ydHMpIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp0cmFuc3BvcnRTdHJpbmcgPSBuaWw7CisgICAgICAgICAgICBzd2l0Y2gg
KHRyYW5zcG9ydCkgeworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpV
c2I6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJ1c2IiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpO
ZmM6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJuZmMiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpC
bGU6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJibGUiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJ
bnRlcm5hbDoKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnRTdHJpbmcgPSBAImludGVybmFsIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHRyYW5zcG9ydFN0cmluZykKKyAgICAgICAgICAgICAgICBbdHJhbnNwb3J0cyBhZGRPYmplY3Q6
dHJhbnNwb3J0U3RyaW5nXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdE5T
KFthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ySW5zdGFuY2UoKSBpbml0V2l0
aENyZWRlbnRpYWxJRDp0b05TRGF0YShkZXNjcmlwdG9yLmlkVmVjdG9yKS5nZXQoKSB0cmFuc3Bv
cnRzOldURk1vdmUodHJhbnNwb3J0cyldKTsKK30KKworc3RhdGljIFJldGFpblB0cjxBU0NDcmVk
ZW50aWFsUmVxdWVzdENvbnRleHQ+IGNvbmZpZ3VyZVJlZ2lzdHJhdGlvblJlcXVlc3RDb250ZXh0
KGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlcyByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFs
UmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleVJlZ2lzdHJhdGlvbiB8IEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0cmF0aW9uOworCisgICAgTlNTdHJp
bmcgKnVzZXJWZXJpZmljYXRpb24gPSBuaWw7CisgICAgYm9vbCBzaG91bGRSZXF1aXJlUmVzaWRl
bnRLZXkgPSBmYWxzZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYT4gYXV0aGVudGljYXRv
clNlbGVjdGlvbiA9IG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbjsKKyAgICBpZiAoYXV0
aGVudGljYXRvclNlbGVjdGlvbikgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0
b3JBdHRhY2htZW50PiBhdHRhY2htZW50ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVu
dGljYXRvckF0dGFjaG1lbnQ7CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0
b3JBdHRhY2htZW50OjpQbGF0Zm9ybSkKKyAgICAgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0Ny
ZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uOworICAgICAg
ICBlbHNlIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1Bs
YXRmb3JtKQorICAgICAgICAgICAgcmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RU
eXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlSZWdpc3RyYXRpb247CisKKyAgICAgICAgdXNlclZlcmlm
aWNhdGlvbiA9IHRvTlNTdHJpbmcoYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNh
dGlvbikuZ2V0KCk7CisKKyAgICAgICAgc2hvdWxkUmVxdWlyZVJlc2lkZW50S2V5ID0gYXV0aGVu
dGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5OworICAgIH0KKworICAgIEFTQ0Ny
ZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCAqcmVxdWVzdENvbnRleHQgPSBbYWxsb2NBU0NDcmVkZW50
aWFsUmVxdWVzdENvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUmVxdWVzdFR5cGVzOnJlcXVlc3RU
eXBlc107CisgICAgcmVxdWVzdENvbnRleHQucmVseWluZ1BhcnR5SWRlbnRpZmllciA9IG9wdGlv
bnMucnAuaWQ7CisKKyAgICBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpj
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0gW2FsbG9jQVNDUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdF07CisKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmNoYWxsZW5nZSA9IHRvTlNEYXRhKG9wdGlvbnMuY2hhbGxlbmdlKS5nZXQoKTsKKyAg
ICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnJlbHlpbmdQYXJ0eUlkZW50aWZpZXIgPSBvcHRp
b25zLnJwLmlkOworICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMudXNlck5hbWUgPSBvcHRp
b25zLnVzZXIubmFtZTsKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnVzZXJJZGVudGlm
aWVyID0gdG9OU0RhdGEob3B0aW9ucy51c2VyLmlkKS5nZXQoKTsKKyAgICBjcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLnVzZXJEaXNwbGF5TmFtZSA9IG9wdGlvbnMudXNlci5kaXNwbGF5TmFtZTsK
KyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnVzZXJWZXJpZmljYXRpb25QcmVmZXJlbmNl
ID0gdXNlclZlcmlmaWNhdGlvbjsKKyAgICBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLnNob3Vs
ZFJlcXVpcmVSZXNpZGVudEtleSA9IHNob3VsZFJlcXVpcmVSZXNpZGVudEtleTsKKworICAgIE5T
TXV0YWJsZUFycmF5PE5TTnVtYmVyICo+ICpzdXBwb3J0ZWRBbGdvcml0aG1JZGVudGlmaWVycyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5wdWJLZXlD
cmVkUGFyYW1zLnNpemUoKV07CisgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOjpQYXJhbWV0ZXJzIGFsZ29yaXRobVBhcmFtZXRlciA6IG9wdGlvbnMucHViS2V5Q3Jl
ZFBhcmFtcykKKyAgICAgICAgW3N1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzIGFkZE9iamVj
dDpAKGFsZ29yaXRobVBhcmFtZXRlci5hbGcpXTsKKworICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMuc3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHN1cHBvcnRlZEFs
Z29yaXRobUlkZW50aWZpZXJzKTsKKworICAgIHNpemVfdCBleGNsdWRlZENyZWRlbnRpYWxDb3Vu
dCA9IG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKTsKKyAgICBpZiAoZXhjbHVkZWRD
cmVkZW50aWFsQ291bnQpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8QVNDUHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVkQ3JlZGVudGlhbHMgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmV4Y2x1ZGVkQ3JlZGVudGlhbENvdW50XTsKKwor
ICAgICAgICBmb3IgKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBv
cHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgICAgIFtleGNsdWRlZENyZWRlbnRp
YWxzIGFkZE9iamVjdDp0b0FTQ0Rlc2NyaXB0b3IoZGVzY3JpcHRvcikuZ2V0KCldOworCisgICAg
ICAgIGNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuZXhjbHVkZWRDcmVkZW50aWFscyA9IFdURk1v
dmUoZXhjbHVkZWRDcmVkZW50aWFscyk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3RUeXBlcyAm
IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uKQor
ICAgICAgICByZXF1ZXN0Q29udGV4dC5wbGF0Zm9ybUtleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgPSBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworCisgICAgaWYgKHJlcXVlc3RUeXBlcyAm
IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0cmF0aW9u
KQorICAgICAgICByZXF1ZXN0Q29udGV4dC5zZWN1cml0eUtleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgPSBjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworCisgICAgcmV0dXJuIGFkb3B0TlMo
cmVxdWVzdENvbnRleHQpOworfQorCitzdGF0aWMgUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1
ZXN0Q29udGV4dD4gY29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RDb250ZXh0KGNvbnN0IFB1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU0NDcmVk
ZW50aWFsUmVxdWVzdFR5cGVzIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlw
ZVBsYXRmb3JtUHVibGljS2V5QXNzZXJ0aW9uIHwgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2Vj
dXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb247CisKKyAgICBOU1N0cmluZyAqdXNlclZlcmlmaWNh
dGlvbiA9IG5pbDsKKyAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBh
dHRhY2htZW50ID0gb3B0aW9ucy5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKKyAgICBpZiAoYXR0
YWNobWVudCA9PSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm0pCisgICAgICAgIHJl
cXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGljS2V5QXNz
ZXJ0aW9uOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gQXV0aGVudGljYXRvckF0dGFjaG1l
bnQ6OkNyb3NzUGxhdGZvcm0pCisgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0aW9uOworCisgICAgdXNlclZlcmlm
aWNhdGlvbiA9IHRvTlNTdHJpbmcob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKS5nZXQoKTsKKwor
ICAgIHNpemVfdCBhbGxvd2VkQ3JlZGVudGlhbENvdW50ID0gb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheTxBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciAqPiAqYWxsb3dlZENyZWRlbnRpYWxzID0gbmlsOworICAgIGlmIChhbGxvd2VkQ3Jl
ZGVudGlhbENvdW50KSB7CisgICAgICAgIGFsbG93ZWRDcmVkZW50aWFscyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YWxsb3dlZENyZWRlbnRpYWxDb3VudF07CisK
KyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9yIDog
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKQorICAgICAgICAgICAgW2FsbG93ZWRDcmVkZW50aWFs
cyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2NyaXB0b3IpLmdldCgpXTsKKyAgICB9CisK
KyAgICBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQgKnJlcXVlc3RDb250ZXh0ID0gW2FsbG9j
QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFJlcXVlc3RUeXBl
czpyZXF1ZXN0VHlwZXNdOworICAgIHJlcXVlc3RDb250ZXh0LnJlbHlpbmdQYXJ0eUlkZW50aWZp
ZXIgPSBvcHRpb25zLnJwSWQ7CisKKyAgICBOU0RhdGEgKmNoYWxsZW5nZSA9IHRvTlNEYXRhKG9w
dGlvbnMuY2hhbGxlbmdlKS5nZXQoKTsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0NDcmVk
ZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbikKKyAgICAgICAgcmVx
dWVzdENvbnRleHQucGxhdGZvcm1LZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyA9IFthbGxv
Y0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb25PcHRpb25zSW5zdGFuY2UoKSBpbml0V2l0
aEtpbmQ6QVNDUHVibGljS2V5Q3JlZGVudGlhbEtpbmRQbGF0Zm9ybSByZWx5aW5nUGFydHlJZGVu
dGlmaWVyOm9wdGlvbnMucnBJZCBjaGFsbGVuZ2U6Y2hhbGxlbmdlIHVzZXJWZXJpZmljYXRpb25Q
cmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24gYWxsb3dlZENyZWRlbnRpYWxzOmFsbG93ZWRDcmVk
ZW50aWFsc107CisKKyAgICBpZiAocmVxdWVzdFR5cGVzICYgQVNDQ3JlZGVudGlhbFJlcXVlc3RU
eXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb24pCisgICAgICAgIHJlcXVlc3RDb250ZXh0
LnNlY3VyaXR5S2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMgPSBbYWxsb2NBU0NQdWJsaWNL
ZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdFdpdGhLaW5kOkFTQ1B1
YmxpY0tleUNyZWRlbnRpYWxLaW5kU2VjdXJpdHlLZXkgcmVseWluZ1BhcnR5SWRlbnRpZmllcjpv
cHRpb25zLnJwSWQgY2hhbGxlbmdlOmNoYWxsZW5nZSB1c2VyVmVyaWZpY2F0aW9uUHJlZmVyZW5j
ZTp1c2VyVmVyaWZpY2F0aW9uIGFsbG93ZWRDcmVkZW50aWFsczphbGxvd2VkQ3JlZGVudGlhbHNd
OworCisgICAgcmV0dXJuIGFkb3B0TlMocmVxdWVzdENvbnRleHQpOworfQorCit2b2lkIFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlhbChGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4X3Q+JiYg
aGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYmIG9wdGlvbnMsIGJvb2wg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVy
KQoreworICAgIFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQ+IHJlcXVlc3RD
b250ZXh0ID0gY29uZmlndXJlUmVnaXN0cmF0aW9uUmVxdWVzdENvbnRleHQoV1RGTW92ZShvcHRp
b25zKSk7CisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdENvbnRleHQsIFdURk1vdmUoaGFuZGxl
cikpOworfQorCit2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpnZXRBc3Nl
cnRpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSWQsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8s
IFZlY3Rvcjx1aW50OF90PiYmIGhhc2gsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlv
bkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVz
dENvbnRleHQ+IHJlcXVlc3RDb250ZXh0ID0gY29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RD
b250ZXh0KG9wdGlvbnMpOworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3RDb250ZXh0LCBXVEZN
b3ZlKGhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eTo6cGVyZm9ybVJlcXVlc3QoUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4g
cmVxdWVzdENvbnRleHQsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7Cisg
ICAgQVNDQWdlbnRQcm94eSAqcHJveHkgPSBbYWxsb2NBU0NBZ2VudFByb3h5SW5zdGFuY2UoKSBp
bml0XTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dlYlBhZ2VQcm94eS5wbGF0Zm9ybVdp
bmRvdygpOworICAgIFtwcm94eSBwZXJmb3JtQXV0aG9yaXphdGlvblJlcXVlc3RzRm9yQ29udGV4
dDpyZXF1ZXN0Q29udGV4dC5nZXQoKSB3aXRoQ2xlYXJhbmNlSGFuZGxlcjptYWtlQmxvY2tQdHIo
W3RoaXMsIGhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpLCB3aW5kb3cgPSBXVEZNb3ZlKHdpbmRv
dyldKE5TWFBDTGlzdGVuZXJFbmRwb2ludCAqZGFlbW9uRW5wb2ludCwgTlNFcnJvciAqZXJyb3Ip
IG11dGFibGUgeworICAgICAgICBpZiAoIWRhZW1vbkVucG9pbnQpIHsKKyAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbaGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcih7IH0sIChBdXRoZW50aWNhdG9yQXR0YWNo
bWVudCkwLCBFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9yLCAiT3BlcmF0aW9uIGZhaWxl
ZC4iIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX3ByZXNlbnRlciA9IFthbGxvY0FTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVz
ZW50ZXJJbnN0YW5jZSgpIGluaXRdOworICAgICAgICBbbV9wcmVzZW50ZXIgcHJlc2VudFdpdGhX
aW5kb3c6d2luZG93IGRhZW1vbkVuZHBvaW50OmRhZW1vbkVucG9pbnQgY29tcGxldGlvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFtoYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKV0oaWQgPEFTQ0NyZWRl
bnRpYWxQcm90b2NvbD4gY3JlZGVudGlhbCwgTlNFcnJvciAqZXJyb3IpIG11dGFibGUgeworICAg
ICAgICAgICAgQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSByZXNwb25zZSA9IHsgfTsKKyAgICAg
ICAgICAgIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF0dGFjaG1lbnQ7CisgICAgICAgICAgICBF
eGNlcHRpb25EYXRhIGV4Y2VwdGlvbkRhdGEgPSB7IH07CisKKyAgICAgICAgICAgIGlmIChbY3Jl
ZGVudGlhbCBpc0tpbmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJl
Z2lzdHJhdGlvbkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhl
bnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5p
c0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlID0gdHJ1ZTsKKworICAgICAgICAgICAg
ICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbiAqcmVnaXN0cmF0
aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UucmF3
SWQgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuY3JlZGVudGlhbElEKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS5hdHRlc3RhdGlvbk9iamVjdCA9IHRvQXJyYXlCdWZm
ZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5hdHRlc3RhdGlvbk9iamVjdCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlzS2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQ
dWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uQ2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRl
bnRpYWxSZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihyZWdpc3RyYXRp
b25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXR0
ZXN0YXRpb25PYmplY3QgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuYXR0
ZXN0YXRpb25PYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tp
bmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbkNsYXNz
KCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5pc0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBBU0NQbGF0Zm9y
bVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24gKmFzc2VydGlvbkNyZWRlbnRpYWwgPSBjcmVk
ZW50aWFsOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihh
c3NlcnRpb25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9u
c2UuYXV0aGVudGljYXRvckRhdGEgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwu
YXV0aGVudGljYXRvckRhdGEpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNpZ25hdHVyZSA9
IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5zaWduYXR1cmUpOworICAgICAgICAg
ICAgICAgIHJlc3BvbnNlLnVzZXJIYW5kbGUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRl
bnRpYWwudXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlz
S2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9u
Q2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg
QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uICphc3NlcnRpb25DcmVkZW50
aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJZCA9IHRvQXJy
YXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOworICAgICAgICAgICAg
ICAgIHJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhID0gdG9BcnJheUJ1ZmZlcihhc3NlcnRpb25D
cmVkZW50aWFsLmF1dGhlbnRpY2F0b3JEYXRhKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5z
aWduYXR1cmUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwuc2lnbmF0dXJlKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS51c2VySGFuZGxlID0gdG9BcnJheUJ1ZmZlcihhc3Nl
cnRpb25DcmVkZW50aWFsLnVzZXJIYW5kbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdHRhY2htZW50ID0gKEF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSAwOworICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZTsKKyAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqZXJyb3JNZXNzYWdlID0gbmlsOworICAgICAgICAgICAgICAgIGlmIChbZXJy
b3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpXS0Vycm9yRG9tYWluXSkgeworICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25Db2RlID0gKEV4Y2VwdGlvbkNvZGUpIGVycm9yLmNvZGU7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLnVzZXJJbmZvW05TTG9jYWxpemVk
RGVzY3JpcHRpb25LZXldOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNvZGUgPSBOb3RBbGxvd2VkRXJyb3I7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFtlcnJvci5kb21haW4gaXNFcXVhbFRvU3RyaW5nOkFTQ0F1dGhvcml6YXRpb25F
cnJvckRvbWFpbl0gJiYgZXJyb3IuY29kZSA9PSBBU0NBdXRob3JpemF0aW9uRXJyb3JVc2VyQ2Fu
Y2VsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBAIlRoaXMgcmVx
dWVzdCBoYXMgYmVlbiBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuIjsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gQCJPcGVyYXRp
b24gZmFpbGVkLiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXhjZXB0
aW9uRGF0YSA9IHsgZXhjZXB0aW9uQ29kZSwgZXJyb3JNZXNzYWdlIH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGhhbmRsZXIocmVzcG9uc2UsIGF0dGFjaG1lbnQsIGV4Y2VwdGlvbkRh
dGEpOworICAgICAgICB9KS5nZXQoKV07CisgICAgfSkuZ2V0KCldOworfQorCit2b2lkIFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhl
bnRpY2F0b3JBdmFpbGFibGUoUXVlcnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7Cisg
ICAgaWYgKFtnZXRBU0NXZWJLaXRTUElTdXBwb3J0Q2xhc3MoKSBzaG91bGRVc2VBbHRlcm5hdGVD
cmVkZW50aWFsU3RvcmVdKSB7CisgICAgICAgIGhhbmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBoYW5kbGVyKExvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShVTklGSUVEX0FTQ19B
VVRIX1VJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHkuY3BwCmluZGV4IDFjYTBkZTA0ZTAxY2FhMDM0N2M1NTI5MTQ5MWVlYmQyNDdkNDdkYjQu
LjE5NjI4NTRiZGY0YTgyM2FiYmFiMDRmNTBiYzVmZDdhMTMwZTFiMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6On5XZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eSgpCiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCkpOwog
fQogCisjaWYgIUhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIHZvaWQgV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHk6Om1ha2VDcmVkZW50aWFsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlk
LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhfdD4mJiBoYXNoLCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiYgb3B0aW9ucywgYm9vbCBwcm9jZXNzaW5n
VXNlckdlc3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAg
aGFuZGxlUmVxdWVzdCh7IFdURk1vdmUoaGFzaCksIFdURk1vdmUob3B0aW9ucyksIG1ha2VXZWFr
UHRyKG1fd2ViUGFnZVByb3h5KSwgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFp
bGFibGUsIG51bGxwdHIsIEdsb2JhbEZyYW1lSWRlbnRpZmllciB7IG1fd2ViUGFnZVByb3h5Lndl
YlBhZ2VJRCgpLCBmcmFtZUlkIH0sIFdURk1vdmUoZnJhbWVJbmZvKSwgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlLCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGhhbmRsZXIpKTsKQEAgLTY0LDYg
KzY1LDcgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6Z2V0QXNzZXJ0
aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlkLCBGcmEKIHsKICAgICBoYW5kbGVSZXF1ZXN0KHsg
V1RGTW92ZShoYXNoKSwgV1RGTW92ZShvcHRpb25zKSwgbWFrZVdlYWtQdHIobV93ZWJQYWdlUHJv
eHkpLCBXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwg
R2xvYmFsRnJhbWVJZGVudGlmaWVyIHsgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCksIGZyYW1l
SWQgfSwgV1RGTW92ZShmcmFtZUluZm8pLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFN0cmluZygp
LCBudWxscHRyIH0sIFdURk1vdmUoaGFuZGxlcikpOwogfQorI2VuZGlmCiAKIHZvaWQgV2ViQXV0
aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRp
b25SZXF1ZXN0RGF0YSYmIGRhdGEsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIp
CiB7CkBAIC03OCwxMCArODAsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eTo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXQKICAgICBtX3dl
YlBhZ2VQcm94eS53ZWJzaXRlRGF0YVN0b3JlKCkuYXV0aGVudGljYXRvck1hbmFnZXIoKS5oYW5k
bGVSZXF1ZXN0KFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAorI2lmICFI
QVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoUXVl
cnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgaGFuZGxlcihMb2NhbFNlcnZp
Y2U6OmlzQXZhaWxhYmxlKCkpOwogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaApp
bmRleCA1M2Y5NzNiNWE3NGRiMmM2OWEzNmMyYWU2YjJjY2Q4NzllNDIyYjhhLi5kNTVmMTNmZDMz
ZGZjYjk0N2VhNDkwNzQzYTcwZTc5Zjk5NjQ2ODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKQEAgLTQxLDYgKzQxLDEwIEBAIHN0cnVj
dCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7CiBzdHJ1Y3QgU2VjdXJpdHlPcmln
aW5EYXRhOwogfQogCisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorT0JKQ19DTEFTUyBB
U0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC03MCw2ICs3NCwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgaGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiYsIFJl
cXVlc3RDb21wbGV0aW9uSGFuZGxlciYmKTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdl
UHJveHk7CisKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCisgICAgUmV0YWluUHRyPEFT
Q0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXI+IG1fcHJlc2VudGVyOworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM3ZDBkZDI0NzFlZDQzOGY5Y2Q2Yzc1OWU0MzA4Zjdi
NmQyMjIyZDUuLjYzZDFkOGU1YTRhN2NhNDU1NGM2ZjhiZmQ1Y2ZmZDc5Mzg3ZjJhNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjUx
Nyw2ICsyNTE3LDcgQEAKIAkJMDdFMTlGMDkyM0Q1MzNCQTAwOTRGRkI0IC8qIFRleHRUcmFja1By
aXZhdGVSZW1vdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY3RDZBNUZFODQwMzA3QzAyQUFDMDcgLyog
QXBwS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXBwS2l0LmZyYW1ld29yazsgcGF0
aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTA4OUMxNjY3RkU4NDExNThDMDJBQUMwNyAvKiBlbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQucGxpc3Quc3RyaW5nczsgbmFtZSA9IGVuOyBwYXRoID0gZW4ubHByb2ov
SW5mb1BsaXN0LnN0cmluZ3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEQ0JGNEQ5
MjZFMkVEMzIwMEVBMEUwNyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRTk3RDc0QzIwMEU4RkYzMDBCRjY2NDMg
LyogU2FmZUJyb3dzaW5nU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhZmVCcm93c2luZ1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRURFODUwMjIwMDRFNzQ5MDAwMzA1NjAgLyog
V2Vic2l0ZVBvcFVwUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVQb3BVcFBvbGljeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA0MTU5ODIzQzdDQzcyMDA2MEEzRTIg
LyogV0tTY3JvbGxWaWV3TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
U2Nyb2xsVmlld01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI5OSw2ICs5
MzAwLDcgQEAKIAkJCQk1NzBEQUFBRDIzMDI2RjVDMDBFOEZDMDQgLyogTmZjU2VydmljZS5tbSAq
LywKIAkJCQk1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5l
bENsaWVudC5oICovLAogCQkJCTU3N0ZGNzg0MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50
aWNhdGlvblBhbmVsQ2xpZW50Lm1tICovLAorCQkJCTBEQ0JGNEQ5MjZFMkVEMzIwMEVBMEUwNyAv
KiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSAqLywKIAkJCQk1Nzc3Mzk5MzI1
ODAzODhGMDA1OTM0OEIgLyogV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUuaCAq
LywKIAkJCQk1Nzc3Mzk5NDI1ODAzODhGMDA1OTM0OEIgLyogV0tBU0NBdXRob3JpemF0aW9uUHJl
c2VudGVyRGVsZWdhdGUubW0gKi8sCiAJCQkJNTcwREFBQzQyMzAzN0Y3RTAwRThGQzA0IC8qIFdL
TkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvci5jcHAKaW5kZXggZDU0NThlZGJmNDQ1MWNhNTg4ZTlkZmU0N2Iy
Y2FlYWM1NTU1YTY5Yy4uMWIxMjgwOWY4NDkxOThmOWEzYzcyNmYwYmE2NjFjMzgxZDc5YmQyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKQEAg
LTY5LDcgKzY5LDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjptYWtlQ3Jl
ZGVudGlhbChjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoZnJhbWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQo
KSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhu
UHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25N
b2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdlYkF1dGhuUHJvY2Vzcykgewog
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6TWFrZUNyZWRlbnRpYWwod2ViRnJhbWUtPmZyYW1lSUQo
KSwgd2ViRnJhbWUtPmluZm8oKSwgaGFzaCwgb3B0aW9ucywgaXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg2LDcg
KzkxLDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjpnZXRBc3NlcnRpb24o
Y29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBTZWN1cml0CiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZnJh
bWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKSkgewor
I2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2Vz
cyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5F
bmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdlYkF1dGhuUHJvY2VzcykgewogICAgICAg
ICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eTo6R2V0QXNzZXJ0aW9uKHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZy
YW1lLT5pbmZvKCksIGhhc2gsIG9wdGlvbnMsIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSwgV1RG
TW92ZShoYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05OCw3ICsxMDgsMTIg
QEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmdldEFzc2VydGlvbihjb25zdCBG
cmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyaXQKIAogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3I6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZShRdWVy
eUNvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVk
KCkpIHsKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCisgICAgYm9vbCB1c2VXZWJBdXRo
blByb2Nlc3MgPSBmYWxzZTsKKyNlbHNlCisgICAgYm9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9u
TW9kZXJuRW5hYmxlZCgpOworI2VuZGlmCisgICAgaWYgKCF1c2VXZWJBdXRoblByb2Nlc3MpIHsK
ICAgICAgICAgbV93ZWJQYWdlLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHk6OklzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGlj
YXRvckF2YWlsYWJsZSgpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBi
MzQ0MTkzZmEwMGEyNDAyODg1NTVjMTFkNDQwYmVhNzA2ZWFkYWI3Li44ZTIwMmNkYjhjNjk0NGQ4
MTU3YzZkYzdkYWRlM2U3NGEwMTU4OWRiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgdGlt
ZW91dCB0ZXN0IHRvIGV4cGVjdCBOb3RBbGxvd2VkRXJyb3IsIHdoaWNoIGlzIHRoZSBleHBlY3Rl
ZCBlcnJvcgorICAgICAgICBjb2RlIHdoZW4gYSB0aW1lb3V0IG9jY3VycywgcGVyIFN0ZXAgMjEg
b2YgdGhlICJDcmVhdGUgYSBOZXcgQ3JlZGVudGlhbCIKKyAgICAgICAgYWxnb3JpdGhtLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDkt
MjggIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZGQgU1BJ
IHRvIHNlbGVjdCBhIHRhYiBjcmVhdGVkIGJ5IF9XS0luc3BlY3RvckV4dGVuc2lvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9f
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IGFiYTRmYjkwN2ZiMjI3YzM3NDBkYWYw
OWFmMTFjNzE0ODA2OTdlMjQuLjViM2VjM2M3Yzk5NGFiOWUyNDFkZWYxODExNTZmOWZhYTUyMWY3
ZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTM0LDYgKzM0LDcg
QEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExv
Y2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9BdXRoZW50aWNhdG9yQXR0YWNobWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KQEAgLTE4MDEsNyAr
MTgwMiw3IEBAIFRFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgTWFrZUNyZWRlbnRpYWxTUElU
aW1lb3V0KQogCiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKICAgICAgICAgRVhQRUNU
X0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJv
ci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBO
b3RBbGxvd2VkRXJyb3IpOwogICAgIH1dOwogICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRp
b25QYW5lbFJhbik7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440305</attachid>
            <date>2021-10-05 17:14:16 -0700</date>
            <delta_ts>2021-10-11 16:23:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20211005171415.patch</filename>
            <type>text/plain</type>
            <size>43630</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY4NWRmM2YwYWUzYjlmMGM2
M2FhN2M5MTNlODI2MjcyZmE1ZmEzZTMuLmJiYjA1MmZkZGFlY2QyYWFmZGU3Y2ViZGM2NDk2ZGFj
Y2YwYjkxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyB0aGUgcGxhdGZvcm0ncyBVSSBmb3IgV2ViQXV0aG4gdHJhbnNhY3Rpb25zLCB3aGVyZSBhdmFp
bGFibGUsCisgICAgICAgIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgV2ViQXV0aG4g
cHJvY2Vzcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmg6Cisg
ICAgICAgIFdoZW4gcG9zc2libGUsIHN3aXRjaCB0byBpbXBvcnRpbmcgdGhlIHVtYnJlbGxhIGhl
YWRlciBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIHJlZGVjbGFyaW5nIHRoZSBlbnRpcmUg
aW50ZXJmYWNlLgorCisgICAgICAgIEFsc28sIGZpeCBhbiBleGlzdGluZyBidWcgY2F1c2VkIGJ5
IHRoZSByZWRlY2xhcmF0aW9uLCB3aGVyZSB0aGUKKyAgICAgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZCBlbnVtIHdhcyByZW5hbWVkLgorCisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgQnVpbGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAo
LVtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aENoYWxsZW5nZTpv
cmlnaW46b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgUmV0dXJuIHRoZSBm
dWxsIGVycm9yIHRvIHRoZSBkZWxlZ2F0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlU29mdExpbmsubW06CisgICAgICAgIEFkZCBhbGwgb2YgdGhlIG5ldyByZXF1
aXJlZCBjbGFzc2VzIGZvciBzb2Z0IGxpbmtpbmcsIGFuZCBzb3J0IHRoZSBsaXN0LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9BcnJheUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvTlNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6dG9OU1N0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OnRvRXhjZXB0aW9uQ29kZSk6CisgICAgICAgIChXZWJL
aXQ6OnRvQVNDRGVzY3JpcHRvcik6CisgICAgICAgIEhlbHBlciBtZXRob2RzIGZvciBjb252ZXJ0
aW5nIGJldHdlZW4gV0sgYW5kIEFTQyB0eXBlcy4KKworICAgICAgICAoV2ViS2l0Ojpjb25maWd1
cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OmNvbmZpZ3Vy
YXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIENyZWF0ZSBhbmQgY29uZmln
dXJlIGFuIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCBmcm9tIHRoZSBwcm92aWRlZCBvcHRp
b25zLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAgICBDb25maWd1cmUgYW5kIHBlcmZv
cm0gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgLSBDcmVhdGUgYSBwcm94eSB0
byB0YWxrIHRvIEF1dGhlbnRpY2F0aW9uU2VydmljZXNBZ2VudC4KKyAgICAgICAgLSBBc2sgdGhl
IHByb3h5IGlmIHdlJ3JlIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdC4KKyAgICAgICAg
ICAtIElmIG5vLCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAgICAgLSBJZiB5ZXMsIGNyZWF0ZSBw
cmVzZW50ZXIgYW5kIHByZXNlbnQgb3ZlciB0aGUgd2ViIHBhZ2UncyB3aW5kb3cuCisgICAgICAg
IC0gV2hlbiB0aGUgcmVxdWVzdCBpZiBmaW5pc2hlZCwgY2hlY2sgdGhlIGtpbmQgb2YgY3JlZGVu
dGlhbCB3ZSBnb3QsIGFuZCByZXR1cm4KKyAgICAgICAgdGhlIHJlbGV2YW50IEF1dGhlbnRpY2F0
b3JSZXNwb25zZURhdGEvQXV0aGVudGljYXRvckF0dGFjaG1lbnQuCisgICAgICAgIC0gSWYgdGhl
IHJlcXVlc3Qgd2FzIGNhbmNlbGVkIG9yIGZhaWxlZCwgYGNyZWRlbnRpYWxgIHdpbGwgYmUgbmls
IGFuZCBgZXJyb3JgIHdpbGwKKyAgICAgICAgYmUgbm9uLW5pbC4gSW4gbW9zdCBjYXNlcywgdGhl
IGVycm9yIHdpbGwgYmUgV0tFcnJvckRvbWFpbiwgd2hpY2ggd2UgY2FuIGNvbnZlcnQKKyAgICAg
ICAgZGlyZWN0bHkgdG8gRXhjZXB0aW9uRGF0YS4gVGhlIG9uZSBleGNlcHRpb24gaXMgdGhlIHVz
ZXIgY2FuY2VsZWQgdGhlIHJlcXVlc3QgaW4KKyAgICAgICAgdGhlIHBsYXRmb3JtIFVJLCBzbyBy
ZXR1cm4gdGhlIGFwcHJvcHJpYXRlIEV4Y2VwdGlvbkRhdGEgaW4gdGhhdCBjYXNlLiBUaGUgZmlu
YWwKKyAgICAgICAgIk9wZXJhdGlvbiBmYWlsZWQuIiBjYXNlIGNvdmVycyBhbnl0aGluZyBlbHNl
IHVuZXhwZWN0ZWQgaGFwcGVuaW5nLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JB
dmFpbGFibGUpOgorICAgICAgICBJZiArc2hvdWxkVXNlQWx0ZXJuYXRlQ3JlZGVudGlhbFN0b3Jl
IGlzIHRydWUsIHRoaXMgaXMgYWx3YXlzIHRydWUuIE90aGVyd2lzZSwKKyAgICAgICAgZmFsbCBi
YWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW06Cisg
ICAgICAgICgtW1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlIGF1dGhvcml6YXRp
b25QcmVzZW50ZXI6Y3JlZGVudGlhbFJlcXVlc3RlZEZvckxvZ2luQ2hvaWNlOmF1dGhlbnRpY2F0
ZWRDb250ZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBVc2UgdGhlIG5ldyBuYW1l
IG9mIHRoZSBlbnVtLCB1bmNvbmRpdGlvbmFsbHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAg
ICAgICBXcmFwIGEgZmV3IG1ldGhvZHMgaW4gdGhlIG5ldyBmbGFnLiBXaGVuIHRoZSBmbGFnIGlz
IG9uLCB0aGVzZSBtZXRob2RzIHdpbGwgZXhpc3QKKyAgICAgICAgaW4gV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgTmV3IGl2
YXIgYW5kIG1ldGhvZCBmb3IgdGhlIHBsYXRmb3JtIHByZXNlbnRlci4KKyAgICAgICAgTWFrZSB0
aGUgc3VwZXJjbGFzcyBwdWJsaWMgc28gd2UgY2FuIHVzZSB0aGUgV2Vha1B0ciBpbmhlcml0YW5j
ZS4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICBBZGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICBXaGVuIHBsYXRm
b3JtIFVJIGlzIGF2YWlsYWJsZSwgcHJlZmVyIGl0IG92ZXIgdGhlIFdlYkF1dGhuIHByb2Nlc3Mu
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6bWFrZUNyZWRl
bnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6Omdl
dEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
cjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKToKKwogMjAy
MS0xMC0wNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBT
UEkgdG8gbGF1bmNoIGEgc2VydmljZSBzZXJ2aWNlIHdvcmtlciBpbiBhIFdLV2ViVmlldyBhbmQg
ZXhwb3NlIHNlcnZpY2Ugd29ya2VyIHRvIGluamVjdGVkIGJ1bmRsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVT
UEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlU1BJLmgKaW5kZXggN2MzM2NiZWIxYTQ1NDBmZDU1ZDc1MTQyZDI0Y2FiN2Q4NzRh
YzcyMC4uZjI3MDhlNmUxZjAyMDc1NWZmOTMzMjdmNzFkZmMwNTNlNGQ3NzMwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNl
c0NvcmVTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9Db2NvYS9BdXRoZW50
aWNhdGlvblNlcnZpY2VzQ29yZVNQSS5oCkBAIC0yNSwxOSArMjUsOSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2lmIEhBVkUoQVNDX0FVVEhfVUkpCi0KLS8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcy
NDA2NTg1PjogVW5jb21tZW50IHRoZSBoZWFkZXJzIGFmdGVyIHRoZSBTREsgYmVjb21lcyBzdGFi
bGUuCi0vLyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotLy8KLS8vLy8gRklYTUUoMjE5NzY3
KTogUmVtb3ZlIEFTQ0FwcGxlSURDcmVkZW50aWFsLmguCi0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlL0FTQ0FwcGxlSURDcmVkZW50aWFsLmg+Ci0vLyNpbXBvcnQgPEF1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0F1dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0
Lmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ0F1dGhvcml6YXRp
b25QcmVzZW50ZXIuaD4KLS8vI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVND
UGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UuaD4KLS8vI2ltcG9ydCA8QXV0
aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFs
TG9naW5DaG9pY2UuaD4KLS8vCi0vLyNlbHNlCisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJ
KQorI2ltcG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUvQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmVQcml2YXRlLmg+CisjZWxpZiBIQVZFKEFTQ19BVVRIX1VJKQogCiBOU19BU1NVTUVf
Tk9OTlVMTF9CRUdJTgogCkBAIC0xMDgsMTAgKzk4LDEwIEBAIGV4dGVybiBOU1N0cmluZyAqIGNv
bnN0IEFTQ0F1dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0RGF0YUtleTsKIAogQGVuZAog
Ci10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRl
bnRpYWxMb2dpbkNob2ljZUtpbmQpIHsKLSAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRl
bnRpYWxMb2dpbkNob2ljZUtpbmRSZWdpc3RyYXRpb24sCi0gICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kQXNzZXJ0aW9uLAotICAgIEFTQ1NlY3VyaXR5
S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZEFzc2VydGlvblBsYWNlaG9sZGVy
LAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVk
ZW50aWFsS2luZCkgeworICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmRS
ZWdpc3RyYXRpb24sCisgICAgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFz
c2VydGlvbiwKKyAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kQXNzZXJ0
aW9uUGxhY2Vob2xkZXIsCiB9OwogCiBAaW50ZXJmYWNlIEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+CkBAIC0xMzYsNyArMTI2
LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlD
cmVkZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFi
bGUsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqbmFtZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBudWxsYWJsZSwgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpkaXNwbGF5TmFtZTsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwgcmVhZG9ubHksIGNvcHkpIE5TRGF0YSAqdXNlckhh
bmRsZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kIGxvZ2luQ2hvaWNlS2luZDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFs
S2luZCBjcmVkZW50aWFsS2luZDsKIAogKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJM
RTsKIC0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDVlNmI1MmMxMjExNDZjNmQ1M2FjZTY2NWQ2NWMyNTZmZGU1ZTk1OTMuLmNiMDA3
MjAwYWRkNGYwNWJiYTRjOTNhNjk5NDg3ZjM0NmM0YzNiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKQEAgLTU5Miw2ICs1OTIsNyBAQCBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2Ev
TmZjU2VydmljZS5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0
aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQ29jb2EvV0tORlJlYWRlclNlc3Npb25EZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0KK1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eS5tbQogCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0
aW9uLm1tCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxTZXJ2aWNl
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDhmNGFjNTcxMzNjODVjMjAwOGFh
ZGIyMDIwNTg5ZWQzMzBjMzVmYmIuLmZjMTVkZGQzYzcwNDVlYmFkMWQ0YjI4NTI2ODZjODM3YjAz
ZWVlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC01MjgsNyArNTI4LDcgQEAg
c3RhdGljIFJldGFpblB0cjxfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZT4gd2tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb24KICAgICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsm
XShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsK
ICAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShy
ZXNwb25zZS0+ZGF0YSgpLCBjbGllbnREYXRhSlNPTi5nZXQoKSwgcmVzcG9uc2UtPmF0dGFjaG1l
bnQoKSkuZ2V0KCksIG5pbCk7CiAgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhJiBleGNlcHRpb24pIHsKLSAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBl
cnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZv
Om5pbF0pOworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFp
bjpXS0Vycm9yRG9tYWluIGNvZGU6ZXhjZXB0aW9uLmNvZGUgdXNlckluZm86QHsgTlNMb2NhbGl6
ZWREZXNjcmlwdGlvbktleTogZXhjZXB0aW9uLm1lc3NhZ2UgfV0pOwogICAgICAgICB9KTsKICAg
ICB9OwogICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IFdURk1vdmUoaGFzaCksIFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9u
czpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0
OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgc3RkOjpudWxsb3B0LCB7IH0sIHRydWUsIFN0cmluZygp
LCBudWxscHRyIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlU29mdExpbmsuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsuaAppbmRleCBjOTJm
OTAwMTdmNTM5YTk1MzQyN2RlMzFhOGYzNjI5OGNjMTExYzZlLi5iM2E3OWMwN2FiYTJjYmFmZWVm
ZWZjNmM2N2NhZTEzNmY3MjIyNTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRM
aW5rLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29j
b2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5oCkBAIC0zMiwxNCArMzIsMjMg
QEAgU09GVF9MSU5LX0ZSQU1FV09SS19GT1JfSEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmUpOwogCiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1dl
YktpdFNQSVN1cHBvcnQpOwogCi0jaWYgSEFWRShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19B
VVRIX1VJKSB8fCBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19G
T1JfSEVBREVSKFdlYktpdCwgQVNDQXV0aG9yaXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktf
Q0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0FnZW50UHJveHkpOworU09GVF9MSU5LX0NMQVNT
X0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBcHBsZUlEQ3JlZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xB
U1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXV0aG9yaXphdGlvblBy
ZXNlbnRlcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6
YXRpb25SZW1vdGVQcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0
LCBBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFE
RVIoV2ViS2l0LCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOwogU09G
VF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRl
bnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFT
Q1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19D
TEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXBwbGVJRENyZWRlbnRpYWwpOworU09GVF9MSU5L
X0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxS
ZWdpc3RyYXRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJs
aWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX0hF
QURFUihXZWJLaXQsIEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpOworU09G
VF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5
S2V5UHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hF
QURFUihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNl
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uKTsKIAogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9I
RUFERVIoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlv
bkVycm9yRG9tYWluLCBOU0Vycm9yRG9tYWluKTsKICNkZWZpbmUgQVNDQXV0aG9yaXphdGlvbkVy
cm9yRG9tYWluIFdlYktpdDo6Z2V0X0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlX0FTQ0F1dGhv
cml6YXRpb25FcnJvckRvbWFpbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRM
aW5rLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2Ev
QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5tbQppbmRleCBiOTMxM2M4NmRkN2Rj
NTAwMDY2MmFhYmMzZDUzMjM4ZWE3Y2Y1MmNiLi5hMjNhYzUzYTdiYzE5YTJlMjUyNWVkMzY5MjBk
MGRkYzM0ZjMyODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExpbmsubW0KQEAgLTMyLDE0ICszMiwyMyBAQCBTT0ZU
X0xJTktfUFJJVkFURV9GUkFNRVdPUktfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRo
ZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDV2ViS2l0U1BJU3VwcG9ydCk7CiAKLSNpZiBIQVZF
KEFTQ19BVVRIX1VJKQorI2lmIEhBVkUoQVNDX0FVVEhfVUkpIHx8IEhBVkUoVU5JRklFRF9BU0Nf
QVVUSF9VSSkKIAotU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNh
dGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvblByZXNlbnRlcik7CitTT0ZUX0xJTktf
Q0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NB
Z2VudFByb3h5KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGlj
YXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxlSURDcmVkZW50aWFsKTsKIFNPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhv
cml6YXRpb25QcmVzZW50YXRpb25Db250ZXh0KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNF
KFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25QcmVz
ZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvblJlbW90ZVByZXNlbnRlcik7CitTT0ZUX0xJ
TktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBB
U0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHQpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0Uo
V2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDUGxhdGZvcm1QdWJsaWNLZXlD
cmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwg
QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlh
bExvZ2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExv
Z2luQ2hvaWNlKTsKLVNPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGlj
YXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0FwcGxlSURDcmVkZW50aWFsKTsKK1NPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BsYXRm
b3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbik7CitTT0ZUX0xJTktfQ0xBU1NfRk9S
X1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQdWJsaWNLZXlD
cmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9ucyk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0
aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmUsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CitT
T0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXND
b3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7CitTT0ZU
X0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3Jl
LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb24pOwogCiBTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXND
b3JlLCBBU0NBdXRob3JpemF0aW9uRXJyb3JEb21haW4sIE5TRXJyb3JEb21haW4pOwogU09GVF9M
SU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29y
ZSwgQVNDUElOVmFsaWRhdGlvblJlc3VsdEtleSwgTlNTdHJpbmcqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUu
bW0KaW5kZXggN2MyMDhmZjBhZDU3MDBlYzE3ZGI0NDM4YjY4MzQ5YTQzY2QyNmE5OS4uZjI5NTBm
ZTMwNjkxNWYwMWM3ZGFiOGIwMjkwZDcwYTNlYzc5MDMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9u
UHJlc2VudGVyRGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0K
QEAgLTc4LDcgKzc4LDcgQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KICAgICBpZiAoW2xvZ2lu
Q2hvaWNlIGlzS2luZE9mQ2xhc3M6V2ViS2l0OjpnZXRBU0NTZWN1cml0eUtleVB1YmxpY0tleUNy
ZWRlbnRpYWxMb2dpbkNob2ljZUNsYXNzKCldKSB7CiAgICAgICAgIGF1dG8gKnNlY3VyaXR5S2V5
TG9naW5DaG9pY2UgPSAoQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9p
Y2UgKilsb2dpbkNob2ljZTsKIAotICAgICAgICBpZiAoW3NlY3VyaXR5S2V5TG9naW5DaG9pY2Ug
bG9naW5DaG9pY2VLaW5kXSA9PSBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dp
bkNob2ljZUtpbmRBc3NlcnRpb24pIHsKKyAgICAgICAgaWYgKFtzZWN1cml0eUtleUxvZ2luQ2hv
aWNlIGNyZWRlbnRpYWxLaW5kXSA9PSBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxL
aW5kQXNzZXJ0aW9uKSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9naW5DaG9pY2VOYW1lID0gc2Vj
dXJpdHlLZXlMb2dpbkNob2ljZS5uYW1lOwogICAgICAgICAgICAgW3NlbGYgZGlzcGF0Y2hDb29y
ZGluYXRvckNhbGxiYWNrOltsb2dpbkNob2ljZU5hbWUgPSBXVEZNb3ZlKGxvZ2luQ2hvaWNlTmFt
ZSldIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JQcmVzZW50ZXJDb29yZGluYXRvciYgY29vcmRpbmF0
b3IpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNvb3JkaW5hdG9yLmRpZFNlbGVjdEFzc2Vy
dGlvblJlc3BvbnNlKGxvZ2luQ2hvaWNlTmFtZSwgbmlsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2M2MjU3NmEyM2VkZmUzM2JjNGQ3NTM4ZmE5YjY5NTM5ZTE5M2ZiMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tCkBAIC0wLDAgKzEsMzUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oIgorCisjaW1w
b3J0ICJMb2NhbFNlcnZpY2UuaCIKKyNpbXBvcnQgIldLRXJyb3IuaCIKKyNpbXBvcnQgIldlYkF1
dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2lt
cG9ydCA8QXV0aGVudGljYXRpb25TZXJ2aWNlcy9BU0NPU0VDb25zdGFudHMuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQXV0aGVudGljYXRvckF0dGFjaG1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25EYXRh
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorCisjaW1wb3J0ICJBdXRoZW50aWNhdGlvblNl
cnZpY2VzQ29yZVNvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3N0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiB0b0FycmF5QnVm
ZmVyKE5TRGF0YSAqZGF0YSkKK3sKKyAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpOwor
fQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxOU0RhdGE+IHRvTlNEYXRhKGNvbnN0IEJ1ZmZl
clNvdXJjZSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5ndGg6ZGF0YS5sZW5ndGgoKV0pOworfQorCitzdGF0
aWMgaW5saW5lIFJldGFpblB0cjxOU0RhdGE+IHRvTlNEYXRhKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6dmVjdG9yLmRhdGEoKSBsZW5ndGg6dmVjdG9yLnNpemUoKV0pOworfQorCitzdGF0aWMg
aW5saW5lIFJldGFpblB0cjxOU1N0cmluZz4gdG9OU1N0cmluZyhVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KQoreworICAgIHN3aXRjaCAodXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50KSB7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQ6OlJlcXVpcmVkOgorICAgICAgICByZXR1cm4gQCJyZXF1aXJlZCI7CisgICAgY2Fz
ZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkOgorICAgICAgICByZXR1
cm4gQCJkaXNjb3VyYWdlZCI7CisgICAgY2FzZSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6
OlByZWZlcnJlZDoKKyAgICAgICAgcmV0dXJuIEAicHJlZmVycmVkIjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gQCJwcmVmZXJyZWQiOworfQorCitzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbkNvZGUgdG9F
eGNlcHRpb25Db2RlKE5TSW50ZWdlciBuc0Vycm9yQ29kZSkKK3sKKyAgICBFeGNlcHRpb25Db2Rl
IGV4Y2VwdGlvbkNvZGUgPSAoRXhjZXB0aW9uQ29kZSluc0Vycm9yQ29kZTsKKworICAgIHN3aXRj
aCAoZXhjZXB0aW9uQ29kZSkgeworICAgIGNhc2UgSW5kZXhTaXplRXJyb3I6IEZBTExUSFJPVUdI
OworICAgIGNhc2UgSGllcmFyY2h5UmVxdWVzdEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFdyb25nRG9jdW1lbnRFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJy
b3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm90Rm91bmRFcnJvcjogRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBOb3RTdXBwb3J0ZWRFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBJblVzZUF0
dHJpYnV0ZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEludmFsaWRTdGF0ZUVycm9yOiBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFN5bnRheEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBOYW1lc3Bh
Y2VFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBJbnZhbGlkQWNjZXNzRXJyb3I6IEZBTExU
SFJPVUdIOworICAgIGNhc2UgVHlwZU1pc21hdGNoRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNh
c2UgU2VjdXJpdHlFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBOZXR3b3JrRXJyb3I6IEZB
TExUSFJPVUdIOworICAgIGNhc2UgQWJvcnRFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBV
UkxNaXNtYXRjaEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFF1b3RhRXhjZWVkZWRFcnJv
cjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBUaW1lb3V0RXJyb3I6IEZBTExUSFJPVUdIOworICAg
IGNhc2UgSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgRGF0YUNs
b25lRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgRW5jb2RpbmdFcnJvcjogRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBOb3RSZWFkYWJsZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFVu
a25vd25FcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBDb25zdHJhaW50RXJyb3I6IEZBTExU
SFJPVUdIOworICAgIGNhc2UgRGF0YUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZWFkb25seUVycm9y
OiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFZlcnNpb25FcnJvcjogRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBPcGVyYXRpb25FcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBOb3RBbGxvd2VkRXJy
b3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmFuZ2VFcnJvcjogRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBUeXBlRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgSlNTeW50YXhFcnJvcjogRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBTdGFja092ZXJmbG93RXJyb3I6IEZBTExUSFJPVUdIOworICAg
IGNhc2UgT3V0T2ZNZW1vcnlFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBFeGlzdGluZ0V4
Y2VwdGlvbkVycm9yOgorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQ29kZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gTm90QWxsb3dlZEVycm9yOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxB
U0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gdG9BU0NEZXNjcmlwdG9yKFB1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCit7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PE5TU3RyaW5nICo+PiB0cmFuc3BvcnRzOworICAgIHNpemVfdCB0cmFuc3BvcnRD
b3VudCA9IGRlc2NyaXB0b3IudHJhbnNwb3J0cy5zaXplKCk7CisgICAgaWYgKHRyYW5zcG9ydENv
dW50KSB7CisgICAgICAgIHRyYW5zcG9ydHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoQ2FwYWNpdHk6dHJhbnNwb3J0Q291bnRdKTsKKworICAgICAgICBmb3IgKEF1
dGhlbnRpY2F0b3JUcmFuc3BvcnQgdHJhbnNwb3J0IDogZGVzY3JpcHRvci50cmFuc3BvcnRzKSB7
CisgICAgICAgICAgICBOU1N0cmluZyAqdHJhbnNwb3J0U3RyaW5nID0gbmlsOworICAgICAgICAg
ICAgc3dpdGNoICh0cmFuc3BvcnQpIHsKKyAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6VXNiOgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydFN0cmluZyA9IEAidXNiIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6TmZjOgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydFN0cmluZyA9IEAibmZjIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6QmxlOgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydFN0cmluZyA9IEAiYmxlIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6SW50ZXJuYWw6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0U3RyaW5nID0gQCJp
bnRlcm5hbCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0cmFuc3BvcnRTdHJpbmcpCisgICAgICAgICAgICAgICAgW3RyYW5zcG9ydHMg
YWRkT2JqZWN0OnRyYW5zcG9ydFN0cmluZ107CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gYWRvcHROUyhbYWxsb2NBU0NQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvckluc3RhbmNl
KCkgaW5pdFdpdGhDcmVkZW50aWFsSUQ6dG9OU0RhdGEoZGVzY3JpcHRvci5pZFZlY3RvcikuZ2V0
KCkgdHJhbnNwb3J0czp0cmFuc3BvcnRzLmdldCgpXSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8
QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0PiBjb25maWd1cmVSZWdpc3RyYXRpb25SZXF1ZXN0
Q29udGV4dChjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiBvcHRpb25z
KQoreworICAgIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZXMgcmVxdWVzdFR5cGVzID0gQVNDQ3Jl
ZGVudGlhbFJlcXVlc3RUeXBlUGxhdGZvcm1QdWJsaWNLZXlSZWdpc3RyYXRpb24gfCBBU0NDcmVk
ZW50aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tleVJlZ2lzdHJhdGlvbjsKKworICAg
IFJldGFpblB0cjxOU1N0cmluZz4gdXNlclZlcmlmaWNhdGlvbjsKKyAgICBib29sIHNob3VsZFJl
cXVpcmVSZXNpZGVudEtleSA9IGZhbHNlOworICAgIHN0ZDo6b3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhPiBh
dXRoZW50aWNhdG9yU2VsZWN0aW9uID0gb3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uOwor
ICAgIGlmIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
QXV0aGVudGljYXRvckF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBhdXRoZW50aWNhdG9yU2VsZWN0
aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKKyAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0g
QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRmb3JtKQorICAgICAgICAgICAgcmVxdWVzdFR5
cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlUGxhdGZvcm1QdWJsaWNLZXlSZWdpc3RyYXRp
b247CisgICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gQXV0aGVudGljYXRvckF0dGFjaG1l
bnQ6OkNyb3NzUGxhdGZvcm0pCisgICAgICAgICAgICByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50
aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tleVJlZ2lzdHJhdGlvbjsKKworICAgICAg
ICB1c2VyVmVyaWZpY2F0aW9uID0gdG9OU1N0cmluZyhhdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51
c2VyVmVyaWZpY2F0aW9uKTsKKworICAgICAgICBzaG91bGRSZXF1aXJlUmVzaWRlbnRLZXkgPSBh
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXk7CisgICAgfQorCisgICAg
YXV0byByZXF1ZXN0Q29udGV4dCA9IGFkb3B0TlMoW2FsbG9jQVNDQ3JlZGVudGlhbFJlcXVlc3RD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aFJlcXVlc3RUeXBlczpyZXF1ZXN0VHlwZXNdKTsKKyAg
ICBbcmVxdWVzdENvbnRleHQgc2V0UmVseWluZ1BhcnR5SWRlbnRpZmllcjpvcHRpb25zLnJwLmlk
XTsKKworICAgIGF1dG8gY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyA9IGFkb3B0TlMoW2FsbG9j
QVNDUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdF0pOwor
CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0Q2hhbGxlbmdlOnRvTlNEYXRhKG9w
dGlvbnMuY2hhbGxlbmdlKS5nZXQoKV07CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMg
c2V0UmVseWluZ1BhcnR5SWRlbnRpZmllcjpvcHRpb25zLnJwLmlkXTsKKyAgICBbY3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucyBzZXRVc2VyTmFtZTpvcHRpb25zLnVzZXIubmFtZV07CisgICAgW2Ny
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0VXNlcklkZW50aWZpZXI6dG9OU0RhdGEob3B0aW9u
cy51c2VyLmlkKS5nZXQoKV07CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0VXNl
ckRpc3BsYXlOYW1lOm9wdGlvbnMudXNlci5kaXNwbGF5TmFtZV07CisgICAgW2NyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgc2V0VXNlclZlcmlmaWNhdGlvblByZWZlcmVuY2U6dXNlclZlcmlmaWNh
dGlvbi5nZXQoKV07CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0U2hvdWxkUmVx
dWlyZVJlc2lkZW50S2V5OnNob3VsZFJlcXVpcmVSZXNpZGVudEtleV07CisKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk8TlNOdW1iZXIgKj4+IHN1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZp
ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9w
dGlvbnMucHViS2V5Q3JlZFBhcmFtcy5zaXplKCldKTsKKyAgICBmb3IgKFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnMgYWxnb3JpdGhtUGFyYW1ldGVyIDogb3B0
aW9ucy5wdWJLZXlDcmVkUGFyYW1zKQorICAgICAgICBbc3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRp
ZmllcnMgYWRkT2JqZWN0OkAoYWxnb3JpdGhtUGFyYW1ldGVyLmFsZyldOworCisgICAgW2NyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0U3VwcG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcnM6c3Vw
cG9ydGVkQWxnb3JpdGhtSWRlbnRpZmllcnMuZ2V0KCldOworCisgICAgc2l6ZV90IGV4Y2x1ZGVk
Q3JlZGVudGlhbENvdW50ID0gb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpOworICAg
IGlmIChleGNsdWRlZENyZWRlbnRpYWxDb3VudCkgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk8QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4+IGV4Y2x1ZGVkQ3Jl
ZGVudGlhbHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6ZXhjbHVkZWRDcmVkZW50aWFsQ291bnRdKTsKKworICAgICAgICBmb3IgKFB1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFs
cykKKyAgICAgICAgICAgIFtleGNsdWRlZENyZWRlbnRpYWxzIGFkZE9iamVjdDp0b0FTQ0Rlc2Ny
aXB0b3IoZGVzY3JpcHRvcikuZ2V0KCldOworCisgICAgICAgIFtjcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zIHNldEV4Y2x1ZGVkQ3JlZGVudGlhbHM6ZXhjbHVkZWRDcmVkZW50aWFscy5nZXQoKV07
CisgICAgfQorCisgICAgaWYgKHJlcXVlc3RUeXBlcyAmIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlw
ZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uKQorICAgICAgICBbcmVxdWVzdENvbnRleHQg
c2V0UGxhdGZvcm1LZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOmNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuZ2V0KCldOworCisgICAgaWYgKHJlcXVlc3RUeXBlcyAmIEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5UmVnaXN0cmF0aW9uKQorICAgICAgICBbcmVx
dWVzdENvbnRleHQgc2V0U2VjdXJpdHlLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOmNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuZ2V0KCldOworCisgICAgcmV0dXJuIHJlcXVlc3RDb250ZXh0
OworfQorCitzdGF0aWMgUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4gY29u
ZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RDb250ZXh0KGNvbnN0IFB1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU0NDcmVkZW50aWFsUmVxdWVzdFR5
cGVzIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGlj
S2V5QXNzZXJ0aW9uIHwgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNL
ZXlBc3NlcnRpb247CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVzZXJWZXJpZmljYXRpb247
CisgICAgc3RkOjpvcHRpb25hbDxBdXRoZW50aWNhdG9yQXR0YWNobWVudD4gYXR0YWNobWVudCA9
IG9wdGlvbnMuYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0g
QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRmb3JtKQorICAgICAgICByZXF1ZXN0VHlwZXMg
PSBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbjsKKyAg
ICBlbHNlIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1Bs
YXRmb3JtKQorICAgICAgICByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVT
ZWN1cml0eUtleVB1YmxpY0tleUFzc2VydGlvbjsKKworICAgIHVzZXJWZXJpZmljYXRpb24gPSB0
b05TU3RyaW5nKG9wdGlvbnMudXNlclZlcmlmaWNhdGlvbik7CisKKyAgICBzaXplX3QgYWxsb3dl
ZENyZWRlbnRpYWxDb3VudCA9IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5zaXplKCk7CisgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
ICo+PiBhbGxvd2VkQ3JlZGVudGlhbHM7CisgICAgaWYgKGFsbG93ZWRDcmVkZW50aWFsQ291bnQp
IHsKKyAgICAgICAgYWxsb3dlZENyZWRlbnRpYWxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmFsbG93ZWRDcmVkZW50aWFsQ291bnRdKTsKKworICAg
ICAgICBmb3IgKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBvcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMpCisgICAgICAgICAgICBbYWxsb3dlZENyZWRlbnRpYWxzIGFk
ZE9iamVjdDp0b0FTQ0Rlc2NyaXB0b3IoZGVzY3JpcHRvcikuZ2V0KCldOworICAgIH0KKworICAg
IGF1dG8gcmVxdWVzdENvbnRleHQgPSBhZG9wdE5TKFthbGxvY0FTQ0NyZWRlbnRpYWxSZXF1ZXN0
Q29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhSZXF1ZXN0VHlwZXM6cmVxdWVzdFR5cGVzXSk7Cisg
ICAgW3JlcXVlc3RDb250ZXh0IHNldFJlbHlpbmdQYXJ0eUlkZW50aWZpZXI6b3B0aW9ucy5ycElk
XTsKKworICAgIE5TRGF0YSAqY2hhbGxlbmdlID0gdG9OU0RhdGEob3B0aW9ucy5jaGFsbGVuZ2Up
LmdldCgpOworCisgICAgaWYgKHJlcXVlc3RUeXBlcyAmIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlw
ZVBsYXRmb3JtUHVibGljS2V5QXNzZXJ0aW9uKQorICAgICAgICBbcmVxdWVzdENvbnRleHQgc2V0
UGxhdGZvcm1LZXlDcmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9uczpbYWxsb2NBU0NQdWJsaWNLZXlD
cmVkZW50aWFsQXNzZXJ0aW9uT3B0aW9uc0luc3RhbmNlKCkgaW5pdFdpdGhLaW5kOkFTQ1B1Ymxp
Y0tleUNyZWRlbnRpYWxLaW5kUGxhdGZvcm0gcmVseWluZ1BhcnR5SWRlbnRpZmllcjpvcHRpb25z
LnJwSWQgY2hhbGxlbmdlOmNoYWxsZW5nZSB1c2VyVmVyaWZpY2F0aW9uUHJlZmVyZW5jZTp1c2Vy
VmVyaWZpY2F0aW9uLmdldCgpIGFsbG93ZWRDcmVkZW50aWFsczphbGxvd2VkQ3JlZGVudGlhbHMu
Z2V0KCldXTsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5
cGVTZWN1cml0eUtleVB1YmxpY0tleUFzc2VydGlvbikKKyAgICAgICAgW3JlcXVlc3RDb250ZXh0
IHNldFNlY3VyaXR5S2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnM6W2FsbG9jQVNDUHVibGlj
S2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnNJbnN0YW5jZSgpIGluaXRXaXRoS2luZDpBU0NQ
dWJsaWNLZXlDcmVkZW50aWFsS2luZFNlY3VyaXR5S2V5IHJlbHlpbmdQYXJ0eUlkZW50aWZpZXI6
b3B0aW9ucy5ycElkIGNoYWxsZW5nZTpjaGFsbGVuZ2UgdXNlclZlcmlmaWNhdGlvblByZWZlcmVu
Y2U6dXNlclZlcmlmaWNhdGlvbi5nZXQoKSBhbGxvd2VkQ3JlZGVudGlhbHM6YWxsb3dlZENyZWRl
bnRpYWxzLmdldCgpXV07CisKKyAgICByZXR1cm4gcmVxdWVzdENvbnRleHQ7Cit9CisKK3ZvaWQg
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6Om1ha2VDcmVkZW50aWFsKEZyYW1lSWRl
bnRpZmllciBmcmFtZUlkLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhf
dD4mJiBoYXNoLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiYgb3B0aW9ucywg
Ym9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhh
bmRsZXIpCit7CisgICAgYXV0byByZXF1ZXN0Q29udGV4dCA9IGNvbmZpZ3VyZVJlZ2lzdHJhdGlv
blJlcXVlc3RDb250ZXh0KG9wdGlvbnMpOworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3RDb250
ZXh0LCBXVEZNb3ZlKGhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3JQcm94eTo6Z2V0QXNzZXJ0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlkLCBGcmFtZUlu
Zm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhfdD4mJiBoYXNoLCBQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMmJiBvcHRpb25zLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSwgUmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIHJlcXVl
c3RDb250ZXh0ID0gY29uZmlndXJhdGlvbkFzc2VydGlvblJlcXVlc3RDb250ZXh0KG9wdGlvbnMp
OworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3RDb250ZXh0LCBXVEZNb3ZlKGhhbmRsZXIpKTsK
K30KKwordm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6cGVyZm9ybVJlcXVl
c3QoUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4gcmVxdWVzdENvbnRleHQs
IFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgYXV0byBwcm94eSA9
IGFkb3B0TlMoW2FsbG9jQVNDQWdlbnRQcm94eUluc3RhbmNlKCkgaW5pdF0pOworCisgICAgTlNX
aW5kb3cgKndpbmRvdyA9IG1fd2ViUGFnZVByb3h5LnBsYXRmb3JtV2luZG93KCk7CisgICAgW3By
b3h5IHBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdHNGb3JDb250ZXh0OnJlcXVlc3RDb250ZXh0
LmdldCgpIHdpdGhDbGVhcmFuY2VIYW5kbGVyOm1ha2VCbG9ja1B0cihbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpLCB3aW5kb3cgPSBXVEZN
b3ZlKHdpbmRvdyldKE5TWFBDTGlzdGVuZXJFbmRwb2ludCAqZGFlbW9uRW5wb2ludCwgTlNFcnJv
ciAqZXJyb3IpIG11dGFibGUgeworICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSB3ZWFrVGhp
cy5nZXQoKTsKKworICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMgfHwgIWRhZW1vbkVucG9pbnQp
IHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbaGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcih7IH0sIChB
dXRoZW50aWNhdG9yQXR0YWNobWVudCkwLCBFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9y
LCAiT3BlcmF0aW9uIGZhaWxlZC4iIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3ByZXNlbnRlciA9
IGFkb3B0TlMoW2FsbG9jQVNDQXV0aG9yaXphdGlvblJlbW90ZVByZXNlbnRlckluc3RhbmNlKCkg
aW5pdF0pOworICAgICAgICBbcHJvdGVjdGVkVGhpcy0+bV9wcmVzZW50ZXIgcHJlc2VudFdpdGhX
aW5kb3c6d2luZG93IGRhZW1vbkVuZHBvaW50OmRhZW1vbkVucG9pbnQgY29tcGxldGlvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFtoYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKV0oaWQgPEFTQ0NyZWRl
bnRpYWxQcm90b2NvbD4gY3JlZGVudGlhbCwgTlNFcnJvciAqZXJyb3IpIG11dGFibGUgeworICAg
ICAgICAgICAgQXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSByZXNwb25zZSA9IHsgfTsKKyAgICAg
ICAgICAgIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF0dGFjaG1lbnQ7CisgICAgICAgICAgICBF
eGNlcHRpb25EYXRhIGV4Y2VwdGlvbkRhdGEgPSB7IH07CisKKyAgICAgICAgICAgIGlmIChbY3Jl
ZGVudGlhbCBpc0tpbmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJl
Z2lzdHJhdGlvbkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhl
bnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5p
c0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlID0gdHJ1ZTsKKworICAgICAgICAgICAg
ICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbiAqcmVnaXN0cmF0
aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UucmF3
SWQgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuY3JlZGVudGlhbElEKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS5hdHRlc3RhdGlvbk9iamVjdCA9IHRvQXJyYXlCdWZm
ZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5hdHRlc3RhdGlvbk9iamVjdCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlzS2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQ
dWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uQ2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRl
bnRpYWxSZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihyZWdpc3RyYXRp
b25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXR0
ZXN0YXRpb25PYmplY3QgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuYXR0
ZXN0YXRpb25PYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tp
bmRPZkNsYXNzOmdldEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbkNsYXNz
KCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OjpQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5pc0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBBU0NQbGF0Zm9y
bVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24gKmFzc2VydGlvbkNyZWRlbnRpYWwgPSBjcmVk
ZW50aWFsOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihh
c3NlcnRpb25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9u
c2UuYXV0aGVudGljYXRvckRhdGEgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwu
YXV0aGVudGljYXRvckRhdGEpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNpZ25hdHVyZSA9
IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5zaWduYXR1cmUpOworICAgICAgICAg
ICAgICAgIHJlc3BvbnNlLnVzZXJIYW5kbGUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRl
bnRpYWwudXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlz
S2luZE9mQ2xhc3M6Z2V0QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9u
Q2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg
QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uICphc3NlcnRpb25DcmVkZW50
aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJZCA9IHRvQXJy
YXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOworICAgICAgICAgICAg
ICAgIHJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhID0gdG9BcnJheUJ1ZmZlcihhc3NlcnRpb25D
cmVkZW50aWFsLmF1dGhlbnRpY2F0b3JEYXRhKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5z
aWduYXR1cmUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwuc2lnbmF0dXJlKTsK
KyAgICAgICAgICAgICAgICByZXNwb25zZS51c2VySGFuZGxlID0gdG9BcnJheUJ1ZmZlcihhc3Nl
cnRpb25DcmVkZW50aWFsLnVzZXJIYW5kbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdHRhY2htZW50ID0gKEF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSAwOworICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZTsKKyAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqZXJyb3JNZXNzYWdlID0gbmlsOworICAgICAgICAgICAgICAgIGlmIChbZXJy
b3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpXS0Vycm9yRG9tYWluXSkgeworICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25Db2RlID0gdG9FeGNlcHRpb25Db2RlKGVycm9yLmNvZGUpOworICAg
ICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci51c2VySW5mb1tOU0xvY2FsaXpl
ZERlc2NyaXB0aW9uS2V5XTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25Db2RlID0gTm90QWxsb3dlZEVycm9yOworCisgICAgICAgICAgICAg
ICAgICAgIGlmIChbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpBU0NBdXRob3JpemF0aW9u
RXJyb3JEb21haW5dICYmIGVycm9yLmNvZGUgPT0gQVNDQXV0aG9yaXphdGlvbkVycm9yVXNlckNh
bmNlbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gQCJUaGlzIHJl
cXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGJ5IHRoZSB1c2VyLiI7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IEAiT3BlcmF0
aW9uIGZhaWxlZC4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkRhdGEgPSB7IGV4Y2VwdGlvbkNvZGUsIGVycm9yTWVzc2FnZSB9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBoYW5kbGVyKHJlc3BvbnNlLCBhdHRhY2htZW50LCBleGNlcHRpb25E
YXRhKTsKKyAgICAgICAgfSkuZ2V0KCldOworICAgIH0pLmdldCgpXTsKK30KKwordm9pZCBXZWJB
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRo
ZW50aWNhdG9yQXZhaWxhYmxlKFF1ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQorewor
ICAgIGlmIChbZ2V0QVNDV2ViS2l0U1BJU3VwcG9ydENsYXNzKCkgc2hvdWxkVXNlQWx0ZXJuYXRl
Q3JlZGVudGlhbFN0b3JlXSkgeworICAgICAgICBoYW5kbGVyKHRydWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaGFuZGxlcihMb2NhbFNlcnZpY2U6OmlzQXZhaWxhYmxlKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEhBVkUoVU5JRklFRF9BU0Nf
QVVUSF9VSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5LmNwcAppbmRleCAxY2EwZGUwNGUwMWNhYTAzNDdjNTUyOTE0OTFlZWJkMjQ3ZDQ3ZGI0
Li4xOTYyODU0YmRmNGE4MjNhYmJhYjA0ZjUwYmM1ZmQ3YTEzMGUxYjJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC01NSw2
ICs1NSw3IEBAIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Ojp+V2ViQXV0aGVudGlj
YXRvckNvb3JkaW5hdG9yUHJveHkoKQogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LndlYlBhZ2VJRCgpKTsK
IH0KIAorI2lmICFIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiB2b2lkIFdlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlhbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
ZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4X3Q+JiYgaGFzaCwgUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlLCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQogewogICAg
IGhhbmRsZVJlcXVlc3QoeyBXVEZNb3ZlKGhhc2gpLCBXVEZNb3ZlKG9wdGlvbnMpLCBtYWtlV2Vh
a1B0cihtX3dlYlBhZ2VQcm94eSksIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZh
aWxhYmxlLCBudWxscHRyLCBHbG9iYWxGcmFtZUlkZW50aWZpZXIgeyBtX3dlYlBhZ2VQcm94eS53
ZWJQYWdlSUQoKSwgZnJhbWVJZCB9LCBXVEZNb3ZlKGZyYW1lSW5mbyksIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSwgU3RyaW5nKCksIG51bGxwdHIgfSwgV1RGTW92ZShoYW5kbGVyKSk7CkBAIC02NCw2
ICs2NSw3IEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmdldEFzc2Vy
dGlvbihGcmFtZUlkZW50aWZpZXIgZnJhbWVJZCwgRnJhCiB7CiAgICAgaGFuZGxlUmVxdWVzdCh7
IFdURk1vdmUoaGFzaCksIFdURk1vdmUob3B0aW9ucyksIG1ha2VXZWFrUHRyKG1fd2ViUGFnZVBy
b3h5KSwgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIs
IEdsb2JhbEZyYW1lSWRlbnRpZmllciB7IG1fd2ViUGFnZVByb3h5LndlYlBhZ2VJRCgpLCBmcmFt
ZUlkIH0sIFdURk1vdmUoZnJhbWVJbmZvKSwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBTdHJpbmco
KSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGhhbmRsZXIpKTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0
aW9uUmVxdWVzdERhdGEmJiBkYXRhLCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVy
KQogewpAQCAtNzgsMTAgKzgwLDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHk6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0CiAgICAgbV93
ZWJQYWdlUHJveHkud2Vic2l0ZURhdGFTdG9yZSgpLmF1dGhlbnRpY2F0b3JNYW5hZ2VyKCkuaGFu
ZGxlUmVxdWVzdChXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKKyNpZiAh
SEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JQcm94eTo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKFF1
ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQogewogICAgIGhhbmRsZXIoTG9jYWxTZXJ2
aWNlOjppc0F2YWlsYWJsZSgpKTsKIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgK
aW5kZXggNTNmOTczYjVhNzRkYjJjNjlhMzZjMmFlNmIyY2NkODc5ZTQyMmI4YS4uNjY4NzdmZDEw
NjhhNGU1MzFhOGQ4MjUwMjJkMzkxYzA0Njg4NDliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oCkBAIC00MSw2ICs0MSwxMSBAQCBzdHJ1
Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOwogc3RydWN0IFNlY3VyaXR5T3Jp
Z2luRGF0YTsKIH0KIAorI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKK09CSkNfQ0xBU1Mg
QVNDQXV0aG9yaXphdGlvblJlbW90ZVByZXNlbnRlcjsKK09CSkNfQ0xBU1MgQVNDQ3JlZGVudGlh
bFJlcXVlc3RDb250ZXh0OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBX
ZWJQYWdlUHJveHk7CkBAIC00OCw3ICs1Myw3IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVj
dCBGcmFtZUluZm9EYXRhOwogc3RydWN0IFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGE7CiAK
LWNsYXNzIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5IDogcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eSA6
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHkpOwogcHVibGljOgpAQCAtNzAsNiArNzUsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhh
bmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYmLCBSZXF1ZXN0Q29tcGxl
dGlvbkhhbmRsZXImJik7CiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OworCisj
aWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUmV0
YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4sIFJlcXVlc3RDb21wbGV0aW9uSGFu
ZGxlciYmKTsKKyAgICBSZXRhaW5QdHI8QVNDQXV0aG9yaXphdGlvblJlbW90ZVByZXNlbnRlcj4g
bV9wcmVzZW50ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDFjNjk1
MTViYjE4MmRmYTVhNTQwNzc0ODY0ZjczZWMyOThjNDFkOS4uZjIxMWRhNGRhZTg5YmExNTEyOWFh
OTEzMWIyMzc1MTc5MWMzMzgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNTIwLDYgKzI1MjAsNyBAQAogCQkwN0UxOUYwOTIzRDUz
M0JBMDA5NEZGQjQgLyogVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0VHJhY2tQcml2YXRlUmVtb3RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
NjdENkE1RkU4NDAzMDdDMDJBQUMwNyAvKiBBcHBLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5h
bWUgPSBBcHBLaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
QXBwS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMDg5QzE2
NjdGRTg0MTE1OEMwMkFBQzA3IC8qIGVuICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC5zdHJpbmdzOyBu
YW1lID0gZW47IHBhdGggPSBlbi5scHJvai9JbmZvUGxpc3Quc3RyaW5nczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMERDQkY0RDkyNkUyRUQzMjAwRUEwRTA3IC8qIFdlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBFOTdENzRDMjAwRThGRjMwMEJGNjY0MyAvKiBTYWZlQnJvd3NpbmdTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2FmZUJyb3dzaW5nU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBF
REU4NTAyMjAwNEU3NDkwMDAzMDU2MCAvKiBXZWJzaXRlUG9wVXBQb2xpY3kuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2Vic2l0ZVBvcFVwUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMDQxNTk4MjNDN0NDNzIwMDYwQTNFMiAvKiBXS1Njcm9sbFZpZXdNYWMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tTY3JvbGxWaWV3TWFjLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05MzA1LDYgKzkzMDYsNyBAQAogCQkJCTU3MERBQUFEMjMwMjZGNUMw
MEU4RkMwNCAvKiBOZmNTZXJ2aWNlLm1tICovLAogCQkJCTU3N0ZGNzgzMjM0NkVDQUEwMDRFREZC
OSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi8sCiAJCQkJNTc3RkY3ODQyMzQ2
RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0gKi8sCisJCQkJ
MERDQkY0RDkyNkUyRUQzMjAwRUEwRTA3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclBy
b3h5Lm1tICovLAogCQkJCTU3NzczOTkzMjU4MDM4OEYwMDU5MzQ4QiAvKiBXS0FTQ0F1dGhvcml6
YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5oICovLAogCQkJCTU3NzczOTk0MjU4MDM4OEYwMDU5MzQ4
QiAvKiBXS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbSAqLywKIAkJCQk1NzBE
QUFDNDIzMDM3RjdFMDBFOEZDMDQgLyogV0tORlJlYWRlclNlc3Npb25EZWxlZ2F0ZS5oICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAppbmRleCBk
NTQ1OGVkYmY0NDUxY2E1ODhlOWRmZTQ3YjJjYWVhYzU1NTVhNjljLi4xYjEyODA5Zjg0OTE5OGY5
YTNjNzI2ZjBiYTY2MWMzODFkNzliZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcApAQCAtNjksNyArNjksMTIgQEAgdm9pZCBXZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3I6Om1ha2VDcmVkZW50aWFsKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29u
c3QgU2VjdXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShmcmFtZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSk7
Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkF1
dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpKSB7CisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRI
X1VJKQorICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gZmFsc2U7CisjZWxzZQorICAgIGJv
b2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKTsKKyNlbmRpZgorICAgIGlm
ICghdXNlV2ViQXV0aG5Qcm9jZXNzKSB7CiAgICAgICAgIG1fd2ViUGFnZS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpNYWtlQ3Jl
ZGVudGlhbCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBoYXNoLCBvcHRp
b25zLCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSksIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtODYsNyArOTEsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3I6OmdldEFzc2VydGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNlY3Vy
aXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9
IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShmcmFtZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSk7Ci0gICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRp
Y2F0aW9uTW9kZXJuRW5hYmxlZCgpKSB7CisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQor
ICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gZmFsc2U7CisjZWxzZQorICAgIGJvb2wgdXNl
V2ViQXV0aG5Qcm9jZXNzID0gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKTsKKyNlbmRpZgorICAgIGlmICghdXNl
V2ViQXV0aG5Qcm9jZXNzKSB7CiAgICAgICAgIG1fd2ViUGFnZS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpHZXRBc3NlcnRpb24o
d2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgaGFzaCwgb3B0aW9ucywgaXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTk4LDcgKzEwOCwxMiBAQCB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgU2VjdXJpdAogCiB2
b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1B
dXRoZW50aWNhdG9yQXZhaWxhYmxlKFF1ZXJ5Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQog
ewotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
dXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVU
SF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBi
b29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBp
ZiAoIXVzZVdlYkF1dGhuUHJvY2VzcykgewogICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6SXNVc2Vy
VmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKCksIFdURk1vdmUoaGFuZGxl
cikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI3ZGEwYzZjOTE2YTk3NTE1NDgzOGU0M2MwMTAxNDk4
NTU0OTI1ZGYuLjBmNzA2MWIxMzZmODcyYWMzOGUyOTZkMzM0ZTU3OGY5NmMwY2Q3NDUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAyMS0wOS0yOCAgR2FycmV0dCBEYXZpZHNvbiAgPGdhcnJldHRfZGF2aWRzb25AYXBw
bGUuY29tPgorCisgICAgICAgIEFkb3B0IHBsYXRmb3JtIFVJIGZvciBXZWJBdXRobgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwOTA2CisgICAgICAg
IDxyZGFyOi8vNzQ2NTk1NTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIHRoZSB0aW1lb3V0IHRlc3QgdG8gZXhwZWN0IE5vdEFsbG93ZWRF
cnJvciwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGVycm9yCisgICAgICAgIGNvZGUgd2hlbiBhIHRp
bWVvdXQgb2NjdXJzLCBwZXIgU3RlcCAyMSBvZiB0aGUgIkNyZWF0ZSBhIE5ldyBDcmVkZW50aWFs
IgorICAgICAgICBhbGdvcml0aG0uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAyMS0xMC0wNSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyODM0NzYpOiBbIGlPUyBtYWNPUyBEZWJ1
ZyBdIFRlc3RXVEYgZmFpbHVyZXMgaW4gUmV0YWluUHRyQVJDIGFuZCBUeXBlQ2FzdHNDb2NvYUFS
QwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDZlOTI2MTdhNWE0YWFm
NjU1ZTU0M2I0MmM0OWZhNGE2MmU4NTE1NDguLjlmMTc2NDYzY2NlZTUyMzZiZThlOGM3ODFmNGNm
Y2ZlYjM5ZDYwN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTM0
LDYgKzM0LDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNp
bXBvcnQgPExvY2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9BdXRoZW50aWNhdG9yQXR0YWNobWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVl
c3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KQEAg
LTE4MjUsNyArMTgyNiw3IEBAIFRFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgTWFrZUNyZWRl
bnRpYWxTUElUaW1lb3V0KQogCiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKICAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7Ci0gICAgICAgIEVYUEVD
VF9FUShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgICAgIEVYUEVDVF9FUShlcnJv
ci5jb2RlLCBOb3RBbGxvd2VkRXJyb3IpOwogICAgIH1dOwogICAgIFV0aWw6OnJ1bigmd2ViQXV0
aGVudGljYXRpb25QYW5lbFJhbik7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440851</attachid>
            <date>2021-10-11 16:23:20 -0700</date>
            <delta_ts>2021-10-12 16:09:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20211011162319.patch</filename>
            <type>text/plain</type>
            <size>44303</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzOTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFhZGRjY2I5NmNjOThlNDll
MGJiM2ZiMTQ4NmY5ZTIxYzUyNjRmMDQuLmRkZTg3ZjUzNWVjZjdhYmNhZDgwNGE5ZDYyZGYzZWU2
MTZmZjRiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyB0aGUgcGxhdGZvcm0ncyBVSSBmb3IgV2ViQXV0aG4gdHJhbnNhY3Rpb25zLCB3aGVyZSBhdmFp
bGFibGUsCisgICAgICAgIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgV2ViQXV0aG4g
cHJvY2Vzcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmg6Cisg
ICAgICAgIFdoZW4gcG9zc2libGUsIHN3aXRjaCB0byBpbXBvcnRpbmcgdGhlIHVtYnJlbGxhIGhl
YWRlciBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIHJlZGVjbGFyaW5nIHRoZSBlbnRpcmUg
aW50ZXJmYWNlLgorCisgICAgICAgIEFsc28sIGZpeCBhbiBleGlzdGluZyBidWcgY2F1c2VkIGJ5
IHRoZSByZWRlY2xhcmF0aW9uLCB3aGVyZSB0aGUKKyAgICAgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZCBlbnVtIHdhcyByZW5hbWVkLgorCisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgQnVpbGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAo
LVtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aENoYWxsZW5nZTpv
cmlnaW46b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgUmV0dXJuIHRoZSBm
dWxsIGVycm9yIHRvIHRoZSBkZWxlZ2F0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlU29mdExpbmsubW06CisgICAgICAgIEFkZCBhbGwgb2YgdGhlIG5ldyByZXF1
aXJlZCBjbGFzc2VzIGZvciBzb2Z0IGxpbmtpbmcsIGFuZCBzb3J0IHRoZSBsaXN0LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9BcnJheUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvTlNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6dG9OU1N0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OnRvRXhjZXB0aW9uQ29kZSk6CisgICAgICAgIChXZWJL
aXQ6OnRvQVNDRGVzY3JpcHRvcik6CisgICAgICAgIEhlbHBlciBtZXRob2RzIGZvciBjb252ZXJ0
aW5nIGJldHdlZW4gV0sgYW5kIEFTQyB0eXBlcy4KKworICAgICAgICAoV2ViS2l0Ojpjb25maWd1
cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OmNvbmZpZ3Vy
YXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIENyZWF0ZSBhbmQgY29uZmln
dXJlIGFuIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCBmcm9tIHRoZSBwcm92aWRlZCBvcHRp
b25zLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAgICBDb25maWd1cmUgYW5kIHBlcmZv
cm0gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgLSBDcmVhdGUgYSBwcm94eSB0
byB0YWxrIHRvIEF1dGhlbnRpY2F0aW9uU2VydmljZXNBZ2VudC4KKyAgICAgICAgLSBBc2sgdGhl
IHByb3h5IGlmIHdlJ3JlIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdC4KKyAgICAgICAg
ICAtIElmIG5vLCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAgICAgLSBJZiB5ZXMsIGNyZWF0ZSBw
cmVzZW50ZXIgYW5kIHByZXNlbnQgb3ZlciB0aGUgd2ViIHBhZ2UncyB3aW5kb3cuCisgICAgICAg
IC0gV2hlbiB0aGUgcmVxdWVzdCBpZiBmaW5pc2hlZCwgY2hlY2sgdGhlIGtpbmQgb2YgY3JlZGVu
dGlhbCB3ZSBnb3QsIGFuZCByZXR1cm4KKyAgICAgICAgdGhlIHJlbGV2YW50IEF1dGhlbnRpY2F0
b3JSZXNwb25zZURhdGEvQXV0aGVudGljYXRvckF0dGFjaG1lbnQuCisgICAgICAgIC0gSWYgdGhl
IHJlcXVlc3Qgd2FzIGNhbmNlbGVkIG9yIGZhaWxlZCwgYGNyZWRlbnRpYWxgIHdpbGwgYmUgbmls
IGFuZCBgZXJyb3JgIHdpbGwKKyAgICAgICAgYmUgbm9uLW5pbC4gSW4gbW9zdCBjYXNlcywgdGhl
IGVycm9yIHdpbGwgYmUgV0tFcnJvckRvbWFpbiwgd2hpY2ggd2UgY2FuIGNvbnZlcnQKKyAgICAg
ICAgZGlyZWN0bHkgdG8gRXhjZXB0aW9uRGF0YS4gVGhlIG9uZSBleGNlcHRpb24gaXMgdGhlIHVz
ZXIgY2FuY2VsZWQgdGhlIHJlcXVlc3QgaW4KKyAgICAgICAgdGhlIHBsYXRmb3JtIFVJLCBzbyBy
ZXR1cm4gdGhlIGFwcHJvcHJpYXRlIEV4Y2VwdGlvbkRhdGEgaW4gdGhhdCBjYXNlLiBUaGUgZmlu
YWwKKyAgICAgICAgIk9wZXJhdGlvbiBmYWlsZWQuIiBjYXNlIGNvdmVycyBhbnl0aGluZyBlbHNl
IHVuZXhwZWN0ZWQgaGFwcGVuaW5nLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JB
dmFpbGFibGUpOgorICAgICAgICBJZiArc2hvdWxkVXNlQWx0ZXJuYXRlQ3JlZGVudGlhbFN0b3Jl
IGlzIHRydWUsIHRoaXMgaXMgYWx3YXlzIHRydWUuIE90aGVyd2lzZSwKKyAgICAgICAgZmFsbCBi
YWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW06Cisg
ICAgICAgICgtW1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlIGF1dGhvcml6YXRp
b25QcmVzZW50ZXI6Y3JlZGVudGlhbFJlcXVlc3RlZEZvckxvZ2luQ2hvaWNlOmF1dGhlbnRpY2F0
ZWRDb250ZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBVc2UgdGhlIG5ldyBuYW1l
IG9mIHRoZSBlbnVtLCB1bmNvbmRpdGlvbmFsbHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAg
ICAgICBXcmFwIGEgZmV3IG1ldGhvZHMgaW4gdGhlIG5ldyBmbGFnLiBXaGVuIHRoZSBmbGFnIGlz
IG9uLCB0aGVzZSBtZXRob2RzIHdpbGwgZXhpc3QKKyAgICAgICAgaW4gV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgTmV3IGl2
YXIgYW5kIG1ldGhvZCBmb3IgdGhlIHBsYXRmb3JtIHByZXNlbnRlci4KKyAgICAgICAgTWFrZSB0
aGUgc3VwZXJjbGFzcyBwdWJsaWMgc28gd2UgY2FuIHVzZSB0aGUgV2Vha1B0ciBpbmhlcml0YW5j
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tIb3ZlclBsYXR0ZXJQYXJhbWV0ZXJzLm1t
OgorICAgICAgICBBZGQgc29tZSBtaXNzaW5nIGltcG9ydHMgc2luY2UgdGhpcyBmaWxlIGdvdCBw
dXNoZWQgb2ZmIHRoZSBlbmQgb2YKKyAgICAgICAgVW5pZmllZFNvdXJjZTQ3LW1tLm1tLgorCisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCB0
aGUgbmV3IGZpbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHA6CisgICAgICAgIFdoZW4gcGxhdGZvcm0gVUkg
aXMgYXZhaWxhYmxlLCBwcmVmZXIgaXQgb3ZlciB0aGUgV2ViQXV0aG4gcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjptYWtlQ3JlZGVudGlhbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6Z2V0QXNzZXJ0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjppc1Vz
ZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUpOgorCiAyMDIxLTEwLTEx
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJv
ZHVjZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgYW5kIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0NvY29hL0F1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3Nw
aS9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNQSS5oCmluZGV4IDdjMzNjYmViMWE0
NTQwZmQ1NWQ3NTE0MmQyNGNhYjdkODc0YWM3MjAuLmYyNzA4ZTZlMWYwMjA3NTVmZjkzMzI3Zjcx
ZGZjMDUzZTRkNzczMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0Nv
Y29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaApAQCAtMjUs
MTkgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBIQVZFKEFTQ19BVVRIX1VJKQotCi0v
LyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MjQwNjU4NT46IFVuY29tbWVudCB0aGUgaGVhZGVycyBh
ZnRlciB0aGUgU0RLIGJlY29tZXMgc3RhYmxlLgotLy8jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLS8vCi0vLy8vIEZJWE1FKDIxOTc2Nyk6IFJlbW92ZSBBU0NBcHBsZUlEQ3JlZGVudGlhbC5o
LgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBcHBsZUlEQ3JlZGVu
dGlhbC5oPgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBdXRob3Jp
emF0aW9uUHJlc2VudGF0aW9uQ29udGV4dC5oPgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNl
cnZpY2VzQ29yZS9BU0NBdXRob3JpemF0aW9uUHJlc2VudGVyLmg+Ci0vLyNpbXBvcnQgPEF1dGhl
bnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbExvZ2lu
Q2hvaWNlLmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ1NlY3Vy
aXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlLmg+Ci0vLwotLy8jZWxzZQorI2lm
IEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlUHJpdmF0ZS5oPgorI2VsaWYgSEFWRShB
U0NfQVVUSF9VSSkKIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIApAQCAtMTA4LDEwICs5OCwx
MCBAQCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9u
Q29udGV4dERhdGFLZXk7CiAKIEBlbmQKIAotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7Ci0gICAgQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kUmVnaXN0cmF0aW9u
LAotICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZEFz
c2VydGlvbiwKLSAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2lj
ZUtpbmRBc3NlcnRpb25QbGFjZWhvbGRlciwKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFT
Q1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmQpIHsKKyAgICBBU0NTZWN1cml0eUtl
eVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kUmVnaXN0cmF0aW9uLAorICAgIEFTQ1NlY3VyaXR5S2V5
UHVibGljS2V5Q3JlZGVudGlhbEtpbmRBc3NlcnRpb24sCisgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvblBsYWNlaG9sZGVyLAogfTsKIAogQGludGVyZmFj
ZSBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIDogTlNPYmplY3QgPE5TU2Vj
dXJlQ29kaW5nPgpAQCAtMTM2LDcgKzEyNiw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZCkgewogQHBy
b3BlcnR5IChub25hdG9taWMsIG51bGxhYmxlLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKm5h
bWU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBOU1N0
cmluZyAqZGlzcGxheU5hbWU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRv
bmx5LCBjb3B5KSBOU0RhdGEgKnVzZXJIYW5kbGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZCBs
b2dpbkNob2ljZUtpbmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFTQ1NlY3Vy
aXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmQgY3JlZGVudGlhbEtpbmQ7CiAKICsgKGluc3Rh
bmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CiAtIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFW
QUlMQUJMRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAzNzIyZWY4ZjVmM2VjN2MwY2FiZjVm
NzA5ZTI5ZDU2YmRjYzcxYjczLi5jMjc0NjhiOTg0OGJmYWFmZTQ5MDliZjEzMjk3MWUyNmRiODgz
YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01OTIsNiArNTkyLDcgQEAgVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL05mY1NlcnZpY2UubW0KIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbQog
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLTkZSZWFkZXJTZXNzaW9uRGVsZWdh
dGUubW0KIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50Lm1tCitVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0
aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0KIAogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL01vY2svTW9ja0xvY2FsU2VydmljZS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQpp
bmRleCAwMzg2MzJjOTBhMDRiNWIxZjM4YzBjM2U1MTFkOWI3YWYzM2Q3ZmYxLi41ODZkMWVjYTM0
YjI0N2Q0Yzk5OTk4NTg0ZGY4ZTMyMTNlMTA2NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbQpAQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2U+IHdrQXV0aGVudGljYXRvckF0dGVzdGF0aW9uCiAgICAgICAg
IFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSwgY2xpZW50RGF0YUpTT04u
Z2V0KCksIHJlc3BvbnNlLT5hdHRhY2htZW50KCkpLmdldCgpLCBuaWwpOwogICAgICAgICB9LCBb
Jl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSB7Ci0gICAgICAgICAg
ICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29k
ZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgICAgIGhhbmRsZXIobmls
LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOmV4Y2VwdGlvbi5j
b2RlIHVzZXJJbmZvOkB7IE5TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IGV4Y2VwdGlvbi5tZXNz
YWdlIH1dKTsKICAgICAgICAgfSk7CiAgICAgfTsKICAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3Qo
eyBXVEZNb3ZlKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3Jl
Q3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIHN0ZDo6bnVs
bG9wdCwgeyB9LCB0cnVlLCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9D
b2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2Vz
Q29yZVNvZnRMaW5rLmgKaW5kZXggYzkyZjkwMDE3ZjUzOWE5NTM0MjdkZTMxYThmMzYyOThjYzEx
MWM2ZS4uYjNhNzljMDdhYmEyY2JhZmVlZmVmYzZjNjdjYWUxMzZmNzIyMjUxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29m
dExpbmsuaApAQCAtMzIsMTQgKzMyLDIzIEBAIFNPRlRfTElOS19GUkFNRVdPUktfRk9SX0hFQURF
UihXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5LX0NMQVNT
X0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NXZWJLaXRTUElTdXBwb3J0KTsKIAotI2lmIEhBVkUoQVND
X0FVVEhfVUkpCisjaWYgSEFWRShBU0NfQVVUSF9VSSkgfHwgSEFWRShVTklGSUVEX0FTQ19BVVRI
X1VJKQogCi1TT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6YXRp
b25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBZ2Vu
dFByb3h5KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXBwbGVJRENy
ZWRlbnRpYWwpOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBdXRob3Jp
emF0aW9uUHJlc2VudGF0aW9uQ29udGV4dCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihX
ZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9I
RUFERVIoV2ViS2l0LCBBU0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVyKTsKK1NPRlRfTElO
S19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0KTsK
K1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUGxhdGZvcm1QdWJsaWNLZXlD
cmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwg
QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UpOwotU09GVF9MSU5LX0NM
QVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxM
b2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0FwcGxl
SURDcmVkZW50aWFsKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUGxh
dGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uKTsKK1NPRlRfTElOS19DTEFTU19G
T1JfSEVBREVSKFdlYktpdCwgQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMp
OwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwg
QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9I
RUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24p
OworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1Ymxp
Y0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihX
ZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbik7CiAK
IFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2
aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbiwgTlNFcnJvckRvbWFpbik7CiAj
ZGVmaW5lIEFTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbiBXZWJLaXQ6OmdldF9BdXRoZW50aWNh
dGlvblNlcnZpY2VzQ29yZV9BU0NBdXRob3JpemF0aW9uRXJyb3JEb21haW4oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVu
dGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29mdExp
bmsubW0KaW5kZXggYjkzMTNjODZkZDdkYzUwMDA2NjJhYWJjM2Q1MzIzOGVhN2NmNTJjYi4uYTIz
YWM1M2E3YmMxOWEyZTI1MjVlZDM2OTIwZDBkZGMzNGYzMjg2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmVTb2Z0TGluay5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1t
CkBAIC0zMiwxNCArMzIsMjMgQEAgU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX0ZPUl9TT1VS
Q0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSk7CiAKIFNPRlRfTElOS19DTEFT
U19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1dlYktp
dFNQSVN1cHBvcnQpOwogCi0jaWYgSEFWRShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19BVVRI
X1VJKSB8fCBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19GT1Jf
U09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRp
b25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50
aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQWdlbnRQcm94eSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9S
X1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlEQ3Jl
ZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dCk7CitT
T0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXND
b3JlLCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyKTsKK1NPRlRfTElOS19DTEFTU19GT1JfU09V
UkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25S
ZW1vdGVQcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRo
ZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0KTsKK1NP
RlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0Nv
cmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CiBTT0ZUX0xJTktf
Q0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQ
bGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1Nf
Rk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0
eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9S
X1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlEQ3Jl
ZGVudGlhbCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0
aW9uU2VydmljZXNDb3JlLCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRp
b24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNl
cnZpY2VzQ29yZSwgQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMpOwogU09G
VF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29y
ZSwgQVNDUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyk7CitTT0ZUX0xJTktfQ0xB
U1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShX
ZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1YmxpY0tl
eUNyZWRlbnRpYWxBc3NlcnRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0
LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVk
ZW50aWFsTG9naW5DaG9pY2UpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBB
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50
aWFsUmVnaXN0cmF0aW9uKTsKIAogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViS2l0
LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWlu
LCBOU0Vycm9yRG9tYWluKTsKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYktpdCwg
QXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BJTlZhbGlkYXRpb25SZXN1bHRLZXksIE5T
U3RyaW5nKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCmluZGV4IDdjMjA4ZmYwYWQ1NzAwZWMxN2RiNDQz
OGI2ODM0OWE0M2NkMjZhOTkuLmYyOTUwZmUzMDY5MTVmMDFjN2RhYjhiMDI5MGQ3MGEzZWM3OTAz
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9yaXph
dGlvblByZXNlbnRlckRlbGVnYXRlLm1tCkBAIC03OCw3ICs3OCw3IEBAIE5TX0FTU1VNRV9OT05O
VUxMX0JFR0lOCiAgICAgaWYgKFtsb2dpbkNob2ljZSBpc0tpbmRPZkNsYXNzOldlYktpdDo6Z2V0
QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VDbGFzcygpXSkgewog
ICAgICAgICBhdXRvICpzZWN1cml0eUtleUxvZ2luQ2hvaWNlID0gKEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlICopbG9naW5DaG9pY2U7CiAKLSAgICAgICAgaWYg
KFtzZWN1cml0eUtleUxvZ2luQ2hvaWNlIGxvZ2luQ2hvaWNlS2luZF0gPT0gQVNDU2VjdXJpdHlL
ZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kQXNzZXJ0aW9uKSB7CisgICAgICAg
IGlmIChbc2VjdXJpdHlLZXlMb2dpbkNob2ljZSBjcmVkZW50aWFsS2luZF0gPT0gQVNDU2VjdXJp
dHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvbikgewogICAgICAgICAgICAgU3Ry
aW5nIGxvZ2luQ2hvaWNlTmFtZSA9IHNlY3VyaXR5S2V5TG9naW5DaG9pY2UubmFtZTsKICAgICAg
ICAgICAgIFtzZWxmIGRpc3BhdGNoQ29vcmRpbmF0b3JDYWxsYmFjazpbbG9naW5DaG9pY2VOYW1l
ID0gV1RGTW92ZShsb2dpbkNob2ljZU5hbWUpXSAoV2ViS2l0OjpBdXRoZW50aWNhdG9yUHJlc2Vu
dGVyQ29vcmRpbmF0b3ImIGNvb3JkaW5hdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBj
b29yZGluYXRvci5kaWRTZWxlY3RBc3NlcnRpb25SZXNwb25zZShsb2dpbkNob2ljZU5hbWUsIG5p
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNjI1NzZhMjNlZGZlMzNiYzRkNzUzOGZhOWI2
OTUzOWUxOTNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5t
bQpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FV
VEhfVUkpCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yUHJveHkuaCIKKworI2ltcG9ydCAiTG9jYWxTZXJ2aWNlLmgiCisjaW1wb3J0ICJX
S0Vycm9yLmgiCisjaW1wb3J0ICJXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgiCisjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXMvQVND
T1NFQ29uc3RhbnRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JBdHRhY2htZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKwor
I2ltcG9ydCAiQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgaW5saW5lIFJl
ZjxBcnJheUJ1ZmZlcj4gdG9BcnJheUJ1ZmZlcihOU0RhdGEgKmRhdGEpCit7CisgICAgcmV0dXJu
IEFycmF5QnVmZmVyOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0
YS5ieXRlcyksIGRhdGEubGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNE
YXRhPiB0b05TRGF0YShjb25zdCBCdWZmZXJTb3VyY2UmIGRhdGEpCit7CisgICAgcmV0dXJuIGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRh
dGEubGVuZ3RoKCldKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNEYXRhPiB0b05T
RGF0YShjb25zdCBWZWN0b3I8dWludDhfdD4gdmVjdG9yKQoreworICAgIHJldHVybiBhZG9wdE5T
KFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnZlY3Rvci5kYXRhKCkgbGVuZ3RoOnZlY3Rv
ci5zaXplKCldKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNTdHJpbmc+IHRvTlNT
dHJpbmcoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb25SZXF1aXJl
bWVudCkKK3sKKyAgICBzd2l0Y2ggKHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkgeworICAg
IGNhc2UgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZDoKKyAgICAgICAgcmV0
dXJuIEAicmVxdWlyZWQiOworICAgIGNhc2UgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpE
aXNjb3VyYWdlZDoKKyAgICAgICAgcmV0dXJuIEAiZGlzY291cmFnZWQiOworICAgIGNhc2UgVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBAInBy
ZWZlcnJlZCI7CisgICAgfQorCisgICAgcmV0dXJuIEAicHJlZmVycmVkIjsKK30KKworc3RhdGlj
IGlubGluZSBFeGNlcHRpb25Db2RlIHRvRXhjZXB0aW9uQ29kZShOU0ludGVnZXIgbnNFcnJvckNv
ZGUpCit7CisgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlID0gKEV4Y2VwdGlvbkNvZGUp
bnNFcnJvckNvZGU7CisKKyAgICBzd2l0Y2ggKGV4Y2VwdGlvbkNvZGUpIHsKKyAgICBjYXNlIElu
ZGV4U2l6ZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEhpZXJhcmNoeVJlcXVlc3RFcnJv
cjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBXcm9uZ0RvY3VtZW50RXJyb3I6IEZBTExUSFJPVUdI
OworICAgIGNhc2UgSW52YWxpZENoYXJhY3RlckVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIE5vdEZv
dW5kRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm90U3VwcG9ydGVkRXJyb3I6IEZBTExU
SFJPVUdIOworICAgIGNhc2UgSW5Vc2VBdHRyaWJ1dGVFcnJvcjogRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBJbnZhbGlkU3RhdGVFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBTeW50YXhFcnJv
cjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6IEZBTExU
SFJPVUdIOworICAgIGNhc2UgTmFtZXNwYWNlRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2Ug
SW52YWxpZEFjY2Vzc0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFR5cGVNaXNtYXRjaEVy
cm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFNlY3VyaXR5RXJyb3I6IEZBTExUSFJPVUdIOwor
ICAgIGNhc2UgTmV0d29ya0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEFib3J0RXJyb3I6
IEZBTExUSFJPVUdIOworICAgIGNhc2UgVVJMTWlzbWF0Y2hFcnJvcjogRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBRdW90YUV4Y2VlZGVkRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgVGltZW91
dEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEludmFsaWROb2RlVHlwZUVycm9yOiBGQUxM
VEhST1VHSDsKKyAgICBjYXNlIERhdGFDbG9uZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IEVuY29kaW5nRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm90UmVhZGFibGVFcnJvcjog
RkFMTFRIUk9VR0g7CisgICAgY2FzZSBVbmtub3duRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNh
c2UgQ29uc3RyYWludEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIERhdGFFcnJvcjogRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IEZBTExUSFJPVUdI
OworICAgIGNhc2UgUmVhZG9ubHlFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBWZXJzaW9u
RXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgT3BlcmF0aW9uRXJyb3I6IEZBTExUSFJPVUdI
OworICAgIGNhc2UgTm90QWxsb3dlZEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJhbmdl
RXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgVHlwZUVycm9yOiBGQUxMVEhST1VHSDsKKyAg
ICBjYXNlIEpTU3ludGF4RXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgU3RhY2tPdmVyZmxv
d0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIE91dE9mTWVtb3J5RXJyb3I6IEZBTExUSFJP
VUdIOworICAgIGNhc2UgRXhpc3RpbmdFeGNlcHRpb25FcnJvcjoKKyAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbkNvZGU7CisgICAgfQorCisgICAgcmV0dXJuIE5vdEFsbG93ZWRFcnJvcjsKK30KKwor
c3RhdGljIGlubGluZSBSZXRhaW5QdHI8QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+
IHRvQVNDRGVzY3JpcHRvcihQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9y
KQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1N0cmluZyAqPj4gdHJhbnNwb3J0
czsKKyAgICBzaXplX3QgdHJhbnNwb3J0Q291bnQgPSBkZXNjcmlwdG9yLnRyYW5zcG9ydHMuc2l6
ZSgpOworICAgIGlmICh0cmFuc3BvcnRDb3VudCkgeworICAgICAgICB0cmFuc3BvcnRzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRyYW5zcG9ydENv
dW50XSk7CisKKyAgICAgICAgZm9yIChBdXRoZW50aWNhdG9yVHJhbnNwb3J0IHRyYW5zcG9ydCA6
IGRlc2NyaXB0b3IudHJhbnNwb3J0cykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnRyYW5zcG9y
dFN0cmluZyA9IG5pbDsKKyAgICAgICAgICAgIHN3aXRjaCAodHJhbnNwb3J0KSB7CisgICAgICAg
ICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjoKKyAgICAgICAgICAgICAgICB0
cmFuc3BvcnRTdHJpbmcgPSBAInVzYiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYzoKKyAgICAgICAgICAgICAgICB0
cmFuc3BvcnRTdHJpbmcgPSBAIm5mYyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkJsZToKKyAgICAgICAgICAgICAgICB0
cmFuc3BvcnRTdHJpbmcgPSBAImJsZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsOgorICAgICAgICAgICAg
ICAgIHRyYW5zcG9ydFN0cmluZyA9IEAiaW50ZXJuYWwiOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNwb3J0U3RyaW5nKQorICAg
ICAgICAgICAgICAgIFt0cmFuc3BvcnRzIGFkZE9iamVjdDp0cmFuc3BvcnRTdHJpbmddOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jQVNDUHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3JJbnN0YW5jZSgpIGluaXRXaXRoQ3JlZGVudGlhbElEOnRvTlNEYXRh
KGRlc2NyaXB0b3IuaWRWZWN0b3IpLmdldCgpIHRyYW5zcG9ydHM6dHJhbnNwb3J0cy5nZXQoKV0p
OworfQorCitzdGF0aWMgUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4gY29u
ZmlndXJlUmVnaXN0cmF0aW9uUmVxdWVzdENvbnRleHQoY29uc3QgUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU0NDcmVkZW50aWFsUmVxdWVzdFR5
cGVzIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVibGlj
S2V5UmVnaXN0cmF0aW9uIHwgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJs
aWNLZXlSZWdpc3RyYXRpb247CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVzZXJWZXJpZmlj
YXRpb247CisgICAgYm9vbCBzaG91bGRSZXF1aXJlUmVzaWRlbnRLZXkgPSBmYWxzZTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb25Dcml0ZXJpYT4gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IG9wdGlvbnMu
YXV0aGVudGljYXRvclNlbGVjdGlvbjsKKyAgICBpZiAoYXV0aGVudGljYXRvclNlbGVjdGlvbikg
eworICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBhdHRhY2ht
ZW50ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQ7Cisg
ICAgICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9y
bSkKKyAgICAgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBs
YXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uOworICAgICAgICBlbHNlIGlmIChhdHRhY2htZW50
ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtKQorICAgICAgICAgICAg
cmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNL
ZXlSZWdpc3RyYXRpb247CisKKyAgICAgICAgdXNlclZlcmlmaWNhdGlvbiA9IHRvTlNTdHJpbmco
YXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbik7CisKKyAgICAgICAgc2hv
dWxkUmVxdWlyZVJlc2lkZW50S2V5ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJl
c2lkZW50S2V5OworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdENvbnRleHQgPSBhZG9wdE5TKFth
bGxvY0FTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhSZXF1ZXN0
VHlwZXM6cmVxdWVzdFR5cGVzXSk7CisgICAgW3JlcXVlc3RDb250ZXh0IHNldFJlbHlpbmdQYXJ0
eUlkZW50aWZpZXI6b3B0aW9ucy5ycC5pZF07CisKKyAgICBhdXRvIGNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgPSBhZG9wdE5TKFthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnNJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
IHNldENoYWxsZW5nZTp0b05TRGF0YShvcHRpb25zLmNoYWxsZW5nZSkuZ2V0KCldOworICAgIFtj
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFJlbHlpbmdQYXJ0eUlkZW50aWZpZXI6b3B0aW9u
cy5ycC5pZF07CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0VXNlck5hbWU6b3B0
aW9ucy51c2VyLm5hbWVdOworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFVzZXJJ
ZGVudGlmaWVyOnRvTlNEYXRhKG9wdGlvbnMudXNlci5pZCkuZ2V0KCldOworICAgIFtjcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zIHNldFVzZXJEaXNwbGF5TmFtZTpvcHRpb25zLnVzZXIuZGlzcGxh
eU5hbWVdOworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFVzZXJWZXJpZmljYXRp
b25QcmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24uZ2V0KCldOworICAgIFtjcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zIHNldFNob3VsZFJlcXVpcmVSZXNpZGVudEtleTpzaG91bGRSZXF1aXJlUmVz
aWRlbnRLZXldOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PE5TTnVtYmVyICo+PiBz
dXBwb3J0ZWRBbGdvcml0aG1JZGVudGlmaWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpXSk7
CisgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJz
IGFsZ29yaXRobVBhcmFtZXRlciA6IG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcykKKyAgICAgICAg
W3N1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzIGFkZE9iamVjdDpAKGFsZ29yaXRobVBhcmFt
ZXRlci5hbGcpXTsKKworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFN1cHBvcnRl
ZEFsZ29yaXRobUlkZW50aWZpZXJzOnN1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzLmdldCgp
XTsKKworICAgIHNpemVfdCBleGNsdWRlZENyZWRlbnRpYWxDb3VudCA9IG9wdGlvbnMuZXhjbHVk
ZUNyZWRlbnRpYWxzLnNpemUoKTsKKyAgICBpZiAoZXhjbHVkZWRDcmVkZW50aWFsQ291bnQpIHsK
KyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PEFTQ1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yICo+PiBleGNsdWRlZENyZWRlbnRpYWxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmV4Y2x1ZGVkQ3JlZGVudGlhbENvdW50XSk7CisK
KyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9yIDog
b3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAgICAgICAgICBbZXhjbHVkZWRDcmVkZW50
aWFscyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2NyaXB0b3IpLmdldCgpXTsKKworICAg
ICAgICBbY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBzZXRFeGNsdWRlZENyZWRlbnRpYWxzOmV4
Y2x1ZGVkQ3JlZGVudGlhbHMuZ2V0KCldOworICAgIH0KKworICAgIGlmIChyZXF1ZXN0VHlwZXMg
JiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleVJlZ2lzdHJhdGlvbikK
KyAgICAgICAgW3JlcXVlc3RDb250ZXh0IHNldFBsYXRmb3JtS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uczpjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmdldCgpXTsKKworICAgIGlmIChyZXF1
ZXN0VHlwZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tleVJl
Z2lzdHJhdGlvbikKKyAgICAgICAgW3JlcXVlc3RDb250ZXh0IHNldFNlY3VyaXR5S2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczpjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmdldCgpXTsKKwor
ICAgIHJldHVybiByZXF1ZXN0Q29udGV4dDsKK30KKworc3RhdGljIFJldGFpblB0cjxBU0NDcmVk
ZW50aWFsUmVxdWVzdENvbnRleHQ+IGNvbmZpZ3VyYXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4
dChjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlcyByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50aWFs
UmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbiB8IEFTQ0NyZWRlbnRpYWxSZXF1
ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0aW9uOworCisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiB1c2VyVmVyaWZpY2F0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8QXV0aGVudGljYXRv
ckF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBvcHRpb25zLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50
OworICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9y
bSkKKyAgICAgICAgcmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlUGxhdGZv
cm1QdWJsaWNLZXlBc3NlcnRpb247CisgICAgZWxzZSBpZiAoYXR0YWNobWVudCA9PSBBdXRoZW50
aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0Zm9ybSkKKyAgICAgICAgcmVxdWVzdFR5cGVzID0g
QVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb247CisK
KyAgICB1c2VyVmVyaWZpY2F0aW9uID0gdG9OU1N0cmluZyhvcHRpb25zLnVzZXJWZXJpZmljYXRp
b24pOworCisgICAgc2l6ZV90IGFsbG93ZWRDcmVkZW50aWFsQ291bnQgPSBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMuc2l6ZSgpOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxBU0NQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPj4gYWxsb3dlZENyZWRlbnRpYWxzOworICAgIGlm
IChhbGxvd2VkQ3JlZGVudGlhbENvdW50KSB7CisgICAgICAgIGFsbG93ZWRDcmVkZW50aWFscyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTphbGxvd2Vk
Q3JlZGVudGlhbENvdW50XSk7CisKKyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciBkZXNjcmlwdG9yIDogb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKQorICAgICAgICAg
ICAgW2FsbG93ZWRDcmVkZW50aWFscyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2NyaXB0
b3IpLmdldCgpXTsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3RDb250ZXh0ID0gYWRvcHROUyhb
YWxsb2NBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUmVxdWVz
dFR5cGVzOnJlcXVlc3RUeXBlc10pOworICAgIFtyZXF1ZXN0Q29udGV4dCBzZXRSZWx5aW5nUGFy
dHlJZGVudGlmaWVyOm9wdGlvbnMucnBJZF07CisKKyAgICBOU0RhdGEgKmNoYWxsZW5nZSA9IHRv
TlNEYXRhKG9wdGlvbnMuY2hhbGxlbmdlKS5nZXQoKTsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMg
JiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbikKKyAg
ICAgICAgW3JlcXVlc3RDb250ZXh0IHNldFBsYXRmb3JtS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9w
dGlvbnM6W2FsbG9jQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnNJbnN0YW5j
ZSgpIGluaXRXaXRoS2luZDpBU0NQdWJsaWNLZXlDcmVkZW50aWFsS2luZFBsYXRmb3JtIHJlbHlp
bmdQYXJ0eUlkZW50aWZpZXI6b3B0aW9ucy5ycElkIGNoYWxsZW5nZTpjaGFsbGVuZ2UgdXNlclZl
cmlmaWNhdGlvblByZWZlcmVuY2U6dXNlclZlcmlmaWNhdGlvbi5nZXQoKSBhbGxvd2VkQ3JlZGVu
dGlhbHM6YWxsb3dlZENyZWRlbnRpYWxzLmdldCgpXV07CisKKyAgICBpZiAocmVxdWVzdFR5cGVz
ICYgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb24p
CisgICAgICAgIFtyZXF1ZXN0Q29udGV4dCBzZXRTZWN1cml0eUtleUNyZWRlbnRpYWxBc3NlcnRp
b25PcHRpb25zOlthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb25PcHRpb25zSW5z
dGFuY2UoKSBpbml0V2l0aEtpbmQ6QVNDUHVibGljS2V5Q3JlZGVudGlhbEtpbmRTZWN1cml0eUtl
eSByZWx5aW5nUGFydHlJZGVudGlmaWVyOm9wdGlvbnMucnBJZCBjaGFsbGVuZ2U6Y2hhbGxlbmdl
IHVzZXJWZXJpZmljYXRpb25QcmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24uZ2V0KCkgYWxsb3dl
ZENyZWRlbnRpYWxzOmFsbG93ZWRDcmVkZW50aWFscy5nZXQoKV1dOworCisgICAgcmV0dXJuIHJl
cXVlc3RDb250ZXh0OworfQorCit2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
OjptYWtlQ3JlZGVudGlhbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYm
IGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4X3Q+JiYgaGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBSZXF1
ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIGF1dG8gcmVxdWVzdENvbnRl
eHQgPSBjb25maWd1cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dChvcHRpb25zKTsKKyAgICBw
ZXJmb3JtUmVxdWVzdChyZXF1ZXN0Q29udGV4dCwgV1RGTW92ZShoYW5kbGVyKSk7Cit9CisKK3Zv
aWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmdldEFzc2VydGlvbihGcmFtZUlk
ZW50aWZpZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4
X3Q+JiYgaGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiYgb3B0aW9ucywg
Ym9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhh
bmRsZXIpCit7CisgICAgYXV0byByZXF1ZXN0Q29udGV4dCA9IGNvbmZpZ3VyYXRpb25Bc3NlcnRp
b25SZXF1ZXN0Q29udGV4dChvcHRpb25zKTsKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0Q29u
dGV4dCwgV1RGTW92ZShoYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVz
dENvbnRleHQ+IHJlcXVlc3RDb250ZXh0LCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5k
bGVyKQoreworICAgIGF1dG8gcHJveHkgPSBhZG9wdE5TKFthbGxvY0FTQ0FnZW50UHJveHlJbnN0
YW5jZSgpIGluaXRdKTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dlYlBhZ2VQcm94eS5w
bGF0Zm9ybVdpbmRvdygpOworICAgIFtwcm94eSBwZXJmb3JtQXV0aG9yaXphdGlvblJlcXVlc3Rz
Rm9yQ29udGV4dDpyZXF1ZXN0Q29udGV4dC5nZXQoKSB3aXRoQ2xlYXJhbmNlSGFuZGxlcjptYWtl
QmxvY2tQdHIoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBoYW5kbGVyID0gV1RGTW92
ZShoYW5kbGVyKSwgd2luZG93ID0gV1RGTW92ZSh3aW5kb3cpXShOU1hQQ0xpc3RlbmVyRW5kcG9p
bnQgKmRhZW1vbkVucG9pbnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBwcm90ZWN0ZWRUaGlzID0gd2Vha1RoaXMuZ2V0KCk7CisKKyAgICAgICAgaWYgKCFwcm90ZWN0
ZWRUaGlzIHx8ICFkYWVtb25FbnBvaW50KSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW2hhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGhhbmRsZXIoeyB9LCAoQXV0aGVudGljYXRvckF0dGFjaG1lbnQpMCwgRXhjZXB0
aW9uRGF0YSB7IE5vdEFsbG93ZWRFcnJvciwgIk9wZXJhdGlvbiBmYWlsZWQuIiB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcHJv
dGVjdGVkVGhpcy0+bV9wcmVzZW50ZXIgPSBhZG9wdE5TKFthbGxvY0FTQ0F1dGhvcml6YXRpb25S
ZW1vdGVQcmVzZW50ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgW3Byb3RlY3RlZFRoaXMt
Pm1fcHJlc2VudGVyIHByZXNlbnRXaXRoV2luZG93OndpbmRvdyBkYWVtb25FbmRwb2ludDpkYWVt
b25FbnBvaW50IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbaGFuZGxlciA9IFdURk1v
dmUoaGFuZGxlcildKGlkIDxBU0NDcmVkZW50aWFsUHJvdG9jb2w+IGNyZWRlbnRpYWwsIE5TRXJy
b3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0b3JSZXNwb25zZURh
dGEgcmVzcG9uc2UgPSB7IH07CisgICAgICAgICAgICBBdXRoZW50aWNhdG9yQXR0YWNobWVudCBh
dHRhY2htZW50OworICAgICAgICAgICAgRXhjZXB0aW9uRGF0YSBleGNlcHRpb25EYXRhID0geyB9
OworCisgICAgICAgICAgICBpZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFzczpnZXRBU0NQbGF0
Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3RyYXRpb25DbGFzcygpXSkgeworICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRp
YWxSZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwgPSBjcmVkZW50aWFsOworICAg
ICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZlcihyZWdpc3RyYXRpb25D
cmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXR0ZXN0
YXRpb25PYmplY3QgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwuYXR0ZXN0
YXRpb25PYmplY3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tpbmRP
ZkNsYXNzOmdldEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbkNs
YXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRh
Y2htZW50OjpDcm9zc1BsYXRmb3JtOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmlzQXV0aGVu
dGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgPSB0cnVlOworCisgICAgICAgICAgICAgICAgQVND
U2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uICpyZWdpc3RyYXRpb25D
cmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJZCA9
IHRvQXJyYXlCdWZmZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOworICAg
ICAgICAgICAgICAgIHJlc3BvbnNlLmF0dGVzdGF0aW9uT2JqZWN0ID0gdG9BcnJheUJ1ZmZlcihy
ZWdpc3RyYXRpb25DcmVkZW50aWFsLmF0dGVzdGF0aW9uT2JqZWN0KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFzczpnZXRBU0NQbGF0Zm9ybVB1YmxpY0tl
eUNyZWRlbnRpYWxBc3NlcnRpb25DbGFzcygpXSkgeworICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgICAgICAgICAgICAg
cmVzcG9uc2UuaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGZhbHNlOworCisg
ICAgICAgICAgICAgICAgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uICph
c3NlcnRpb25DcmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25z
ZS5yYXdJZCA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQp
OworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhID0gdG9BcnJheUJ1
ZmZlcihhc3NlcnRpb25DcmVkZW50aWFsLmF1dGhlbnRpY2F0b3JEYXRhKTsKKyAgICAgICAgICAg
ICAgICByZXNwb25zZS5zaWduYXR1cmUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRp
YWwuc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS51c2VySGFuZGxlID0gdG9B
cnJheUJ1ZmZlcihhc3NlcnRpb25DcmVkZW50aWFsLnVzZXJIYW5kbGUpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChbY3JlZGVudGlhbCBpc0tpbmRPZkNsYXNzOmdldEFTQ1NlY3VyaXR5S2V5UHVi
bGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbkNsYXNzKCldKSB7CisgICAgICAgICAgICAgICAgYXR0
YWNobWVudCA9IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtOworICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLmlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgPSBm
YWxzZTsKKworICAgICAgICAgICAgICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFz
c2VydGlvbiAqYXNzZXJ0aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICAg
ICAgcmVzcG9uc2UucmF3SWQgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRpYWwuY3Jl
ZGVudGlhbElEKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hdXRoZW50aWNhdG9yRGF0YSA9
IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5hdXRoZW50aWNhdG9yRGF0YSk7Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2lnbmF0dXJlID0gdG9BcnJheUJ1ZmZlcihhc3NlcnRp
b25DcmVkZW50aWFsLnNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UudXNlckhh
bmRsZSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC51c2VySGFuZGxlKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IChBdXRoZW50
aWNhdG9yQXR0YWNobWVudCkgMDsKKyAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4Y2Vw
dGlvbkNvZGU7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yTWVzc2FnZSA9IG5pbDsK
KyAgICAgICAgICAgICAgICBpZiAoW2Vycm9yLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6V0tFcnJv
ckRvbWFpbl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ29kZSA9IHRvRXhjZXB0
aW9uQ29kZShlcnJvci5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXJyb3IudXNlckluZm9bTlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV07CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ29kZSA9IE5vdEFsbG93
ZWRFcnJvcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoW2Vycm9yLmRvbWFpbiBpc0VxdWFs
VG9TdHJpbmc6QVNDQXV0aG9yaXphdGlvbkVycm9yRG9tYWluXSAmJiBlcnJvci5jb2RlID09IEFT
Q0F1dGhvcml6YXRpb25FcnJvclVzZXJDYW5jZWxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yTWVzc2FnZSA9IEAiVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGxlZCBieSB0aGUg
dXNlci4iOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvck1lc3NhZ2UgPSBAIk9wZXJhdGlvbiBmYWlsZWQuIjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBleGNlcHRpb25EYXRhID0geyBleGNlcHRpb25Db2RlLCBlcnJv
ck1lc3NhZ2UgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaGFuZGxlcihyZXNwb25z
ZSwgYXR0YWNobWVudCwgZXhjZXB0aW9uRGF0YSk7CisgICAgICAgIH0pLmdldCgpXTsKKyAgICB9
KS5nZXQoKV07Cit9CisKK3ZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6Omlz
VXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZShRdWVyeUNvbXBsZXRp
b25IYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBpZiAoW2dldEFTQ1dlYktpdFNQSVN1cHBvcnRD
bGFzcygpIHNob3VsZFVzZUFsdGVybmF0ZUNyZWRlbnRpYWxTdG9yZV0pIHsKKyAgICAgICAgaGFu
ZGxlcih0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGhhbmRsZXIoTG9jYWxT
ZXJ2aWNlOjppc0F2YWlsYWJsZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggMWNhMGRlMDRlMDFjYWEw
MzQ3YzU1MjkxNDkxZWViZDI0N2Q0N2RiNC4uMTk2Mjg1NGJkZjRhODIzYWJiYWIwNGY1MGJjNWZk
N2ExMzBlMWIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5LmNwcApAQCAtNTUsNiArNTUsNyBAQCBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3JQcm94eTo6fldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5KCkKICAgICBtX3dl
YlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJB
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dl
YlBhZ2VQcm94eS53ZWJQYWdlSUQoKSk7CiB9CiAKKyNpZiAhSEFWRShVTklGSUVEX0FTQ19BVVRI
X1VJKQogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6bWFrZUNyZWRlbnRp
YWwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSWQsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIFZl
Y3Rvcjx1aW50OF90PiYmIGhhc2gsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMm
JiBvcHRpb25zLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgUmVxdWVzdENvbXBsZXRpb25I
YW5kbGVyJiYgaGFuZGxlcikKIHsKICAgICBoYW5kbGVSZXF1ZXN0KHsgV1RGTW92ZShoYXNoKSwg
V1RGTW92ZShvcHRpb25zKSwgbWFrZVdlYWtQdHIobV93ZWJQYWdlUHJveHkpLCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgR2xvYmFsRnJhbWVJZGVu
dGlmaWVyIHsgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCksIGZyYW1lSWQgfSwgV1RGTW92ZShm
cmFtZUluZm8pLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFN0cmluZygpLCBudWxscHRyIH0sIFdU
Rk1vdmUoaGFuZGxlcikpOwpAQCAtNjQsNiArNjUsNyBAQCB2b2lkIFdlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSWQsIEZy
YQogewogICAgIGhhbmRsZVJlcXVlc3QoeyBXVEZNb3ZlKGhhc2gpLCBXVEZNb3ZlKG9wdGlvbnMp
LCBtYWtlV2Vha1B0cihtX3dlYlBhZ2VQcm94eSksIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1
bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBHbG9iYWxGcmFtZUlkZW50aWZpZXIgeyBtX3dlYlBh
Z2VQcm94eS53ZWJQYWdlSUQoKSwgZnJhbWVJZCB9LCBXVEZNb3ZlKGZyYW1lSW5mbyksIHByb2Nl
c3NpbmdVc2VyR2VzdHVyZSwgU3RyaW5nKCksIG51bGxwdHIgfSwgV1RGTW92ZShoYW5kbGVyKSk7
CiB9CisjZW5kaWYKIAogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6aGFu
ZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiYgZGF0YSwgUmVxdWVzdENv
bXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKIHsKQEAgLTc4LDEwICs4MCwxMiBAQCB2b2lkIFdl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRp
Y2F0aW9uUmVxdWVzdERhdAogICAgIG1fd2ViUGFnZVByb3h5LndlYnNpdGVEYXRhU3RvcmUoKS5h
dXRoZW50aWNhdG9yTWFuYWdlcigpLmhhbmRsZVJlcXVlc3QoV1RGTW92ZShkYXRhKSwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCisjaWYgIUhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIHZvaWQg
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZShRdWVyeUNvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikK
IHsKICAgICBoYW5kbGVyKExvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKSk7CiB9CisjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4IDUzZjk3M2I1YTc0ZGIyYzY5YTM2YzJhZTZi
MmNjZDg3OWU0MjJiOGEuLjY2ODc3ZmQxMDY4YTRlNTMxYThkODI1MDIyZDM5MWMwNDY4ODQ5YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHku
aApAQCAtNDEsNiArNDEsMTEgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9uczsKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiB9CiAKKyNpZiBIQVZFKFVOSUZJRURf
QVNDX0FVVEhfVUkpCitPQkpDX0NMQVNTIEFTQ0F1dGhvcml6YXRpb25SZW1vdGVQcmVzZW50ZXI7
CitPQkpDX0NMQVNTIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dDsKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtNDgsNyArNTMsNyBAQCBj
bGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgRnJhbWVJbmZvRGF0YTsKIHN0cnVjdCBXZWJBdXRo
ZW50aWNhdGlvblJlcXVlc3REYXRhOwogCi1jbGFzcyBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3JQcm94eSA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHkgOiBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5KTsKIHB1YmxpYzoKQEAgLTcwLDYgKzc1LDEx
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVx
dWVzdERhdGEmJiwgUmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYpOwogCiAgICAgV2ViUGFnZVBy
b3h5JiBtX3dlYlBhZ2VQcm94eTsKKworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAg
ICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFJldGFpblB0cjxBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRl
eHQ+LCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgUmV0YWluUHRyPEFTQ0F1dGhv
cml6YXRpb25SZW1vdGVQcmVzZW50ZXI+IG1fcHJlc2VudGVyOworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0hvdmVyUGxhdHRlclBhcmFtZXRlcnMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tIb3ZlclBsYXR0ZXJQYXJhbWV0ZXJzLm1tCmluZGV4IGY4NDA4Yzc0MTljYjk2ZmE1ZGNl
ZmVkZGI2Mjg5MjdkMzQzZTgxY2MuLjg0NjZiY2I5OGNkZTk4YmM2Yzk5ZjNiYzQ3MTE0YmE5NTY3
NTc3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0hvdmVyUGxh
dHRlclBhcmFtZXRlcnMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSG92
ZXJQbGF0dGVyUGFyYW1ldGVycy5tbQpAQCAtMjksNiArMjksOCBAQAogI2lmIEhBVkUoVUlLSVRf
V0lUSF9NT1VTRV9TVVBQT1JUKSB8fCBFTkFCTEUoSE9WRVJfR0VTVFVSRV9SRUNPR05JWkVSKQog
CiAjaW1wb3J0ICJQcm90b3R5cGVUb29sc1NQSS5oIgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9R
dWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBpbnRlcmZhY2Ug
UFRTbGlkZXJSb3cgKFdlYktpdCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWIzMmViYTIyMDhhNGQ4NDljNDU3MDcxYmNhNDM4OTYy
NTIxNzBlNS4uNTU1M2IwNDY1YTA0Mjc4NzRhZDgxYjkyODY0MmRkMzEzZmY2YWNiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNTI1
LDYgKzI1MjUsNyBAQAogCQkwN0UxOUYwOTIzRDUzM0JBMDA5NEZGQjQgLyogVGV4dFRyYWNrUHJp
dmF0ZVJlbW90ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tQcml2YXRlUmVtb3RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjdENkE1RkU4NDAzMDdDMDJBQUMwNyAvKiBB
cHBLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBBcHBLaXQuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwS2l0LmZyYW1ld29yazsgc291cmNlVHJl
ZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMDg5QzE2NjdGRTg0MTE1OEMwMkFBQzA3IC8qIGVuICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC5zdHJpbmdzOyBuYW1lID0gZW47IHBhdGggPSBlbi5scHJvai9J
bmZvUGxpc3Quc3RyaW5nczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMERDQkY0RDky
NkUyRUQzMjAwRUEwRTA3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFOTdENzRDMjAwRThGRjMwMEJGNjY0MyAv
KiBTYWZlQnJvd3NpbmdTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FmZUJyb3dzaW5nU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFREU4NTAyMjAwNEU3NDkwMDAzMDU2MCAvKiBX
ZWJzaXRlUG9wVXBQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVBvcFVwUG9saWN5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDQxNTk4MjNDN0NDNzIwMDYwQTNFMiAv
KiBXS1Njcm9sbFZpZXdNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tT
Y3JvbGxWaWV3TWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzI5LDYgKzkz
MzAsNyBAQAogCQkJCTU3MERBQUFEMjMwMjZGNUMwMEU4RkMwNCAvKiBOZmNTZXJ2aWNlLm1tICov
LAogCQkJCTU3N0ZGNzgzMjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50LmggKi8sCiAJCQkJNTc3RkY3ODQyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQubW0gKi8sCisJCQkJMERDQkY0RDkyNkUyRUQzMjAwRUEwRTA3IC8q
IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5Lm1tICovLAogCQkJCTU3NzczOTkzMjU4
MDM4OEYwMDU5MzQ4QiAvKiBXS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5oICov
LAogCQkJCTU3NzczOTk0MjU4MDM4OEYwMDU5MzQ4QiAvKiBXS0FTQ0F1dGhvcml6YXRpb25QcmVz
ZW50ZXJEZWxlZ2F0ZS5tbSAqLywKIAkJCQk1NzBEQUFDNDIzMDM3RjdFMDBFOEZDMDQgLyogV0tO
RlJlYWRlclNlc3Npb25EZWxlZ2F0ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yLmNwcAppbmRleCBkNTQ1OGVkYmY0NDUxY2E1ODhlOWRmZTQ3YjJj
YWVhYzU1NTVhNjljLi4xYjEyODA5Zjg0OTE5OGY5YTNjNzI2ZjBiYTY2MWMzODFkNzliZDIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcApAQCAt
NjksNyArNjksMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6Om1ha2VDcmVk
ZW50aWFsKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgU2VjdXIKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVy
ZShmcmFtZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSk7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgp
KSB7CisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorICAgIGJvb2wgdXNlV2ViQXV0aG5Q
cm9jZXNzID0gZmFsc2U7CisjZWxzZQorICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1v
ZGVybkVuYWJsZWQoKTsKKyNlbmRpZgorICAgIGlmICghdXNlV2ViQXV0aG5Qcm9jZXNzKSB7CiAg
ICAgICAgIG1fd2ViUGFnZS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5OjpNYWtlQ3JlZGVudGlhbCh3ZWJGcmFtZS0+ZnJhbWVJRCgp
LCB3ZWJGcmFtZS0+aW5mbygpLCBoYXNoLCBvcHRpb25zLCBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVy
ZSksIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODYsNyAr
OTEsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmdldEFzc2VydGlvbihj
b25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyaXQKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShmcmFt
ZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSk7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpKSB7Cisj
aWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNz
ID0gZmFsc2U7CisjZWxzZQorICAgIGJvb2wgdXNlV2ViQXV0aG5Qcm9jZXNzID0gUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVu
YWJsZWQoKTsKKyNlbmRpZgorICAgIGlmICghdXNlV2ViQXV0aG5Qcm9jZXNzKSB7CiAgICAgICAg
IG1fd2ViUGFnZS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5OjpHZXRBc3NlcnRpb24od2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJh
bWUtPmluZm8oKSwgaGFzaCwgb3B0aW9ucywgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUpLCBXVEZN
b3ZlKGhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk4LDcgKzEwOCwxMiBA
QCB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IEZy
YW1lJiBmcmFtZSwgY29uc3QgU2VjdXJpdAogCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvcjo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKFF1ZXJ5
Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNhdGlvbk1vZGVybkVuYWJsZWQo
KSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAgICBib29sIHVzZVdlYkF1dGhu
UHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25N
b2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdlYkF1dGhuUHJvY2Vzcykgewog
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6SXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNh
dG9yQXZhaWxhYmxlKCksIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJm
MWQ3YmE1M2ViZmVhOGI0ODIzZmJjN2VmZDcwMzFhNGRiZjRmMGYuLmRmODEwZTdmYTIwNmY0YTUx
NTgwYjI3Y2M0Y2E3ZGNkNDRlYzM2NmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wOS0yOCAgR2FycmV0dCBE
YXZpZHNvbiAgPGdhcnJldHRfZGF2aWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IHBs
YXRmb3JtIFVJIGZvciBXZWJBdXRobgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMwOTA2CisgICAgICAgIDxyZGFyOi8vNzQ2NTk1NTY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0aW1l
b3V0IHRlc3QgdG8gZXhwZWN0IE5vdEFsbG93ZWRFcnJvciwgd2hpY2ggaXMgdGhlIGV4cGVjdGVk
IGVycm9yCisgICAgICAgIGNvZGUgd2hlbiBhIHRpbWVvdXQgb2NjdXJzLCBwZXIgU3RlcCAyMSBv
ZiB0aGUgIkNyZWF0ZSBhIE5ldyBDcmVkZW50aWFsIgorICAgICAgICBhbGdvcml0aG0uCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0xMC0x
MSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2J1aWxk
LWltYWdlZGlmZl0gQnVpbGQgdW5pdmVyc2FsIGJpbmFyaWVzIGJ5IGRlZmF1bHQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCAxOTQ1YjVlMzI1ZDlkMGQzOTMyZDhjY2Ux
NDdiODczMGJhMDQ1YmYyLi5kZTAzNjg1ODExZDk4NDA1MWM5NmE1YmI3N2Q2MjlmNmFjYjI1N2Jl
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxMb2Nh
bEF1dGhlbnRpY2F0aW9uL0xvY2FsQXV0aGVudGljYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUv
QXV0aGVudGljYXRvckF0dGFjaG1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CkBAIC0xODMwLDcgKzE4
MzEsNyBAQCBURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGlt
ZW91dCkKIAogICAgICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CiAgICAgICAgIEVYUEVDVF9F
UShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3Iu
Y29kZSwgV0tFcnJvclVua25vd24pOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgTm90
QWxsb3dlZEVycm9yKTsKICAgICB9XTsKICAgICBVdGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSYW4pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441011</attachid>
            <date>2021-10-12 16:09:30 -0700</date>
            <delta_ts>2021-10-12 18:06:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230906-20211012160930.patch</filename>
            <type>text/plain</type>
            <size>44368</size>
            <attacher name="Garrett Davidson">garrett_davidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxMmRhYWUwNzdlM2RiZDNi
Mjg2NDRkMDBhZmNhMTRhYmRmYzAwMGYuLjhlYmJhMTI1Mjk0ZjE0NzA3MDhmNjZkMDMxMDNlYTNm
MGQ2NDE4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMDktMjggIEdhcnJldHQg
RGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBw
bGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8cmRhcjovLzc0NjU5NTU2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1c2lu
ZyB0aGUgcGxhdGZvcm0ncyBVSSBmb3IgV2ViQXV0aG4gdHJhbnNhY3Rpb25zLCB3aGVyZSBhdmFp
bGFibGUsCisgICAgICAgIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgV2ViQXV0aG4g
cHJvY2Vzcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogUGxhdGZvcm0vc3BpL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmg6Cisg
ICAgICAgIFdoZW4gcG9zc2libGUsIHN3aXRjaCB0byBpbXBvcnRpbmcgdGhlIHVtYnJlbGxhIGhl
YWRlciBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIHJlZGVjbGFyaW5nIHRoZSBlbnRpcmUg
aW50ZXJmYWNlLgorCisgICAgICAgIEFsc28sIGZpeCBhbiBleGlzdGluZyBidWcgY2F1c2VkIGJ5
IHRoZSByZWRlY2xhcmF0aW9uLCB3aGVyZSB0aGUKKyAgICAgICAgQVNDU2VjdXJpdHlLZXlQdWJs
aWNLZXlDcmVkZW50aWFsS2luZCBlbnVtIHdhcyByZW5hbWVkLgorCisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgQnVpbGQgdGhlIG5ldyBmaWxlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAo
LVtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aENoYWxsZW5nZTpv
cmlnaW46b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgUmV0dXJuIHRoZSBm
dWxsIGVycm9yIHRvIHRoZSBkZWxlZ2F0ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9u
U2VydmljZXNDb3JlU29mdExpbmsubW06CisgICAgICAgIEFkZCBhbGwgb2YgdGhlIG5ldyByZXF1
aXJlZCBjbGFzc2VzIGZvciBzb2Z0IGxpbmtpbmcsIGFuZCBzb3J0IHRoZSBsaXN0LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9BcnJheUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvTlNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6dG9OU1N0
cmluZyk6CisgICAgICAgIChXZWJLaXQ6OnRvRXhjZXB0aW9uQ29kZSk6CisgICAgICAgIChXZWJL
aXQ6OnRvQVNDRGVzY3JpcHRvcik6CisgICAgICAgIEhlbHBlciBtZXRob2RzIGZvciBjb252ZXJ0
aW5nIGJldHdlZW4gV0sgYW5kIEFTQyB0eXBlcy4KKworICAgICAgICAoV2ViS2l0Ojpjb25maWd1
cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OmNvbmZpZ3Vy
YXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29udGV4dCk6CisgICAgICAgIENyZWF0ZSBhbmQgY29uZmln
dXJlIGFuIEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dCBmcm9tIHRoZSBwcm92aWRlZCBvcHRp
b25zLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvclByb3h5OjpnZXRBc3NlcnRpb24pOgorICAgICAgICBDb25maWd1cmUgYW5kIHBlcmZv
cm0gdGhlIHJlcXVlc3QuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgLSBDcmVhdGUgYSBwcm94eSB0
byB0YWxrIHRvIEF1dGhlbnRpY2F0aW9uU2VydmljZXNBZ2VudC4KKyAgICAgICAgLSBBc2sgdGhl
IHByb3h5IGlmIHdlJ3JlIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdC4KKyAgICAgICAg
ICAtIElmIG5vLCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAgICAgLSBJZiB5ZXMsIGNyZWF0ZSBw
cmVzZW50ZXIgYW5kIHByZXNlbnQgb3ZlciB0aGUgd2ViIHBhZ2UncyB3aW5kb3cuCisgICAgICAg
IC0gV2hlbiB0aGUgcmVxdWVzdCBpZiBmaW5pc2hlZCwgY2hlY2sgdGhlIGtpbmQgb2YgY3JlZGVu
dGlhbCB3ZSBnb3QsIGFuZCByZXR1cm4KKyAgICAgICAgdGhlIHJlbGV2YW50IEF1dGhlbnRpY2F0
b3JSZXNwb25zZURhdGEvQXV0aGVudGljYXRvckF0dGFjaG1lbnQuCisgICAgICAgIC0gSWYgdGhl
IHJlcXVlc3Qgd2FzIGNhbmNlbGVkIG9yIGZhaWxlZCwgYGNyZWRlbnRpYWxgIHdpbGwgYmUgbmls
IGFuZCBgZXJyb3JgIHdpbGwKKyAgICAgICAgYmUgbm9uLW5pbC4gSW4gbW9zdCBjYXNlcywgdGhl
IGVycm9yIHdpbGwgYmUgV0tFcnJvckRvbWFpbiwgd2hpY2ggd2UgY2FuIGNvbnZlcnQKKyAgICAg
ICAgZGlyZWN0bHkgdG8gRXhjZXB0aW9uRGF0YS4gVGhlIG9uZSBleGNlcHRpb24gaXMgdGhlIHVz
ZXIgY2FuY2VsZWQgdGhlIHJlcXVlc3QgaW4KKyAgICAgICAgdGhlIHBsYXRmb3JtIFVJLCBzbyBy
ZXR1cm4gdGhlIGFwcHJvcHJpYXRlIEV4Y2VwdGlvbkRhdGEgaW4gdGhhdCBjYXNlLiBUaGUgZmlu
YWwKKyAgICAgICAgIk9wZXJhdGlvbiBmYWlsZWQuIiBjYXNlIGNvdmVycyBhbnl0aGluZyBlbHNl
IHVuZXhwZWN0ZWQgaGFwcGVuaW5nLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JB
dmFpbGFibGUpOgorICAgICAgICBJZiArc2hvdWxkVXNlQWx0ZXJuYXRlQ3JlZGVudGlhbFN0b3Jl
IGlzIHRydWUsIHRoaXMgaXMgYWx3YXlzIHRydWUuIE90aGVyd2lzZSwKKyAgICAgICAgZmFsbCBi
YWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW06Cisg
ICAgICAgICgtW1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlIGF1dGhvcml6YXRp
b25QcmVzZW50ZXI6Y3JlZGVudGlhbFJlcXVlc3RlZEZvckxvZ2luQ2hvaWNlOmF1dGhlbnRpY2F0
ZWRDb250ZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICBVc2UgdGhlIG5ldyBuYW1l
IG9mIHRoZSBlbnVtLCB1bmNvbmRpdGlvbmFsbHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAg
ICAgICBXcmFwIGEgZmV3IG1ldGhvZHMgaW4gdGhlIG5ldyBmbGFnLiBXaGVuIHRoZSBmbGFnIGlz
IG9uLCB0aGVzZSBtZXRob2RzIHdpbGwgZXhpc3QKKyAgICAgICAgaW4gV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgTmV3IGl2
YXIgYW5kIG1ldGhvZCBmb3IgdGhlIHBsYXRmb3JtIHByZXNlbnRlci4KKyAgICAgICAgTWFrZSB0
aGUgc3VwZXJjbGFzcyBwdWJsaWMgc28gd2UgY2FuIHVzZSB0aGUgV2Vha1B0ciBpbmhlcml0YW5j
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tIb3ZlclBsYXR0ZXJQYXJhbWV0ZXJzLm1t
OgorICAgICAgICBBZGQgc29tZSBtaXNzaW5nIGltcG9ydHMgc2luY2UgdGhpcyBmaWxlIGdvdCBw
dXNoZWQgb2ZmIHRoZSBlbmQgb2YKKyAgICAgICAgVW5pZmllZFNvdXJjZTQ3LW1tLm1tLgorCisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCB0
aGUgbmV3IGZpbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHA6CisgICAgICAgIFdoZW4gcGxhdGZvcm0gVUkg
aXMgYXZhaWxhYmxlLCBwcmVmZXIgaXQgb3ZlciB0aGUgV2ViQXV0aG4gcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjptYWtlQ3JlZGVudGlhbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvcjo6Z2V0QXNzZXJ0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOjppc1Vz
ZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUpOgorCiAyMDIxLTEwLTEy
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNjcm9s
bGluZyB0aHJlYWQgYW5pbWF0aW9ucyBuZWVkIHRvIGNvbW1pdCBsYXllcnMgb24gdGhlIHNjcm9s
bGluZyB0aHJlYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL0NvY29h
L0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L3NwaS9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNQSS5oCmluZGV4IDdjMzNjYmVi
MWE0NTQwZmQ1NWQ3NTE0MmQyNGNhYjdkODc0YWM3MjAuLmYyNzA4ZTZlMWYwMjA3NTVmZjkzMzI3
ZjcxZGZjMDUzZTRkNzczMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU1BJLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvQ29jb2EvQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTUEkuaApAQCAt
MjUsMTkgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBIQVZFKEFTQ19BVVRIX1VJKQot
Ci0vLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MjQwNjU4NT46IFVuY29tbWVudCB0aGUgaGVhZGVy
cyBhZnRlciB0aGUgU0RLIGJlY29tZXMgc3RhYmxlLgotLy8jaWYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKLS8vCi0vLy8vIEZJWE1FKDIxOTc2Nyk6IFJlbW92ZSBBU0NBcHBsZUlEQ3JlZGVudGlh
bC5oLgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBcHBsZUlEQ3Jl
ZGVudGlhbC5oPgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZS9BU0NBdXRo
b3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dC5oPgotLy8jaW1wb3J0IDxBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZS9BU0NBdXRob3JpemF0aW9uUHJlc2VudGVyLmg+Ci0vLyNpbXBvcnQgPEF1
dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbExv
Z2luQ2hvaWNlLmg+Ci0vLyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlL0FTQ1Nl
Y3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlLmg+Ci0vLwotLy8jZWxzZQor
I2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2Vy
dmljZXNDb3JlL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlUHJpdmF0ZS5oPgorI2VsaWYgSEFW
RShBU0NfQVVUSF9VSSkKIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIApAQCAtMTA4LDEwICs5
OCwxMCBAQCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0
aW9uQ29udGV4dERhdGFLZXk7CiAKIEBlbmQKIAotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kKSB7Ci0gICAg
QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kUmVnaXN0cmF0
aW9uLAotICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2lu
ZEFzc2VydGlvbiwKLSAgICBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNo
b2ljZUtpbmRBc3NlcnRpb25QbGFjZWhvbGRlciwKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmQpIHsKKyAgICBBU0NTZWN1cml0
eUtleVB1YmxpY0tleUNyZWRlbnRpYWxLaW5kUmVnaXN0cmF0aW9uLAorICAgIEFTQ1NlY3VyaXR5
S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmRBc3NlcnRpb24sCisgICAgQVNDU2VjdXJpdHlLZXlQ
dWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvblBsYWNlaG9sZGVyLAogfTsKIAogQGludGVy
ZmFjZSBBU0NQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIDogTlNPYmplY3QgPE5T
U2VjdXJlQ29kaW5nPgpAQCAtMTM2LDcgKzEyNiw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2luZCkgewog
QHByb3BlcnR5IChub25hdG9taWMsIG51bGxhYmxlLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcg
Km5hbWU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJlYWRvbmx5LCBjb3B5KSBO
U1N0cmluZyAqZGlzcGxheU5hbWU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHJl
YWRvbmx5LCBjb3B5KSBOU0RhdGEgKnVzZXJIYW5kbGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlS2lu
ZCBsb2dpbkNob2ljZUtpbmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEFTQ1Nl
Y3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbEtpbmQgY3JlZGVudGlhbEtpbmQ7CiAKICsgKGlu
c3RhbmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CiAtIChpbnN0YW5jZXR5cGUpaW5pdCBOU19V
TkFWQUlMQUJMRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAyN2I1Njc2ZjNkY2UxYTRmNThm
ZTIyYzMxNDAxMTk2YWQyN2U4NTg1Li5jNWQ2MzYxZGJjMThhMTA2M2YzYWZlOGRhYjMzNmE1MGEw
NjEzOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01OTIsNiArNTkyLDcgQEAgVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL05mY1NlcnZpY2UubW0KIFVJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5t
bQogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLTkZSZWFkZXJTZXNzaW9uRGVs
ZWdhdGUubW0KIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNh
dGlvblBhbmVsQ2xpZW50Lm1tCitVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubW0KIAogVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5tbQogVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL01vY2svTW9ja0xvY2FsU2VydmljZS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQppbmRleCAwMzg2MzJjOTBhMDRiNWIxZjM4YzBjM2U1MTFkOWI3YWYzM2Q3ZmYxLi41ODZkMWVj
YTM0YjI0N2Q0Yzk5OTk4NTg0ZGY4ZTMyMTNlMTA2NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbQpAQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2U+IHdrQXV0aGVudGljYXRvckF0dGVzdGF0aW9uCiAgICAg
ICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVu
dGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSwgY2xpZW50RGF0YUpT
T04uZ2V0KCksIHJlc3BvbnNlLT5hdHRhY2htZW50KCkpLmdldCgpLCBuaWwpOwogICAgICAgICB9
LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSB7Ci0gICAgICAg
ICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4g
Y29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgICAgIGhhbmRsZXIo
bmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOmV4Y2VwdGlv
bi5jb2RlIHVzZXJJbmZvOkB7IE5TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk6IGV4Y2VwdGlvbi5t
ZXNzYWdlIH1dKTsKICAgICAgICAgfSk7CiAgICAgfTsKICAgICBfcGFuZWwtPmhhbmRsZVJlcXVl
c3QoeyBXVEZNb3ZlKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6
V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIHN0ZDo6
bnVsbG9wdCwgeyB9LCB0cnVlLCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZp
Y2VzQ29yZVNvZnRMaW5rLmgKaW5kZXggYzkyZjkwMDE3ZjUzOWE5NTM0MjdkZTMxYThmMzYyOThj
YzExMWM2ZS4uYjNhNzljMDdhYmEyY2JhZmVlZmVmYzZjNjdjYWUxMzZmNzIyMjUxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0
aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3Jl
U29mdExpbmsuaApAQCAtMzIsMTQgKzMyLDIzIEBAIFNPRlRfTElOS19GUkFNRVdPUktfRk9SX0hF
QURFUihXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlKTsKIAogU09GVF9MSU5LX0NM
QVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NXZWJLaXRTUElTdXBwb3J0KTsKIAotI2lmIEhBVkUo
QVNDX0FVVEhfVUkpCisjaWYgSEFWRShBU0NfQVVUSF9VSSkgfHwgSEFWRShVTklGSUVEX0FTQ19B
VVRIX1VJKQogCi1TT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0F1dGhvcml6
YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NB
Z2VudFByb3h5KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQXBwbGVJ
RENyZWRlbnRpYWwpOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NBdXRo
b3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURF
UihXZWJLaXQsIEFTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZP
Ul9IRUFERVIoV2ViS2l0LCBBU0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVyKTsKK1NPRlRf
TElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0
KTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVNDUGxhdGZvcm1QdWJsaWNL
ZXlDcmVkZW50aWFsQXNzZXJ0aW9uKTsKIFNPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktp
dCwgQVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2UpOwotU09GVF9MSU5L
X0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRp
YWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURFUihXZWJLaXQsIEFTQ0Fw
cGxlSURDcmVkZW50aWFsKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktpdCwgQVND
UGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uKTsKK1NPRlRfTElOS19DTEFT
U19GT1JfSEVBREVSKFdlYktpdCwgQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlv
bnMpOwogU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zKTsKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFdlYktp
dCwgQVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IpOworU09GVF9MSU5LX0NMQVNTX0ZP
Ul9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRp
b24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIoV2ViS2l0LCBBU0NTZWN1cml0eUtleVB1
YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX0hFQURF
UihXZWJLaXQsIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbFJlZ2lzdHJhdGlvbik7
CiAKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYktpdCwgQXV0aGVudGljYXRpb25T
ZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbiwgTlNFcnJvckRvbWFpbik7
CiAjZGVmaW5lIEFTQ0F1dGhvcml6YXRpb25FcnJvckRvbWFpbiBXZWJLaXQ6OmdldF9BdXRoZW50
aWNhdGlvblNlcnZpY2VzQ29yZV9BU0NBdXRob3JpemF0aW9uRXJyb3JEb21haW4oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0
aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0F1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlU29m
dExpbmsubW0KaW5kZXggYjkzMTNjODZkZDdkYzUwMDA2NjJhYWJjM2Q1MzIzOGVhN2NmNTJjYi4u
YTIzYWM1M2E3YmMxOWEyZTI1MjVlZDM2OTIwZDBkZGMzNGYzMjg2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvQXV0aGVudGljYXRp
b25TZXJ2aWNlc0NvcmVTb2Z0TGluay5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9BdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5r
Lm1tCkBAIC0zMiwxNCArMzIsMjMgQEAgU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX0ZPUl9T
T1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSk7CiAKIFNPRlRfTElOS19D
TEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1dl
YktpdFNQSVN1cHBvcnQpOwogCi0jaWYgSEFWRShBU0NfQVVUSF9VSSkKKyNpZiBIQVZFKEFTQ19B
VVRIX1VJKSB8fCBIQVZFKFVOSUZJRURfQVNDX0FVVEhfVUkpCiAKLVNPRlRfTElOS19DTEFTU19G
T1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6
YXRpb25QcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRo
ZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQWdlbnRQcm94eSk7CitTT0ZUX0xJTktfQ0xBU1Nf
Rk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlE
Q3JlZGVudGlhbCk7CiBTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uQ29udGV4dCk7
CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2Vydmlj
ZXNDb3JlLCBBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyKTsKK1NPRlRfTElOS19DTEFTU19GT1Jf
U09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ0F1dGhvcml6YXRp
b25SZW1vdGVQcmVzZW50ZXIpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBB
dXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0KTsK
K1NPRlRfTElOS19DTEFTU19GT1JfU09VUkNFKFdlYktpdCwgQXV0aGVudGljYXRpb25TZXJ2aWNl
c0NvcmUsIEFTQ1BsYXRmb3JtUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbik7CiBTT0ZUX0xJ
TktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBB
U0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xB
U1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1
cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxMb2dpbkNob2ljZSk7Ci1TT0ZUX0xJTktfQ0xBU1Nf
Rk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NBcHBsZUlE
Q3JlZGVudGlhbCk7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXNDb3JlLCBBU0NQbGF0Zm9ybVB1YmxpY0tleUNyZWRlbnRpYWxSZWdpc3Ry
YXRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlv
blNlcnZpY2VzQ29yZSwgQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnMpOwog
U09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2Vz
Q29yZSwgQVNDUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyk7CitTT0ZUX0xJTktf
Q0xBU1NfRk9SX1NPVVJDRShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik7CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJD
RShXZWJLaXQsIEF1dGhlbnRpY2F0aW9uU2VydmljZXNDb3JlLCBBU0NTZWN1cml0eUtleVB1Ymxp
Y0tleUNyZWRlbnRpYWxBc3NlcnRpb24pOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2Vi
S2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlD
cmVkZW50aWFsTG9naW5DaG9pY2UpOworU09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0UoV2ViS2l0
LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVk
ZW50aWFsUmVnaXN0cmF0aW9uKTsKIAogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2Vi
S2l0LCBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZSwgQVNDQXV0aG9yaXphdGlvbkVycm9yRG9t
YWluLCBOU0Vycm9yRG9tYWluKTsKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYktp
dCwgQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmUsIEFTQ1BJTlZhbGlkYXRpb25SZXN1bHRLZXks
IE5TU3RyaW5nKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9XS0FTQ0F1dGhvcml6YXRpb25QcmVzZW50ZXJEZWxlZ2F0ZS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0
aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCmluZGV4IDdjMjA4ZmYwYWQ1NzAwZWMxN2Ri
NDQzOGI2ODM0OWE0M2NkMjZhOTkuLmYyOTUwZmUzMDY5MTVmMDFjN2RhYjhiMDI5MGQ3MGEzZWM3
OTAzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL1dLQVNDQXV0aG9yaXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dLQVNDQXV0aG9y
aXphdGlvblByZXNlbnRlckRlbGVnYXRlLm1tCkBAIC03OCw3ICs3OCw3IEBAIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAgICAgaWYgKFtsb2dpbkNob2ljZSBpc0tpbmRPZkNsYXNzOldlYktpdDo6
Z2V0QVNDU2VjdXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VDbGFzcygpXSkg
ewogICAgICAgICBhdXRvICpzZWN1cml0eUtleUxvZ2luQ2hvaWNlID0gKEFTQ1NlY3VyaXR5S2V5
UHVibGljS2V5Q3JlZGVudGlhbExvZ2luQ2hvaWNlICopbG9naW5DaG9pY2U7CiAKLSAgICAgICAg
aWYgKFtzZWN1cml0eUtleUxvZ2luQ2hvaWNlIGxvZ2luQ2hvaWNlS2luZF0gPT0gQVNDU2VjdXJp
dHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsTG9naW5DaG9pY2VLaW5kQXNzZXJ0aW9uKSB7CisgICAg
ICAgIGlmIChbc2VjdXJpdHlLZXlMb2dpbkNob2ljZSBjcmVkZW50aWFsS2luZF0gPT0gQVNDU2Vj
dXJpdHlLZXlQdWJsaWNLZXlDcmVkZW50aWFsS2luZEFzc2VydGlvbikgewogICAgICAgICAgICAg
U3RyaW5nIGxvZ2luQ2hvaWNlTmFtZSA9IHNlY3VyaXR5S2V5TG9naW5DaG9pY2UubmFtZTsKICAg
ICAgICAgICAgIFtzZWxmIGRpc3BhdGNoQ29vcmRpbmF0b3JDYWxsYmFjazpbbG9naW5DaG9pY2VO
YW1lID0gV1RGTW92ZShsb2dpbkNob2ljZU5hbWUpXSAoV2ViS2l0OjpBdXRoZW50aWNhdG9yUHJl
c2VudGVyQ29vcmRpbmF0b3ImIGNvb3JkaW5hdG9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAg
ICBjb29yZGluYXRvci5kaWRTZWxlY3RBc3NlcnRpb25SZXNwb25zZShsb2dpbkNob2ljZU5hbWUs
IG5pbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYTI5NzE5YmE3N2RlNDczZGMzZjI0YTQ0
ZDA1YTAyYTk4MzcxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eS5tbQpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBIQVZFKFVOSUZJRURfQVND
X0FVVEhfVUkpCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkuaCIKKworI2ltcG9ydCAiTG9jYWxTZXJ2aWNlLmgiCisjaW1wb3J0
ICJXS0Vycm9yLmgiCisjaW1wb3J0ICJXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPEF1dGhlbnRpY2F0aW9uU2VydmljZXMv
QVNDT1NFQ29uc3RhbnRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4K
KworI2ltcG9ydCAiQXV0aGVudGljYXRpb25TZXJ2aWNlc0NvcmVTb2Z0TGluay5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgaW5saW5l
IFJlZjxBcnJheUJ1ZmZlcj4gdG9BcnJheUJ1ZmZlcihOU0RhdGEgKmRhdGEpCit7CisgICAgcmV0
dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8
TlNEYXRhPiB0b05TRGF0YShjb25zdCBCdWZmZXJTb3VyY2UmIGRhdGEpCit7CisgICAgcmV0dXJu
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3Ro
OmRhdGEubGVuZ3RoKCldKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNEYXRhPiB0
b05TRGF0YShjb25zdCBWZWN0b3I8dWludDhfdD4gdmVjdG9yKQoreworICAgIHJldHVybiBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnZlY3Rvci5kYXRhKCkgbGVuZ3RoOnZl
Y3Rvci5zaXplKCldKTsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8TlNTdHJpbmc+IHRv
TlNTdHJpbmcoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudCkKK3sKKyAgICBzd2l0Y2ggKHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkgewor
ICAgIGNhc2UgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZDoKKyAgICAgICAg
cmV0dXJuIEAicmVxdWlyZWQiOworICAgIGNhc2UgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
OjpEaXNjb3VyYWdlZDoKKyAgICAgICAgcmV0dXJuIEAiZGlzY291cmFnZWQiOworICAgIGNhc2Ug
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBA
InByZWZlcnJlZCI7CisgICAgfQorCisgICAgcmV0dXJuIEAicHJlZmVycmVkIjsKK30KKworc3Rh
dGljIGlubGluZSBFeGNlcHRpb25Db2RlIHRvRXhjZXB0aW9uQ29kZShOU0ludGVnZXIgbnNFcnJv
ckNvZGUpCit7CisgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlID0gKEV4Y2VwdGlvbkNv
ZGUpbnNFcnJvckNvZGU7CisKKyAgICBzd2l0Y2ggKGV4Y2VwdGlvbkNvZGUpIHsKKyAgICBjYXNl
IEluZGV4U2l6ZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEhpZXJhcmNoeVJlcXVlc3RF
cnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBXcm9uZ0RvY3VtZW50RXJyb3I6IEZBTExUSFJP
VUdIOworICAgIGNhc2UgSW52YWxpZENoYXJhY3RlckVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIE5v
dEZvdW5kRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm90U3VwcG9ydGVkRXJyb3I6IEZB
TExUSFJPVUdIOworICAgIGNhc2UgSW5Vc2VBdHRyaWJ1dGVFcnJvcjogRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBJbnZhbGlkU3RhdGVFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBTeW50YXhF
cnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6IEZB
TExUSFJPVUdIOworICAgIGNhc2UgTmFtZXNwYWNlRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNh
c2UgSW52YWxpZEFjY2Vzc0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFR5cGVNaXNtYXRj
aEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFNlY3VyaXR5RXJyb3I6IEZBTExUSFJPVUdI
OworICAgIGNhc2UgTmV0d29ya0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEFib3J0RXJy
b3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgVVJMTWlzbWF0Y2hFcnJvcjogRkFMTFRIUk9VR0g7
CisgICAgY2FzZSBRdW90YUV4Y2VlZGVkRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgVGlt
ZW91dEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEludmFsaWROb2RlVHlwZUVycm9yOiBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIERhdGFDbG9uZUVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIEVuY29kaW5nRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgTm90UmVhZGFibGVFcnJv
cjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBVbmtub3duRXJyb3I6IEZBTExUSFJPVUdIOworICAg
IGNhc2UgQ29uc3RyYWludEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIERhdGFFcnJvcjog
RkFMTFRIUk9VR0g7CisgICAgY2FzZSBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IEZBTExUSFJP
VUdIOworICAgIGNhc2UgUmVhZG9ubHlFcnJvcjogRkFMTFRIUk9VR0g7CisgICAgY2FzZSBWZXJz
aW9uRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgT3BlcmF0aW9uRXJyb3I6IEZBTExUSFJP
VUdIOworICAgIGNhc2UgTm90QWxsb3dlZEVycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJh
bmdlRXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgVHlwZUVycm9yOiBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIEpTU3ludGF4RXJyb3I6IEZBTExUSFJPVUdIOworICAgIGNhc2UgU3RhY2tPdmVy
Zmxvd0Vycm9yOiBGQUxMVEhST1VHSDsKKyAgICBjYXNlIE91dE9mTWVtb3J5RXJyb3I6IEZBTExU
SFJPVUdIOworICAgIGNhc2UgRXhpc3RpbmdFeGNlcHRpb25FcnJvcjoKKyAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbkNvZGU7CisgICAgfQorCisgICAgcmV0dXJuIE5vdEFsbG93ZWRFcnJvcjsKK30K
Kworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8QVNDUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3I+IHRvQVNDRGVzY3JpcHRvcihQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlw
dG9yKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1N0cmluZyAqPj4gdHJhbnNw
b3J0czsKKyAgICBzaXplX3QgdHJhbnNwb3J0Q291bnQgPSBkZXNjcmlwdG9yLnRyYW5zcG9ydHMu
c2l6ZSgpOworICAgIGlmICh0cmFuc3BvcnRDb3VudCkgeworICAgICAgICB0cmFuc3BvcnRzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRyYW5zcG9y
dENvdW50XSk7CisKKyAgICAgICAgZm9yIChBdXRoZW50aWNhdG9yVHJhbnNwb3J0IHRyYW5zcG9y
dCA6IGRlc2NyaXB0b3IudHJhbnNwb3J0cykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnRyYW5z
cG9ydFN0cmluZyA9IG5pbDsKKyAgICAgICAgICAgIHN3aXRjaCAodHJhbnNwb3J0KSB7CisgICAg
ICAgICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjoKKyAgICAgICAgICAgICAg
ICB0cmFuc3BvcnRTdHJpbmcgPSBAInVzYiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYzoKKyAgICAgICAgICAgICAg
ICB0cmFuc3BvcnRTdHJpbmcgPSBAIm5mYyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkJsZToKKyAgICAgICAgICAgICAg
ICB0cmFuc3BvcnRTdHJpbmcgPSBAImJsZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsOgorICAgICAgICAg
ICAgICAgIHRyYW5zcG9ydFN0cmluZyA9IEAiaW50ZXJuYWwiOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNwb3J0U3RyaW5nKQor
ICAgICAgICAgICAgICAgIFt0cmFuc3BvcnRzIGFkZE9iamVjdDp0cmFuc3BvcnRTdHJpbmddOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jQVNDUHVibGljS2V5
Q3JlZGVudGlhbERlc2NyaXB0b3JJbnN0YW5jZSgpIGluaXRXaXRoQ3JlZGVudGlhbElEOnRvTlNE
YXRhKGRlc2NyaXB0b3IuaWRWZWN0b3IpLmdldCgpIHRyYW5zcG9ydHM6dHJhbnNwb3J0cy5nZXQo
KV0pOworfQorCitzdGF0aWMgUmV0YWluUHRyPEFTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dD4g
Y29uZmlndXJlUmVnaXN0cmF0aW9uUmVxdWVzdENvbnRleHQoY29uc3QgUHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU0NDcmVkZW50aWFsUmVxdWVz
dFR5cGVzIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlwZVBsYXRmb3JtUHVi
bGljS2V5UmVnaXN0cmF0aW9uIHwgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQ
dWJsaWNLZXlSZWdpc3RyYXRpb247CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVzZXJWZXJp
ZmljYXRpb247CisgICAgYm9vbCBzaG91bGRSZXF1aXJlUmVzaWRlbnRLZXkgPSBmYWxzZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhl
bnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYT4gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IG9wdGlv
bnMuYXV0aGVudGljYXRvclNlbGVjdGlvbjsKKyAgICBpZiAoYXV0aGVudGljYXRvclNlbGVjdGlv
bikgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBhdHRh
Y2htZW50ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQ7
CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0
Zm9ybSkKKyAgICAgICAgICAgIHJlcXVlc3RUeXBlcyA9IEFTQ0NyZWRlbnRpYWxSZXF1ZXN0VHlw
ZVBsYXRmb3JtUHVibGljS2V5UmVnaXN0cmF0aW9uOworICAgICAgICBlbHNlIGlmIChhdHRhY2ht
ZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtKQorICAgICAgICAg
ICAgcmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJs
aWNLZXlSZWdpc3RyYXRpb247CisKKyAgICAgICAgdXNlclZlcmlmaWNhdGlvbiA9IHRvTlNTdHJp
bmcoYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbik7CisKKyAgICAgICAg
c2hvdWxkUmVxdWlyZVJlc2lkZW50S2V5ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWly
ZVJlc2lkZW50S2V5OworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdENvbnRleHQgPSBhZG9wdE5T
KFthbGxvY0FTQ0NyZWRlbnRpYWxSZXF1ZXN0Q29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhSZXF1
ZXN0VHlwZXM6cmVxdWVzdFR5cGVzXSk7CisgICAgW3JlcXVlc3RDb250ZXh0IHNldFJlbHlpbmdQ
YXJ0eUlkZW50aWZpZXI6b3B0aW9ucy5ycC5pZF07CisKKyAgICBhdXRvIGNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgPSBhZG9wdE5TKFthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnNJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zIHNldENoYWxsZW5nZTp0b05TRGF0YShvcHRpb25zLmNoYWxsZW5nZSkuZ2V0KCldOworICAg
IFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFJlbHlpbmdQYXJ0eUlkZW50aWZpZXI6b3B0
aW9ucy5ycC5pZF07CisgICAgW2NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgc2V0VXNlck5hbWU6
b3B0aW9ucy51c2VyLm5hbWVdOworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFVz
ZXJJZGVudGlmaWVyOnRvTlNEYXRhKG9wdGlvbnMudXNlci5pZCkuZ2V0KCldOworICAgIFtjcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFVzZXJEaXNwbGF5TmFtZTpvcHRpb25zLnVzZXIuZGlz
cGxheU5hbWVdOworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFVzZXJWZXJpZmlj
YXRpb25QcmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24uZ2V0KCldOworICAgIFtjcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zIHNldFNob3VsZFJlcXVpcmVSZXNpZGVudEtleTpzaG91bGRSZXF1aXJl
UmVzaWRlbnRLZXldOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PE5TTnVtYmVyICo+
PiBzdXBwb3J0ZWRBbGdvcml0aG1JZGVudGlmaWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnB1YktleUNyZWRQYXJhbXMuc2l6ZSgp
XSk7CisgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0
ZXJzIGFsZ29yaXRobVBhcmFtZXRlciA6IG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcykKKyAgICAg
ICAgW3N1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzIGFkZE9iamVjdDpAKGFsZ29yaXRobVBh
cmFtZXRlci5hbGcpXTsKKworICAgIFtjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHNldFN1cHBv
cnRlZEFsZ29yaXRobUlkZW50aWZpZXJzOnN1cHBvcnRlZEFsZ29yaXRobUlkZW50aWZpZXJzLmdl
dCgpXTsKKworICAgIHNpemVfdCBleGNsdWRlZENyZWRlbnRpYWxDb3VudCA9IG9wdGlvbnMuZXhj
bHVkZUNyZWRlbnRpYWxzLnNpemUoKTsKKyAgICBpZiAoZXhjbHVkZWRDcmVkZW50aWFsQ291bnQp
IHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PEFTQ1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yICo+PiBleGNsdWRlZENyZWRlbnRpYWxzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmV4Y2x1ZGVkQ3JlZGVudGlhbENvdW50XSk7
CisKKyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBkZXNjcmlwdG9y
IDogb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAgICAgICAgICBbZXhjbHVkZWRDcmVk
ZW50aWFscyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2NyaXB0b3IpLmdldCgpXTsKKwor
ICAgICAgICBbY3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBzZXRFeGNsdWRlZENyZWRlbnRpYWxz
OmV4Y2x1ZGVkQ3JlZGVudGlhbHMuZ2V0KCldOworICAgIH0KKworICAgIGlmIChyZXF1ZXN0VHlw
ZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleVJlZ2lzdHJhdGlv
bikKKyAgICAgICAgW3JlcXVlc3RDb250ZXh0IHNldFBsYXRmb3JtS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uczpjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmdldCgpXTsKKworICAgIGlmIChy
ZXF1ZXN0VHlwZXMgJiBBU0NDcmVkZW50aWFsUmVxdWVzdFR5cGVTZWN1cml0eUtleVB1YmxpY0tl
eVJlZ2lzdHJhdGlvbikKKyAgICAgICAgW3JlcXVlc3RDb250ZXh0IHNldFNlY3VyaXR5S2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczpjcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmdldCgpXTsK
KworICAgIHJldHVybiByZXF1ZXN0Q29udGV4dDsKK30KKworc3RhdGljIFJldGFpblB0cjxBU0ND
cmVkZW50aWFsUmVxdWVzdENvbnRleHQ+IGNvbmZpZ3VyYXRpb25Bc3NlcnRpb25SZXF1ZXN0Q29u
dGV4dChjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlcyByZXF1ZXN0VHlwZXMgPSBBU0NDcmVkZW50
aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbiB8IEFTQ0NyZWRlbnRpYWxS
ZXF1ZXN0VHlwZVNlY3VyaXR5S2V5UHVibGljS2V5QXNzZXJ0aW9uOworCisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiB1c2VyVmVyaWZpY2F0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8QXV0aGVudGlj
YXRvckF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBvcHRpb25zLmF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OworICAgIGlmIChhdHRhY2htZW50ID09IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0
Zm9ybSkKKyAgICAgICAgcmVxdWVzdFR5cGVzID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlUGxh
dGZvcm1QdWJsaWNLZXlBc3NlcnRpb247CisgICAgZWxzZSBpZiAoYXR0YWNobWVudCA9PSBBdXRo
ZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0Zm9ybSkKKyAgICAgICAgcmVxdWVzdFR5cGVz
ID0gQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb247
CisKKyAgICB1c2VyVmVyaWZpY2F0aW9uID0gdG9OU1N0cmluZyhvcHRpb25zLnVzZXJWZXJpZmlj
YXRpb24pOworCisgICAgc2l6ZV90IGFsbG93ZWRDcmVkZW50aWFsQ291bnQgPSBvcHRpb25zLmFs
bG93Q3JlZGVudGlhbHMuc2l6ZSgpOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxBU0NQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPj4gYWxsb3dlZENyZWRlbnRpYWxzOworICAg
IGlmIChhbGxvd2VkQ3JlZGVudGlhbENvdW50KSB7CisgICAgICAgIGFsbG93ZWRDcmVkZW50aWFs
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTphbGxv
d2VkQ3JlZGVudGlhbENvdW50XSk7CisKKyAgICAgICAgZm9yIChQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKQorICAgICAg
ICAgICAgW2FsbG93ZWRDcmVkZW50aWFscyBhZGRPYmplY3Q6dG9BU0NEZXNjcmlwdG9yKGRlc2Ny
aXB0b3IpLmdldCgpXTsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3RDb250ZXh0ID0gYWRvcHRO
UyhbYWxsb2NBU0NDcmVkZW50aWFsUmVxdWVzdENvbnRleHRJbnN0YW5jZSgpIGluaXRXaXRoUmVx
dWVzdFR5cGVzOnJlcXVlc3RUeXBlc10pOworICAgIFtyZXF1ZXN0Q29udGV4dCBzZXRSZWx5aW5n
UGFydHlJZGVudGlmaWVyOm9wdGlvbnMucnBJZF07CisKKyAgICBhdXRvIGNoYWxsZW5nZSA9IHRv
TlNEYXRhKG9wdGlvbnMuY2hhbGxlbmdlKTsKKworICAgIGlmIChyZXF1ZXN0VHlwZXMgJiBBU0ND
cmVkZW50aWFsUmVxdWVzdFR5cGVQbGF0Zm9ybVB1YmxpY0tleUFzc2VydGlvbikKKyAgICAgICAg
W3JlcXVlc3RDb250ZXh0IHNldFBsYXRmb3JtS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnM6
W2FsbG9jQVNDUHVibGljS2V5Q3JlZGVudGlhbEFzc2VydGlvbk9wdGlvbnNJbnN0YW5jZSgpIGlu
aXRXaXRoS2luZDpBU0NQdWJsaWNLZXlDcmVkZW50aWFsS2luZFBsYXRmb3JtIHJlbHlpbmdQYXJ0
eUlkZW50aWZpZXI6b3B0aW9ucy5ycElkIGNoYWxsZW5nZTpjaGFsbGVuZ2UuZ2V0KCkgdXNlclZl
cmlmaWNhdGlvblByZWZlcmVuY2U6dXNlclZlcmlmaWNhdGlvbi5nZXQoKSBhbGxvd2VkQ3JlZGVu
dGlhbHM6YWxsb3dlZENyZWRlbnRpYWxzLmdldCgpXV07CisKKyAgICBpZiAocmVxdWVzdFR5cGVz
ICYgQVNDQ3JlZGVudGlhbFJlcXVlc3RUeXBlU2VjdXJpdHlLZXlQdWJsaWNLZXlBc3NlcnRpb24p
CisgICAgICAgIFtyZXF1ZXN0Q29udGV4dCBzZXRTZWN1cml0eUtleUNyZWRlbnRpYWxBc3NlcnRp
b25PcHRpb25zOlthbGxvY0FTQ1B1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb25PcHRpb25zSW5z
dGFuY2UoKSBpbml0V2l0aEtpbmQ6QVNDUHVibGljS2V5Q3JlZGVudGlhbEtpbmRTZWN1cml0eUtl
eSByZWx5aW5nUGFydHlJZGVudGlmaWVyOm9wdGlvbnMucnBJZCBjaGFsbGVuZ2U6Y2hhbGxlbmdl
LmdldCgpIHVzZXJWZXJpZmljYXRpb25QcmVmZXJlbmNlOnVzZXJWZXJpZmljYXRpb24uZ2V0KCkg
YWxsb3dlZENyZWRlbnRpYWxzOmFsbG93ZWRDcmVkZW50aWFscy5nZXQoKV1dOworCisgICAgcmV0
dXJuIHJlcXVlc3RDb250ZXh0OworfQorCit2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5OjptYWtlQ3JlZGVudGlhbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJZCwgRnJhbWVJbmZv
RGF0YSYmIGZyYW1lSW5mbywgVmVjdG9yPHVpbnQ4X3Q+JiYgaGFzaCwgUHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9ucyYmIG9wdGlvbnMsIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
LCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIGF1dG8gcmVxdWVz
dENvbnRleHQgPSBjb25maWd1cmVSZWdpc3RyYXRpb25SZXF1ZXN0Q29udGV4dChvcHRpb25zKTsK
KyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0Q29udGV4dCwgV1RGTW92ZShoYW5kbGVyKSk7Cit9
CisKK3ZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OmdldEFzc2VydGlvbihG
cmFtZUlkZW50aWZpZXIgZnJhbWVJZCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgVmVjdG9y
PHVpbnQ4X3Q+JiYgaGFzaCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiYgb3B0
aW9ucywgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxl
ciYmIGhhbmRsZXIpCit7CisgICAgYXV0byByZXF1ZXN0Q29udGV4dCA9IGNvbmZpZ3VyYXRpb25B
c3NlcnRpb25SZXF1ZXN0Q29udGV4dChvcHRpb25zKTsKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1
ZXN0Q29udGV4dCwgV1RGTW92ZShoYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHk6OnBlcmZvcm1SZXF1ZXN0KFJldGFpblB0cjxBU0NDcmVkZW50aWFs
UmVxdWVzdENvbnRleHQ+IHJlcXVlc3RDb250ZXh0LCBSZXF1ZXN0Q29tcGxldGlvbkhhbmRsZXIm
JiBoYW5kbGVyKQoreworICAgIGF1dG8gcHJveHkgPSBhZG9wdE5TKFthbGxvY0FTQ0FnZW50UHJv
eHlJbnN0YW5jZSgpIGluaXRdKTsKKworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gd2luZG93ID0g
bV93ZWJQYWdlUHJveHkucGxhdGZvcm1XaW5kb3coKTsKKyAgICBbcHJveHkgcGVyZm9ybUF1dGhv
cml6YXRpb25SZXF1ZXN0c0ZvckNvbnRleHQ6cmVxdWVzdENvbnRleHQuZ2V0KCkgd2l0aENsZWFy
YW5jZUhhbmRsZXI6bWFrZUJsb2NrUHRyKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
aGFuZGxlciA9IFdURk1vdmUoaGFuZGxlciksIHdpbmRvdyA9IFdURk1vdmUod2luZG93KV0oTlNY
UENMaXN0ZW5lckVuZHBvaW50ICpkYWVtb25FbnBvaW50LCBOU0Vycm9yICplcnJvcikgbXV0YWJs
ZSB7CisgICAgICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IHdlYWtUaGlzLmdldCgpOworCisgICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcyB8fCAhZGFlbW9uRW5wb2ludCkgeworICAgICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtoYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsgfSwgKEF1dGhlbnRpY2F0b3JBdHRh
Y2htZW50KTAsIEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3IsICJPcGVyYXRpb24gZmFp
bGVkLiIgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcHJlc2VudGVyID0gYWRvcHROUyhbYWxsb2NB
U0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVySW5zdGFuY2UoKSBpbml0XSk7CisgICAgICAg
IFtwcm90ZWN0ZWRUaGlzLT5tX3ByZXNlbnRlciBwcmVzZW50V2l0aFdpbmRvdzp3aW5kb3cuZ2V0
KCkgZGFlbW9uRW5kcG9pbnQ6ZGFlbW9uRW5wb2ludCBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoW2hhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpXShpZCA8QVNDQ3JlZGVudGlhbFByb3Rv
Y29sPiBjcmVkZW50aWFsLCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBB
dXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhIHJlc3BvbnNlID0geyB9OworICAgICAgICAgICAgQXV0
aGVudGljYXRvckF0dGFjaG1lbnQgYXR0YWNobWVudDsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkRh
dGEgZXhjZXB0aW9uRGF0YSA9IHsgfTsKKworICAgICAgICAgICAgaWYgKFtjcmVkZW50aWFsIGlz
S2luZE9mQ2xhc3M6Z2V0QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9u
Q2xhc3MoKV0pIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OlBsYXRmb3JtOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmlzQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgPSB0cnVlOworCisgICAgICAgICAgICAgICAgQVNDUGxh
dGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsUmVnaXN0cmF0aW9uICpyZWdpc3RyYXRpb25DcmVkZW50
aWFsID0gY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5yYXdJZCA9IHRvQXJy
YXlCdWZmZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5jcmVkZW50aWFsSUQpOworICAgICAgICAg
ICAgICAgIHJlc3BvbnNlLmF0dGVzdGF0aW9uT2JqZWN0ID0gdG9BcnJheUJ1ZmZlcihyZWdpc3Ry
YXRpb25DcmVkZW50aWFsLmF0dGVzdGF0aW9uT2JqZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFzczpnZXRBU0NTZWN1cml0eUtleVB1YmxpY0tleUNy
ZWRlbnRpYWxSZWdpc3RyYXRpb25DbGFzcygpXSkgeworICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0Zm9ybTsKKyAgICAgICAgICAg
ICAgICByZXNwb25zZS5pc0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIEFTQ1NlY3VyaXR5S2V5UHVibGljS2V5Q3JlZGVudGlhbFJlZ2lz
dHJhdGlvbiAqcmVnaXN0cmF0aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAg
ICAgICAgcmVzcG9uc2UucmF3SWQgPSB0b0FycmF5QnVmZmVyKHJlZ2lzdHJhdGlvbkNyZWRlbnRp
YWwuY3JlZGVudGlhbElEKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hdHRlc3RhdGlvbk9i
amVjdCA9IHRvQXJyYXlCdWZmZXIocmVnaXN0cmF0aW9uQ3JlZGVudGlhbC5hdHRlc3RhdGlvbk9i
amVjdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFtjcmVkZW50aWFsIGlzS2luZE9mQ2xhc3M6
Z2V0QVNDUGxhdGZvcm1QdWJsaWNLZXlDcmVkZW50aWFsQXNzZXJ0aW9uQ2xhc3MoKV0pIHsKKyAg
ICAgICAgICAgICAgICBhdHRhY2htZW50ID0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRm
b3JtOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLmlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9u
UmVzcG9uc2UgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIEFTQ1BsYXRmb3JtUHVibGljS2V5
Q3JlZGVudGlhbEFzc2VydGlvbiAqYXNzZXJ0aW9uQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2UucmF3SWQgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNy
ZWRlbnRpYWwuY3JlZGVudGlhbElEKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hdXRoZW50
aWNhdG9yRGF0YSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5hdXRoZW50aWNh
dG9yRGF0YSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2lnbmF0dXJlID0gdG9BcnJheUJ1
ZmZlcihhc3NlcnRpb25DcmVkZW50aWFsLnNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgcmVz
cG9uc2UudXNlckhhbmRsZSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC51c2Vy
SGFuZGxlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoW2NyZWRlbnRpYWwgaXNLaW5kT2ZDbGFz
czpnZXRBU0NTZWN1cml0eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb25DbGFzcygpXSkg
eworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6
Q3Jvc3NQbGF0Zm9ybTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5pc0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBBU0NTZWN1cml0
eUtleVB1YmxpY0tleUNyZWRlbnRpYWxBc3NlcnRpb24gKmFzc2VydGlvbkNyZWRlbnRpYWwgPSBj
cmVkZW50aWFsOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJhd0lkID0gdG9BcnJheUJ1ZmZl
cihhc3NlcnRpb25DcmVkZW50aWFsLmNyZWRlbnRpYWxJRCk7CisgICAgICAgICAgICAgICAgcmVz
cG9uc2UuYXV0aGVudGljYXRvckRhdGEgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNyZWRlbnRp
YWwuYXV0aGVudGljYXRvckRhdGEpOworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNpZ25hdHVy
ZSA9IHRvQXJyYXlCdWZmZXIoYXNzZXJ0aW9uQ3JlZGVudGlhbC5zaWduYXR1cmUpOworICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLnVzZXJIYW5kbGUgPSB0b0FycmF5QnVmZmVyKGFzc2VydGlvbkNy
ZWRlbnRpYWwudXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnQgPSAoQXV0aGVudGljYXRvckF0dGFjaG1lbnQpIDA7CisgICAgICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlOworICAgICAgICAgICAgICAgIE5TU3Ry
aW5nICplcnJvck1lc3NhZ2UgPSBuaWw7CisgICAgICAgICAgICAgICAgaWYgKFtlcnJvci5kb21h
aW4gaXNFcXVhbFRvU3RyaW5nOldLRXJyb3JEb21haW5dKSB7CisgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkNvZGUgPSB0b0V4Y2VwdGlvbkNvZGUoZXJyb3IuY29kZSk7CisgICAgICAgICAg
ICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLnVzZXJJbmZvW05TTG9jYWxpemVkRGVzY3Jp
cHRpb25LZXldOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkNvZGUgPSBOb3RBbGxvd2VkRXJyb3I7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKFtlcnJvci5kb21haW4gaXNFcXVhbFRvU3RyaW5nOkFTQ0F1dGhvcml6YXRpb25FcnJvckRv
bWFpbl0gJiYgZXJyb3IuY29kZSA9PSBBU0NBdXRob3JpemF0aW9uRXJyb3JVc2VyQ2FuY2VsZWQp
CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBAIlRoaXMgcmVxdWVzdCBo
YXMgYmVlbiBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuIjsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gQCJPcGVyYXRpb24gZmFp
bGVkLiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uRGF0
YSA9IHsgZXhjZXB0aW9uQ29kZSwgZXJyb3JNZXNzYWdlIH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGhhbmRsZXIocmVzcG9uc2UsIGF0dGFjaG1lbnQsIGV4Y2VwdGlvbkRhdGEpOwor
ICAgICAgICB9KS5nZXQoKV07CisgICAgfSkuZ2V0KCldOworfQorCit2b2lkIFdlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0
b3JBdmFpbGFibGUoUXVlcnlDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgaWYg
KFtnZXRBU0NXZWJLaXRTUElTdXBwb3J0Q2xhc3MoKSBzaG91bGRVc2VBbHRlcm5hdGVDcmVkZW50
aWFsU3RvcmVdKSB7CisgICAgICAgIGhhbmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBoYW5kbGVyKExvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHku
Y3BwCmluZGV4IDFjYTBkZTA0ZTAxY2FhMDM0N2M1NTI5MTQ5MWVlYmQyNDdkNDdkYjQuLjE5NjI4
NTRiZGY0YTgyM2FiYmFiMDRmNTBiYzVmZDdhMTMwZTFiMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTU1LDYgKzU1LDcg
QEAgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6On5XZWJBdXRoZW50aWNhdG9yQ29v
cmRpbmF0b3JQcm94eSgpCiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCkpOwogfQogCisj
aWYgIUhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6Om1ha2VDcmVkZW50aWFsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlkLCBGcmFt
ZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBWZWN0b3I8dWludDhfdD4mJiBoYXNoLCBQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiYgb3B0aW9ucywgYm9vbCBwcm9jZXNzaW5nVXNlckdl
c3R1cmUsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgaGFuZGxl
UmVxdWVzdCh7IFdURk1vdmUoaGFzaCksIFdURk1vdmUob3B0aW9ucyksIG1ha2VXZWFrUHRyKG1f
d2ViUGFnZVByb3h5KSwgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUs
IG51bGxwdHIsIEdsb2JhbEZyYW1lSWRlbnRpZmllciB7IG1fd2ViUGFnZVByb3h5LndlYlBhZ2VJ
RCgpLCBmcmFtZUlkIH0sIFdURk1vdmUoZnJhbWVJbmZvKSwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
LCBTdHJpbmcoKSwgbnVsbHB0ciB9LCBXVEZNb3ZlKGhhbmRsZXIpKTsKQEAgLTY0LDYgKzY1LDcg
QEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6Z2V0QXNzZXJ0aW9uKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlkLCBGcmEKIHsKICAgICBoYW5kbGVSZXF1ZXN0KHsgV1RGTW92
ZShoYXNoKSwgV1RGTW92ZShvcHRpb25zKSwgbWFrZVdlYWtQdHIobV93ZWJQYWdlUHJveHkpLCBX
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgR2xvYmFs
RnJhbWVJZGVudGlmaWVyIHsgbV93ZWJQYWdlUHJveHkud2ViUGFnZUlEKCksIGZyYW1lSWQgfSwg
V1RGTW92ZShmcmFtZUluZm8pLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIFN0cmluZygpLCBudWxs
cHRyIH0sIFdURk1vdmUoaGFuZGxlcikpOwogfQorI2VuZGlmCiAKIHZvaWQgV2ViQXV0aGVudGlj
YXRvckNvb3JkaW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRpb25SZXF1
ZXN0RGF0YSYmIGRhdGEsIFJlcXVlc3RDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CkBA
IC03OCwxMCArODAsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6
aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXQKICAgICBtX3dlYlBhZ2VQ
cm94eS53ZWJzaXRlRGF0YVN0b3JlKCkuYXV0aGVudGljYXRvck1hbmFnZXIoKS5oYW5kbGVSZXF1
ZXN0KFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAorI2lmICFIQVZFKFVO
SUZJRURfQVNDX0FVVEhfVUkpCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5
Ojppc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoUXVlcnlDb21w
bGV0aW9uSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgaGFuZGxlcihMb2NhbFNlcnZpY2U6Omlz
QXZhaWxhYmxlKCkpOwogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaAppbmRleCA1
M2Y5NzNiNWE3NGRiMmM2OWEzNmMyYWU2YjJjY2Q4NzllNDIyYjhhLi42Njg3N2ZkMTA2OGE0ZTUz
MWE4ZDgyNTAyMmQzOTFjMDQ2ODg0OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKQEAgLTQxLDYgKzQxLDExIEBAIHN0cnVjdCBQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwogfQogCisjaWYgSEFWRShVTklGSUVEX0FTQ19BVVRIX1VJKQorT0JKQ19DTEFTUyBBU0NBdXRo
b3JpemF0aW9uUmVtb3RlUHJlc2VudGVyOworT0JKQ19DTEFTUyBBU0NDcmVkZW50aWFsUmVxdWVz
dENvbnRleHQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQ
cm94eTsKQEAgLTQ4LDcgKzUzLDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IEZyYW1l
SW5mb0RhdGE7CiBzdHJ1Y3QgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKIAotY2xhc3Mg
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK2NsYXNzIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5IDogcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eSk7
CiBwdWJsaWM6CkBAIC03MCw2ICs3NSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlUmVx
dWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiYsIFJlcXVlc3RDb21wbGV0aW9uSGFu
ZGxlciYmKTsKIAogICAgIFdlYlBhZ2VQcm94eSYgbV93ZWJQYWdlUHJveHk7CisKKyNpZiBIQVZF
KFVOSUZJRURfQVNDX0FVVEhfVUkpCisgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChSZXRhaW5QdHI8
QVNDQ3JlZGVudGlhbFJlcXVlc3RDb250ZXh0PiwgUmVxdWVzdENvbXBsZXRpb25IYW5kbGVyJiYp
OworICAgIFJldGFpblB0cjxBU0NBdXRob3JpemF0aW9uUmVtb3RlUHJlc2VudGVyPiBtX3ByZXNl
bnRlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tIb3ZlclBsYXR0ZXJQYXJhbWV0ZXJzLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSG92ZXJQbGF0dGVyUGFyYW1ldGVycy5tbQpp
bmRleCBmODQwOGM3NDE5Y2I5NmZhNWRjZWZlZGRiNjI4OTI3ZDM0M2U4MWNjLi44NDY2YmNiOThj
ZGU5OGJjNmM5OWYzYmM0NzExNGJhOTU2NzU3NzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tIb3ZlclBsYXR0ZXJQYXJhbWV0ZXJzLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0hvdmVyUGxhdHRlclBhcmFtZXRlcnMubW0KQEAgLTI5LDYg
KzI5LDggQEAKICNpZiBIQVZFKFVJS0lUX1dJVEhfTU9VU0VfU1VQUE9SVCkgfHwgRU5BQkxFKEhP
VkVSX0dFU1RVUkVfUkVDT0dOSVpFUikKIAogI2ltcG9ydCAiUHJvdG90eXBlVG9vbHNTUEkuaCIK
KyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCiBAaW50ZXJmYWNlIFBUU2xpZGVyUm93IChXZWJLaXQpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlMzFjMzBk
NDhiZmZhM2JhOTBkODk3N2YwYzBjMWVmNmM0MjdkOWQuLjNkMDM4NTM1YTI4MGM3MGFmNzE2OGU4
NzU3YWIzNzhlM2EwY2Q5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMjUyNSw2ICsyNTI1LDcgQEAKIAkJMDdFMTlGMDkyM0Q1MzNC
QTAwOTRGRkI0IC8qIFRleHRUcmFja1ByaXZhdGVSZW1vdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dFRyYWNrUHJpdmF0ZVJlbW90ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY3
RDZBNUZFODQwMzA3QzAyQUFDMDcgLyogQXBwS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1l
ID0gQXBwS2l0LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Fw
cEtpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTA4OUMxNjY3
RkU4NDExNThDMDJBQUMwNyAvKiBlbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Quc3RyaW5nczsgbmFt
ZSA9IGVuOyBwYXRoID0gZW4ubHByb2ovSW5mb1BsaXN0LnN0cmluZ3M7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBEQ0JGNEQ5MjZFMkVEMzIwMEVBMEUwNyAvKiBXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RTk3RDc0QzIwMEU4RkYzMDBCRjY2NDMgLyogU2FmZUJyb3dzaW5nU1BJLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNhZmVCcm93c2luZ1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRURF
ODUwMjIwMDRFNzQ5MDAwMzA1NjAgLyogV2Vic2l0ZVBvcFVwUG9saWN5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYnNpdGVQb3BVcFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjA0MTU5ODIzQzdDQzcyMDA2MEEzRTIgLyogV0tTY3JvbGxWaWV3TWFjLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2Nyb2xsVmlld01hYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTMzMSw2ICs5MzMyLDcgQEAKIAkJCQk1NzBEQUFBRDIzMDI2RjVDMDBF
OEZDMDQgLyogTmZjU2VydmljZS5tbSAqLywKIAkJCQk1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkg
LyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovLAogCQkJCTU3N0ZGNzg0MjM0NkVD
QUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tICovLAorCQkJCTBE
Q0JGNEQ5MjZFMkVEMzIwMEVBMEUwNyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eS5tbSAqLywKIAkJCQk1Nzc3Mzk5MzI1ODAzODhGMDA1OTM0OEIgLyogV0tBU0NBdXRob3JpemF0
aW9uUHJlc2VudGVyRGVsZWdhdGUuaCAqLywKIAkJCQk1Nzc3Mzk5NDI1ODAzODhGMDA1OTM0OEIg
LyogV0tBU0NBdXRob3JpemF0aW9uUHJlc2VudGVyRGVsZWdhdGUubW0gKi8sCiAJCQkJNTcwREFB
QzQyMzAzN0Y3RTAwRThGQzA0IC8qIFdLTkZSZWFkZXJTZXNzaW9uRGVsZWdhdGUuaCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJB
dXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKaW5kZXggZDU0
NThlZGJmNDQ1MWNhNTg4ZTlkZmU0N2IyY2FlYWM1NTU1YTY5Yy4uMWIxMjgwOWY4NDkxOThmOWEz
YzcyNmYwYmE2NjFjMzgxZDc5YmQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvci5jcHAKQEAgLTY5LDcgKzY5LDEyIEBAIHZvaWQgV2ViQXV0aGVudGlj
YXRvckNvb3JkaW5hdG9yOjptYWtlQ3JlZGVudGlhbChjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0
IFNlY3VyCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZnJhbWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwot
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRo
ZW50aWNhdGlvbk1vZGVybkVuYWJsZWQoKSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9V
SSkKKyAgICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29s
IHVzZVdlYkF1dGhuUHJvY2VzcyA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAo
IXVzZVdlYkF1dGhuUHJvY2VzcykgewogICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6TWFrZUNyZWRl
bnRpYWwod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgaGFzaCwgb3B0aW9u
cywgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTg2LDcgKzkxLDEyIEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yOjpnZXRBc3NlcnRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBTZWN1cml0
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBw
cm9jZXNzaW5nVXNlckdlc3R1cmUoZnJhbWUsIHdlYkZyYW1lLT5mcmFtZUlEKCkpOwotICAgIGlm
ICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBdXRoZW50aWNh
dGlvbk1vZGVybkVuYWJsZWQoKSkgeworI2lmIEhBVkUoVU5JRklFRF9BU0NfQVVUSF9VSSkKKyAg
ICBib29sIHVzZVdlYkF1dGhuUHJvY2VzcyA9IGZhbHNlOworI2Vsc2UKKyAgICBib29sIHVzZVdl
YkF1dGhuUHJvY2VzcyA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQXV0aGVudGljYXRpb25Nb2Rlcm5FbmFibGVkKCk7CisjZW5kaWYKKyAgICBpZiAoIXVzZVdl
YkF1dGhuUHJvY2VzcykgewogICAgICAgICBtX3dlYlBhZ2Uuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6R2V0QXNzZXJ0aW9uKHdl
YkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIGhhc2gsIG9wdGlvbnMsIGlzUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKSwgV1RGTW92ZShoYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC05OCw3ICsxMDgsMTIgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0
b3I6OmdldEFzc2VydGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNlY3VyaXQKIAogdm9p
ZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0
aGVudGljYXRvckF2YWlsYWJsZShRdWVyeUNvbXBsZXRpb25IYW5kbGVyJiYgaGFuZGxlcikKIHsK
LSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0
aGVudGljYXRpb25Nb2Rlcm5FbmFibGVkKCkpIHsKKyNpZiBIQVZFKFVOSUZJRURfQVNDX0FVVEhf
VUkpCisgICAgYm9vbCB1c2VXZWJBdXRoblByb2Nlc3MgPSBmYWxzZTsKKyNlbHNlCisgICAgYm9v
bCB1c2VXZWJBdXRoblByb2Nlc3MgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkF1dGhlbnRpY2F0aW9uTW9kZXJuRW5hYmxlZCgpOworI2VuZGlmCisgICAgaWYg
KCF1c2VXZWJBdXRoblByb2Nlc3MpIHsKICAgICAgICAgbV93ZWJQYWdlLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk6OklzVXNlclZl
cmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSgpLCBXVEZNb3ZlKGhhbmRsZXIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlNTE0NTdhYjNmODQxODQ3NjM4NWYyMWIyYTM0MjRjMTYx
NzU4N2E1Li5mMDk1YWY4MGY5YzhhOGY2YWVmNTBiZDk1YTkwMGE1ZjIwOTQ4YjE3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMjEtMDktMjggIEdhcnJldHQgRGF2aWRzb24gIDxnYXJyZXR0X2Rhdmlkc29uQGFwcGxl
LmNvbT4KKworICAgICAgICBBZG9wdCBwbGF0Zm9ybSBVSSBmb3IgV2ViQXV0aG4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDkwNgorICAgICAgICA8
cmRhcjovLzc0NjU5NTU2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSB0aGUgdGltZW91dCB0ZXN0IHRvIGV4cGVjdCBOb3RBbGxvd2VkRXJy
b3IsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBlcnJvcgorICAgICAgICBjb2RlIHdoZW4gYSB0aW1l
b3V0IG9jY3VycywgcGVyIFN0ZXAgMjEgb2YgdGhlICJDcmVhdGUgYSBOZXcgQ3JlZGVudGlhbCIK
KyAgICAgICAgYWxnb3JpdGhtLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjEtMTAtMTIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2UgU1RMIGluc3RlYWQgb2YgV1RGOjpnZXRfaWYs
IFdURjo6TW9ub3N0YXRlLCBXVEY6OnZpc2l0LCBhbmQgV1RGOjpob2xkc19hbHRlcm5hdGl2ZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDE5NDViNWUzMjVkOWQwZDM5
MzJkOGNjZTE0N2I4NzMwYmEwNDViZjIuLmRlMDM2ODU4MTFkOTg0MDUxYzk2YTViYjc3ZDYyOWY2
YWNiMjU3YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTM0LDYg
KzM0LDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBv
cnQgPExvY2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9BdXRoZW50aWNhdG9yQXR0YWNobWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RP
cHRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KQEAgLTE4
MzAsNyArMTgzMSw3IEBAIFRFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgTWFrZUNyZWRlbnRp
YWxTUElUaW1lb3V0KQogCiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKICAgICAgICAg
RVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7Ci0gICAgICAgIEVYUEVDVF9F
UShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5j
b2RlLCBOb3RBbGxvd2VkRXJyb3IpOwogICAgIH1dOwogICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVu
dGljYXRpb25QYW5lbFJhbik7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>