<?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>191858</bug_id>
          
          <creation_ts>2018-11-20 03:15:06 -0800</creation_ts>
          <short_desc>[GTK] Unexpected User-Agent on redirect</short_desc>
          <delta_ts>2021-02-17 07:06:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215845</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=142074</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jim Mason">jmason</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1480438</commentid>
    <comment_count>0</comment_count>
    <who name="Jim Mason">jmason</who>
    <bug_when>2018-11-20 03:15:06 -0800</bug_when>
    <thetext>WebKitGTK: 2.22.3
Epiphany:  3.30.2

It seems the User-Agent quirk mechanism is using the URL of a request to decide which quirk to send, not only for the original request, but also for any associated redirects.  As a result, in some situations, sites which should not receive a UA quirk receive it, and sites which should receive one do not.

This manifests itself readily during Google OAuth, in the case when Google challenges the user for credentials.

Below is an extract from a service provider web server log for a user who is attempting to login via Google SSO.  (I have suppressed the client IP address and truncated the query strings for readability):

&gt; x.x.x.x - - [16/Nov/2018:14:37:31 +0100] &quot;GET /kzsu/ssoLogin.php HTTP/1.1&quot; 307 - &quot;https://zookeeper.ibinx.com/kzsu/?&quot; &quot;Mozilla/5.0 (X11; SunOS i86pc) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15 Epiphany/605.1.15&quot;
&gt; x.x.x.x - - [16/Nov/2018:14:37:36 +0100] &quot;GET /kzsu/ssoLogin.php?state=0ea73ed9f8965966b201f5b70355795c... HTTP/1.1&quot; 307 - &quot;https://accounts.google.com/ServiceLogin?continue=https...&quot; &quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15&quot;
&gt; x.x.x.x - - [16/Nov/2018:14:37:37 +0100] &quot;GET /kzsu/?action=loginValidate&amp;session=c8c39681f2db99f849998349... HTTP/1.1&quot; 200 1665 &quot;https://accounts.google.com/ServiceLogin?continue=https...&quot; &quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15&quot;


The first request above results in a redirect to Google.  The second request is the redirect from Google, which in turn results in an intra-site redirect (the third request).  We can see that Google challenged the user because the value of the Referer changed.

Observed behaviour:  UA on the second and third request is the `LinuxDesktopPlatform` quirk.

Expected behaviour: UA on the second and third request should match the first one (i.e., the normal UA)


As a counter example, if the user is already logged into Google, there is no challenge at Google, only a redirect:

&gt; x.x.x.x - - [16/Nov/2018:16:51:04 +0100] &quot;GET /kzsu/ssoLogin.php HTTP/1.1&quot; 307 - &quot;https://zookeeper.ibinx.com/kzsu/?session=&quot; &quot;Mozilla/5.0 (X11; SunOS i86pc) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15 Epiphany/605.1.15&quot;
&gt; x.x.x.x - - [16/Nov/2018:16:51:05 +0100] &quot;GET /kzsu/ssoLogin.php?state=6efaaea080fb97213d27d41266a41347... HTTP/1.1&quot; 307 - &quot;https://zookeeper.ibinx.com/kzsu/?session=&quot; &quot;Mozilla/5.0 (X11; SunOS i86pc) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15 Epiphany/605.1.15&quot;
&gt; x.x.x.x - - [16/Nov/2018:16:51:05 +0100] &quot;GET /kzsu/?action=loginValidate&amp;session=12c17d8a4a222f23b8299942cee5347b HTTP/1.1&quot; 200 1665 &quot;https://zookeeper.ibinx.com/kzsu/?session=&quot; &quot;Mozilla/5.0 (X11; SunOS i86pc) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15 Epiphany/605.1.15&quot;


Above are the same three requests as the first log extract, except in this case, the Referer on the second and third requests is the original URL.  This indicates Google did not challenge the user for credentials.

In this case, the UA is correct for all three requests (though likely, the real UA and not the quirk is presented to Google).


Expected behaviour:  In all cases, the UA quirk, if any, that is presented to a site should be determined by that specific target URL, and not the original URL from which the request was redirected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480812</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-11-21 11:36:38 -0800</bug_when>
    <thetext>(In reply to Jim Mason from comment #0) 
&gt; Observed behaviour:  UA on the second and third request is the
&gt; `LinuxDesktopPlatform` quirk.
&gt; 
&gt; Expected behaviour: UA on the second and third request should match the
&gt; first one (i.e., the normal UA)

Just to confirm: the second and third requests are requests to your server, which had been first made to Google and then later redirected?

I think I agree. The quirk should be changed to match the new host after the redirect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480932</commentid>
    <comment_count>2</comment_count>
    <who name="Jim Mason">jmason</who>
    <bug_when>2018-11-22 02:46:42 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #1)
&gt; Just to confirm: the second and third requests are requests to your server,
&gt; which had been first made to Google and then later redirected?

That is correct.  However, in the first log extract, Google initiates the redirect (it is not merely a redirect of my initial request).  It is only in this case that my server sees the UA quirk intended for Google.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684116</commentid>
    <comment_count>3</comment_count>
      <attachid>407598</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-08-31 06:44:49 -0700</bug_when>
    <thetext>Created attachment 407598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684169</commentid>
    <comment_count>4</comment_count>
      <attachid>407598</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-08-31 10:34:37 -0700</bug_when>
    <thetext>Comment on attachment 407598
Patch

I had suspected this wouldn&apos;t be simple.... Anyway, LGTM. I trust you&apos;ll find an owner for formal review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684400</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 01:27:38 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; Comment on attachment 407598 [details]
&gt; Patch
&gt; 
&gt; I had suspected this wouldn&apos;t be simple.... Anyway, LGTM. I trust you&apos;ll
&gt; find an owner for formal review.

It was indeed simple, the pain is sending the quirks setting to the network process to be applied in every request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684406</commentid>
    <comment_count>6</comment_count>
      <attachid>407598</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-01 01:58:37 -0700</bug_when>
    <thetext>Comment on attachment 407598
Patch

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

&gt; Source/WebKit/ChangeLog:9
&gt; +        request when needsSiteSpecificQuirks setting is enabled.

It seems tests are missing here. Can we write some?
Also, it seems the patch adds a generic boolean but setting the user agent value is platform specific.
Currently, the work is mostly done in WebProcess with platform agnostic code, computation of the user agent value being done by WebPage.
How is the computation of this value supposed to work in NetworkProcess?
After the patch, GTK port will compute value in NetworkProcess while other ports will continue doing this in WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684409</commentid>
    <comment_count>7</comment_count>
      <attachid>407598</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-09-01 02:00:45 -0700</bug_when>
    <thetext>Comment on attachment 407598
Patch

So this is conceptually simple, but it&apos;s amazing how many files
it needs to touch to make the setting trickle down to the place
where it&apos;s used, wow!

Should we get someone from Apple to rubber-stamp this change as
well, given that it touches common code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684410</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 02:18:26 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #6)
&gt; Comment on attachment 407598 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407598&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:9
&gt; &gt; +        request when needsSiteSpecificQuirks setting is enabled.
&gt; 
&gt; It seems tests are missing here. Can we write some?

It&apos;s not easy to test I&apos;m afraid. The user agent changes depending on the site, only when site specific quirks setting is enabled. In tests the host is always localhost. We would need a way to set quirks only used for testing for localhost (and not for 127.0.0.1, for example).

&gt; Also, it seems the patch adds a generic boolean but setting the user agent
&gt; value is platform specific.

Because the boolean is not specific to the user agent, it&apos;s the site specific quirks setting, but it&apos;s true it&apos;s currently used only by GTK port to set the user agent.

&gt; Currently, the work is mostly done in WebProcess with platform agnostic
&gt; code, computation of the user agent value being done by WebPage.

There&apos;s WebPage::platformUserAgent() that right now it&apos;s only implemented by iOS and Playstation ports. In the case of the iOS port, the change in the user agent doesn&apos;t really depend on the URL, but I think playstation also needs to be fixed, moving the user agent quirks to the network process. 

&gt; How is the computation of this value supposed to work in NetworkProcess?

We can&apos;t just use a fixed user agent for all websites like major browsers do, because we get messages of unsupported browser, or features disabled, or things simply don&apos;t work. So, we need to pretend to be other browsers in some cases depending on the website. That&apos;s what we do in WebPage::platformUserAgent(). The problem is that after a redirection, we copy the user agent from the previous request, but the redirected URL might require a different user agent to work. You can see an¡ example of how this can break things in https://bugs.webkit.org/show_bug.cgi?id=215845#c3. So, in case of redirections we need to apply the user agent quirks again, but we are in the network process now. So, this patch moves the user agent quirks to the network process ensuring they are always applied, for the initial request, for downloads, and for the new request after a redirection.

&gt; After the patch, GTK port will compute value in NetworkProcess while other
&gt; ports will continue doing this in WebProcess.

Not exactly, most of the ports don&apos;t implement WebPage::platformUserAgent(), which means the configured user agent in settings is used, or the standard user agent defined for the port. So, we are receiving that user agent in the network process, like all other ports. But we need to ignore that user agent in some cases and apply a different one, that&apos;s what we do now in the network process, and we always did that differently even in the web process, because Safari doesn&apos;t need to pretend to be other browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684411</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 02:19:07 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #7)
&gt; Comment on attachment 407598 [details]
&gt; Patch
&gt; 
&gt; So this is conceptually simple, but it&apos;s amazing how many files
&gt; it needs to touch to make the setting trickle down to the place
&gt; where it&apos;s used, wow!
&gt; 
&gt; Should we get someone from Apple to rubber-stamp this change as
&gt; well, given that it touches common code?

Yes, it needs to be approved by an owner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684412</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-01 02:31:31 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #8)
&gt; (In reply to youenn fablet from comment #6)
&gt; &gt; Comment on attachment 407598 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=407598&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/ChangeLog:9
&gt; &gt; &gt; +        request when needsSiteSpecificQuirks setting is enabled.
&gt; &gt; 
&gt; &gt; It seems tests are missing here. Can we write some?
&gt; 
&gt; It&apos;s not easy to test I&apos;m afraid. The user agent changes depending on the
&gt; site, only when site specific quirks setting is enabled. In tests the host
&gt; is always localhost. We would need a way to set quirks only used for testing
&gt; for localhost (and not for 127.0.0.1, for example).

Seems fine.
We can also think of using API tests as well.
Quirks are currently based on URL, maybe we can add schemes/port specific handling as part of testing.

&gt; 
&gt; &gt; Also, it seems the patch adds a generic boolean but setting the user agent
&gt; &gt; value is platform specific.
&gt; 
&gt; Because the boolean is not specific to the user agent, it&apos;s the site
&gt; specific quirks setting, but it&apos;s true it&apos;s currently used only by GTK port
&gt; to set the user agent.
&gt; 
&gt; &gt; Currently, the work is mostly done in WebProcess with platform agnostic
&gt; &gt; code, computation of the user agent value being done by WebPage.
&gt; 
&gt; There&apos;s WebPage::platformUserAgent() that right now it&apos;s only implemented by
&gt; iOS and Playstation ports. In the case of the iOS port, the change in the
&gt; user agent doesn&apos;t really depend on the URL, but I think playstation also
&gt; needs to be fixed, moving the user agent quirks to the network process. 
&gt; 
&gt; &gt; How is the computation of this value supposed to work in NetworkProcess?
&gt; 
&gt; We can&apos;t just use a fixed user agent for all websites like major browsers
&gt; do, because we get messages of unsupported browser, or features disabled, or
&gt; things simply don&apos;t work. So, we need to pretend to be other browsers in
&gt; some cases depending on the website. That&apos;s what we do in
&gt; WebPage::platformUserAgent(). The problem is that after a redirection, we
&gt; copy the user agent from the previous request, but the redirected URL might
&gt; require a different user agent to work. You can see an¡ example of how this
&gt; can break things in https://bugs.webkit.org/show_bug.cgi?id=215845#c3. So,
&gt; in case of redirections we need to apply the user agent quirks again, but we
&gt; are in the network process now. So, this patch moves the user agent quirks
&gt; to the network process ensuring they are always applied, for the initial
&gt; request, for downloads, and for the new request after a redirection.

Which requests are triggering the issue?
Navigation loads should probably be fine since WebProcess is dealing with this issue properly.
That would leave sub resources and downloads.
Is the main issue downloads?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684414</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 02:46:38 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #10)
&gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; (In reply to youenn fablet from comment #6)
&gt; &gt; &gt; Comment on attachment 407598 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=407598&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/ChangeLog:9
&gt; &gt; &gt; &gt; +        request when needsSiteSpecificQuirks setting is enabled.
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems tests are missing here. Can we write some?
&gt; &gt; 
&gt; &gt; It&apos;s not easy to test I&apos;m afraid. The user agent changes depending on the
&gt; &gt; site, only when site specific quirks setting is enabled. In tests the host
&gt; &gt; is always localhost. We would need a way to set quirks only used for testing
&gt; &gt; for localhost (and not for 127.0.0.1, for example).
&gt; 
&gt; Seems fine.
&gt; We can also think of using API tests as well.

Even more complicated, in the case of layout tests we have the internals api that we can use to add fake quirks or something like that, but that&apos;s more complicated from api tests.

&gt; Quirks are currently based on URL, maybe we can add schemes/port specific
&gt; handling as part of testing.

Well we receive the URL but end up using the hostname to determine the website, so using localhost/127.0.0.1 would work.

&gt; &gt; 
&gt; &gt; &gt; Also, it seems the patch adds a generic boolean but setting the user agent
&gt; &gt; &gt; value is platform specific.
&gt; &gt; 
&gt; &gt; Because the boolean is not specific to the user agent, it&apos;s the site
&gt; &gt; specific quirks setting, but it&apos;s true it&apos;s currently used only by GTK port
&gt; &gt; to set the user agent.
&gt; &gt; 
&gt; &gt; &gt; Currently, the work is mostly done in WebProcess with platform agnostic
&gt; &gt; &gt; code, computation of the user agent value being done by WebPage.
&gt; &gt; 
&gt; &gt; There&apos;s WebPage::platformUserAgent() that right now it&apos;s only implemented by
&gt; &gt; iOS and Playstation ports. In the case of the iOS port, the change in the
&gt; &gt; user agent doesn&apos;t really depend on the URL, but I think playstation also
&gt; &gt; needs to be fixed, moving the user agent quirks to the network process. 
&gt; &gt; 
&gt; &gt; &gt; How is the computation of this value supposed to work in NetworkProcess?
&gt; &gt; 
&gt; &gt; We can&apos;t just use a fixed user agent for all websites like major browsers
&gt; &gt; do, because we get messages of unsupported browser, or features disabled, or
&gt; &gt; things simply don&apos;t work. So, we need to pretend to be other browsers in
&gt; &gt; some cases depending on the website. That&apos;s what we do in
&gt; &gt; WebPage::platformUserAgent(). The problem is that after a redirection, we
&gt; &gt; copy the user agent from the previous request, but the redirected URL might
&gt; &gt; require a different user agent to work. You can see an¡ example of how this
&gt; &gt; can break things in https://bugs.webkit.org/show_bug.cgi?id=215845#c3. So,
&gt; &gt; in case of redirections we need to apply the user agent quirks again, but we
&gt; &gt; are in the network process now. So, this patch moves the user agent quirks
&gt; &gt; to the network process ensuring they are always applied, for the initial
&gt; &gt; request, for downloads, and for the new request after a redirection.
&gt; 
&gt; Which requests are triggering the issue?

The request started after a redirection, because we copy the user agent from the previous request. We need to apply the quirks on the redirected url again. See https://bugs.webkit.org/show_bug.cgi?id=215845#c3.

&gt; Navigation loads should probably be fine since WebProcess is dealing with
&gt; this issue properly.

Right.

&gt; That would leave sub resources and downloads.
&gt; Is the main issue downloads?

The quirks are applied fine in the web process for subresources as well, frame loader asks the client that ends up calling WebPage::platformUserAgent().

Downloads started by the web proccess when a load is converted to a download are not a problem either, the quirks are applied correctly. Downloads started by the web process pool don&apos;t get the quirks applied.

I thought it could be even more confusing to apply the quirks both in the web and network processes depending on the request. Also, since we don&apos;t know if there will be a redirect, we always have to send the needs quirks setting to the network process for every request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684415</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 02:49:10 -0700</bug_when>
    <thetext>The needs quirk parameter is similar to isNavigatingToAppBoundDomain, in the sense that it&apos;s currently only used by one platform, but making it platform specific would make the code a lot more complicated with more platform ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684418</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-01 02:59:37 -0700</bug_when>
    <thetext>I am still unclear about which load is triggering the issue.
I understand this only happens in case of redirection but for which load.

In https://bugs.webkit.org/show_bug.cgi?id=215845#c3, the initial request seems to be a navigation request. I would believe navigation request redirection to be properly handled by WebProcess. If that is not the case, there may be an issue in that handling. For instance, it seems that https://bugs.webkit.org/show_bug.cgi?id=215845#c3 is fixed by disabling PSON.

I can see that subresource redirections could have this issue, as well as downloads after redirections. Is Epiphany actually affected by such issues for these loads?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684426</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 03:22:03 -0700</bug_when>
    <thetext>Ok, I see your point now, before starting the redirection we go back to the web process and willSendRequest is called for the new request, so it should be possible to apply the quirks there. I&apos;m going to check that, it would simplify everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684432</commentid>
    <comment_count>15</comment_count>
      <attachid>407598</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 04:07:47 -0700</bug_when>
    <thetext>Comment on attachment 407598
Patch

I can confirm that simply clearing the user agent on the new request after a redirection fixes the issue, because the web process applies a new one. I have to check downloads now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684451</commentid>
    <comment_count>16</comment_count>
      <attachid>407676</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 06:43:25 -0700</bug_when>
    <thetext>Created attachment 407676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684452</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-01 06:44:23 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684456</commentid>
    <comment_count>18</comment_count>
      <attachid>407676</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-09-01 07:27:49 -0700</bug_when>
    <thetext>Comment on attachment 407676
Patch

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

Much nicer!

&gt; Source/WebKit/UIProcess/API/glib/WebKitDownloadClient.cpp:60
&gt; +    void willSendRequest(DownloadProxy&amp; downloadProxy, ResourceRequest&amp;&amp; request, const ResourceResponse&amp;, CompletionHandler&lt;void(ResourceRequest&amp;&amp;)&gt;&amp;&amp; completionHandler) override
&gt; +    {
&gt; +        if (!request.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) {
&gt; +            GRefPtr&lt;WebKitDownload&gt; download = webkitWebContextGetOrCreateDownload(&amp;downloadProxy);
&gt; +            auto* webView = webkit_download_get_web_view(download.get());
&gt; +            request.setHTTPUserAgent(webView ? webkitWebViewGetPage(webView).userAgentForURL(request.url()) : WebPageProxy::standardUserAgent());
&gt; +        }
&gt; +
&gt; +        completionHandler(WTFMove(request));
&gt; +    }

I would do it in a separate bug (with r=me), since it&apos;s really an additional fix on top of the primary fix. But whatever.

&gt; Source/WebKit/UIProcess/playstation/WebPageProxyPlayStation.cpp:49
&gt; +String WebPageProxy::userAgentForURL(const URL&amp;)
&gt; +{
&gt; +    return userAgent();
&gt; +}

I understand from your previous comments that PlayStation port does have user agent quirks that depend on URL, and you just haven&apos;t implemented it here, so action is required for PlayStation port? Is that right, or do I misunderstand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684457</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 07:31:17 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #18)
&gt; Comment on attachment 407676 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407676&amp;action=review
&gt; 
&gt; Much nicer!
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitDownloadClient.cpp:60
&gt; &gt; +    void willSendRequest(DownloadProxy&amp; downloadProxy, ResourceRequest&amp;&amp; request, const ResourceResponse&amp;, CompletionHandler&lt;void(ResourceRequest&amp;&amp;)&gt;&amp;&amp; completionHandler) override
&gt; &gt; +    {
&gt; &gt; +        if (!request.hasHTTPHeaderField(HTTPHeaderName::UserAgent)) {
&gt; &gt; +            GRefPtr&lt;WebKitDownload&gt; download = webkitWebContextGetOrCreateDownload(&amp;downloadProxy);
&gt; &gt; +            auto* webView = webkit_download_get_web_view(download.get());
&gt; &gt; +            request.setHTTPUserAgent(webView ? webkitWebViewGetPage(webView).userAgentForURL(request.url()) : WebPageProxy::standardUserAgent());
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        completionHandler(WTFMove(request));
&gt; &gt; +    }
&gt; 
&gt; I would do it in a separate bug (with r=me), since it&apos;s really an additional
&gt; fix on top of the primary fix. But whatever.

Not exactly, because now we are clearing the user agent on redirect, so before this patch we received the previous user agent here, now it&apos;s empty, if we don&apos;t fill it here we will end up with no user agent in the request.

&gt; &gt; Source/WebKit/UIProcess/playstation/WebPageProxyPlayStation.cpp:49
&gt; &gt; +String WebPageProxy::userAgentForURL(const URL&amp;)
&gt; &gt; +{
&gt; &gt; +    return userAgent();
&gt; &gt; +}
&gt; 
&gt; I understand from your previous comments that PlayStation port does have
&gt; user agent quirks that depend on URL, and you just haven&apos;t implemented it
&gt; here, so action is required for PlayStation port? Is that right, or do I
&gt; misunderstand?

Right, that&apos;s why I added Fujii to the CC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684459</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-01 07:34:45 -0700</bug_when>
    <thetext>Much nicer indeed.

&gt; Not exactly, because now we are clearing the user agent on redirect, so
&gt; before this patch we received the previous user agent here, now it&apos;s empty,
&gt; if we don&apos;t fill it here we will end up with no user agent in the request.

What is the impact of clearing user agent for subresource loads?

Adding tests would be valuable for all these loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684463</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-01 08:07:37 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #20)
&gt; Much nicer indeed.
&gt; 
&gt; &gt; Not exactly, because now we are clearing the user agent on redirect, so
&gt; &gt; before this patch we received the previous user agent here, now it&apos;s empty,
&gt; &gt; if we don&apos;t fill it here we will end up with no user agent in the request.
&gt; 
&gt; What is the impact of clearing user agent for subresource loads?

In the case of subresource loads the FrameLoader computes the user agent again if the header is not present, like for the main resource.

&gt; Adding tests would be valuable for all these loads.

Right, but again, not easy to test :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684466</commentid>
    <comment_count>22</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-01 08:23:09 -0700</bug_when>
    <thetext>&gt; &gt; What is the impact of clearing user agent for subresource loads?
&gt; 
&gt; In the case of subresource loads the FrameLoader computes the user agent
&gt; again if the header is not present, like for the main resource.

In general, navigation loads are not handling redirections so it is fine to hope that a new user agent will be created.

For subresource loads, redirections are expected to be followed and the current model is to keep the same user agent in that case (would need to be tested though if we do not have such tests).

It would be interesting to see what would happen for ping loads/fetch keep alive for instance with your change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684599</commentid>
    <comment_count>23</comment_count>
      <attachid>407676</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-09-01 13:26:13 -0700</bug_when>
    <thetext>Comment on attachment 407676
Patch

The latest version of the patch is indeed much nicer and simpler, r=me for the GTK/WPE parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684752</commentid>
    <comment_count>24</comment_count>
    <who name="Jim Mason">jmason</who>
    <bug_when>2020-09-02 01:45:51 -0700</bug_when>
    <thetext>Thanks Carlos!

I can confirm that the new patch yields the expected User Agents in the Google SSO OAuth cases reported in the description above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684758</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-02 02:39:41 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #22)
&gt; &gt; &gt; What is the impact of clearing user agent for subresource loads?
&gt; &gt; 
&gt; &gt; In the case of subresource loads the FrameLoader computes the user agent
&gt; &gt; again if the header is not present, like for the main resource.
&gt; 
&gt; In general, navigation loads are not handling redirections so it is fine to
&gt; hope that a new user agent will be created.

You mean because of PSON?

&gt; For subresource loads, redirections are expected to be followed and the
&gt; current model is to keep the same user agent in that case (would need to be
&gt; tested though if we do not have such tests).

Testing quirks is not easy, but at least now we can test that user-agent is preserved after redirects.

&gt; It would be interesting to see what would happen for ping loads/fetch keep
&gt; alive for instance with your change.

hmm, I think we could lose the user agent for ping loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684761</commentid>
    <comment_count>26</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-02 02:54:38 -0700</bug_when>
    <thetext>&gt; &gt; In general, navigation loads are not handling redirections so it is fine to
&gt; &gt; hope that a new user agent will be created.
&gt; 
&gt; You mean because of PSON?

Fetch spec is defining https://fetch.spec.whatwg.org/#requestredirect.
All navigation loads use &apos;manual&apos;.
In that sense, user agent is making a navigation request and getting a response.
If the response is a redirection, it will do another navigation load, with a brand new request, possibly with a different user agent.

It would be interesting to understand why gtk is not able to override the User-Agent for navigation redirections (probably it is preserving the user agent and will not override it since present) while MacOS has not that issue.

For subresource loads, redirect mode is usually &quot;follow&quot;.
https://fetch.spec.whatwg.org/#concept-http-redirect-fetch will most probably preserve the user-agent header and fetch spec will not override it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684764</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-02 03:00:24 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #26)
&gt; &gt; &gt; In general, navigation loads are not handling redirections so it is fine to
&gt; &gt; &gt; hope that a new user agent will be created.
&gt; &gt; 
&gt; &gt; You mean because of PSON?
&gt; 
&gt; Fetch spec is defining https://fetch.spec.whatwg.org/#requestredirect.
&gt; All navigation loads use &apos;manual&apos;.
&gt; In that sense, user agent is making a navigation request and getting a
&gt; response.
&gt; If the response is a redirection, it will do another navigation load, with a
&gt; brand new request, possibly with a different user agent.
&gt; 
&gt; It would be interesting to understand why gtk is not able to override the
&gt; User-Agent for navigation redirections (probably it is preserving the user
&gt; agent and will not override it since present) while MacOS has not that issue.

Yes, because the user agent is present in the redirection request when it reaches the web process. I guess MacOS doesn&apos;t have the issue because the header is cleared or because the previous one is reused, which is ok when you don&apos;t need quirks.

&gt; For subresource loads, redirect mode is usually &quot;follow&quot;.
&gt; https://fetch.spec.whatwg.org/#concept-http-redirect-fetch will most
&gt; probably preserve the user-agent header and fetch spec will not override it.

Ok, so you are talking about fetch requests specifically?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684765</commentid>
    <comment_count>28</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-02 03:04:00 -0700</bug_when>
    <thetext>&gt; &gt; For subresource loads, redirect mode is usually &quot;follow&quot;.
&gt; &gt; https://fetch.spec.whatwg.org/#concept-http-redirect-fetch will most
&gt; &gt; probably preserve the user-agent header and fetch spec will not override it.
&gt; 
&gt; Ok, so you are talking about fetch requests specifically?

fetch is the algorithm that implement loading of resources (be they navigation, fetch, xhr, css, js...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684766</commentid>
    <comment_count>29</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-02 03:07:41 -0700</bug_when>
    <thetext>&gt; Yes, because the user agent is present in the redirection request when it
&gt; reaches the web process. I guess MacOS doesn&apos;t have the issue because the
&gt; header is cleared or because the previous one is reused, which is ok when
&gt; you don&apos;t need quirks.

User-Agent header does not seem to be cleared by CFNetwork at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684770</commentid>
    <comment_count>30</comment_count>
      <attachid>407756</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-02 04:35:12 -0700</bug_when>
    <thetext>Created attachment 407756
Patch

Updated patch to include unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684772</commentid>
    <comment_count>31</comment_count>
      <attachid>407757</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-02 05:12:08 -0700</bug_when>
    <thetext>Created attachment 407757
Patch

Updated to patch to ensure we always have a user agent after redirections. It saves the previous one before clearing it, and after the client handles the redirection, if we still don&apos;tm have a user agent, the previous one is added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684782</commentid>
    <comment_count>32</comment_count>
    <who name="Jim Mason">jmason</who>
    <bug_when>2020-09-02 06:32:11 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #31)
&gt; Created attachment 407757 [details]
&gt; Patch
&gt; 
&gt; Updated to patch to ensure we always have a user agent after redirections.
&gt; It saves the previous one before clearing it, and after the client handles
&gt; the redirection, if we still don&apos;tm have a user agent, the previous one is
&gt; added.

I can confirm that the latest patch yields the expected User Agents in the Google OAuth use cases above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685555</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-09-03 22:14:02 -0700</bug_when>
    <thetext>Committed r266576: &lt;https://trac.webkit.org/changeset/266576&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407598</attachid>
            <date>2020-08-31 06:44:49 -0700</date>
            <delta_ts>2020-09-01 04:07:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ua-quirks-redirect.diff</filename>
            <type>text/plain</type>
            <size>68716</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNDk3OTE5ODUwMGIwLi5lNDQwNjZjNDBjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsODAgQEAKKzIwMjAtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVuZXhwZWN0ZWQgVXNlci1BZ2VudCBvbiByZWRpcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbHkg
dGhlIHVzZXIgYWdlbnQgcXVpcmtzIG9uIHRoZSBuZXR3b3JrIHByb2Nlc3MgaW5zdGVhZCBvZiB0
aGUgd2ViIHByb2Nlc3MsIGVuc3VyaW5nIGl0J3MgYXBwbGllZCBmb3IgYW55CisgICAgICAgIHJl
cXVlc3Qgd2hlbiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyBzZXR0aW5nIGlzIGVuYWJsZWQuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpzdGFydERvd25sb2FkKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2VyOjpzdGFydFByZWZsaWdodCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2VyLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3RhcnREb3du
bG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdGFydERvd25sb2FkKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0xvYWRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWRD
aGVja2VyOjpOZXR3b3JrTG9hZENoZWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZENoZWNrZXI6OmNoZWNrQ09SU1JlcXVlc3RXaXRoUHJlZmxpZ2h0KToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENoZWNrZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkb3dubG9h
ZFJlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRl
Y29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2Fj
aGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRO
ZXR3b3JrTG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29u
dmVydFRvRG93bmxvYWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGluZ0xvYWQ6OlBpbmdMb2FkKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1NlcnZpY2VXb3JrZXJTb2Z0VXBkYXRlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2VydmljZVdvcmtlclNvZnRVcGRhdGVMb2FkZXI6OlNlcnZpY2VX
b3JrZXJTb2Z0VXBkYXRlTG9hZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9B
c3luY1JldmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6QXN5
bmNSZXZhbGlkYXRpb246OkFzeW5jUmV2YWxpZGF0aW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9Bc3luY1JldmFsaWRhdGlvbi5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q2FjaGU6OnN0YXJ0QXN5bmNSZXZhbGlkYXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnJldHJpZXZlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6U3BlY3VsYXRpdmVMb2FkKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyOjpyZWdpc3RlckxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1
bGF0aXZlTG9hZE1hbmFnZXI6OnJldmFsaWRhdGVTdWJyZXNvdXJjZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cHJlbG9hZEVudHJ5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpz
dGFydFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViS2l0OjphZGRQYXJhbWV0ZXJzU2hhcmVkKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBsYXRmb3JtVXNlckFnZW50IGNvbnN0KToKKwogMjAyMC0wOC0yNiAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBTdG9wIGxvZ2dpbmcgc2Fu
ZGJveCB2aW9sYXRpb25zIG9mIGNvbS5hcHBsZS5Db3JlRGlzcGxheS5Ob3RpZmljYXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuY3BwCmluZGV4IDk3MzUyNGQ5OWM1ZS4uZmM2MTJhMDY4N2QzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkTWFuYWdlci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3dubG9h
ZE1hbmFnZXIoQ2xpZW50JiBjbGllbnQpCiB7CiB9CiAKLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpz
dGFydERvd25sb2FkKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgRG93bmxvYWRJRCBkb3dubG9h
ZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIE9wdGlvbmFsPE5hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZE5hbWUpCit2b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogewogICAgIGF1dG8qIG5ldHdvcmtT
ZXNzaW9uID0gY2xpZW50KCkubmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKICAgICBpZiAoIW5l
dHdvcmtTZXNzaW9uKQpAQCAtNTMsNiArNTMsNyBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3Rh
cnREb3dubG9hZChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYQog
ICAgIHBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgcGFyYW1ldGVycy5jbGllbnRD
cmVkZW50aWFsUG9saWN5ID0gQ2xpZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9y
Q3JlZGVudGlhbHM7CiAgICAgcGFyYW1ldGVycy5pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
ID0gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsKKyAgICBwYXJhbWV0ZXJzLm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzID0gbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7CiAgICAgaWYgKHJlcXVl
c3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkKICAgICAgICAgcGFyYW1ldGVycy5ibG9iRmlsZVJl
ZmVyZW5jZXMgPSBjbGllbnQoKS5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpLT5ibG9iUmVnaXN0
cnkoKS5maWxlc0luQmxvYihyZXF1ZXN0LnVybCgpKTsKICAgICBwYXJhbWV0ZXJzLnN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgPyBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6RG9Ob3RVc2UgOiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuaAppbmRleCAyN2Q5ZTZiNjQ0OTUuLjNhMjVkZDIzYjhhNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmgKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgRG93bmxvYWRN
YW5hZ2VyKENsaWVudCYpOwogCi0gICAgdm9pZCBzdGFydERvd25sb2FkKFBBTDo6U2Vzc2lvbklE
LCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBPcHRpb25hbDxO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4sIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSA9
IHsgfSk7CisgICAgdm9pZCBzdGFydERvd25sb2FkKFBBTDo6U2Vzc2lvbklELCBEb3dubG9hZElE
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbj4sIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSA9IHsgfSk7CiAgICAgdm9pZCBkYXRhVGFza0JlY2FtZURvd25sb2Fk
VGFzayhEb3dubG9hZElELCBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYpOwogICAgIHZvaWQg
Y29udGludWVXaWxsU2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYpOwogICAgIHZvaWQgd2lsbERlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKE5l
dHdvcmtEYXRhVGFzayYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxpZ2h0Q2hlY2tl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxpZ2h0
Q2hlY2tlci5jcHAKaW5kZXggNzkzOTA5OThjNjMzLi5iYjc0ZmMyNTFkNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxp
Z2h0Q2hlY2tlci5jcHAKQEAgLTY3LDYgKzY3LDcgQEAgdm9pZCBOZXR3b3JrQ09SU1ByZWZsaWdo
dENoZWNrZXI6OnN0YXJ0UHJlZmxpZ2h0KCkKIAogICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBs
b2FkUGFyYW1ldGVyczsKICAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gY3JlYXRlQWNjZXNz
Q29udHJvbFByZWZsaWdodFJlcXVlc3QobV9wYXJhbWV0ZXJzLm9yaWdpbmFsUmVxdWVzdCwgbV9w
YXJhbWV0ZXJzLnNvdXJjZU9yaWdpbiwgbV9wYXJhbWV0ZXJzLnJlZmVycmVyKTsKKyAgICBsb2Fk
UGFyYW1ldGVycy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IG1fcGFyYW1ldGVycy5uZWVkc1Np
dGVTcGVjaWZpY1F1aXJrczsKICAgICBpZiAoIW1fcGFyYW1ldGVycy51c2VyQWdlbnQuaXNOdWxs
KCkpCiAgICAgICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhU
VFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQsIG1fcGFyYW1ldGVycy51c2VyQWdlbnQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxpZ2h0
Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ09SU1ByZWZs
aWdodENoZWNrZXIuaAppbmRleCBiYmIxNDYyYTMxNjEuLjliMmQxNjRiM2Y2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ09SU1ByZWZsaWdodENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxp
Z2h0Q2hlY2tlci5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEOwogICAgICAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQ
cm94eUlEOwogICAgICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeTsKKyAgICAgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsK
ICAgICB9OwogICAgIHVzaW5nIENvbXBsZXRpb25DYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYmKT47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggYWNjZWQ2YWJjZjhiLi5mNTg2NzJiYWZiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCkBAIC02MTAsMTggKzYxMCwxOCBAQCBOZXR3b3JrU3RvcmFnZVNlc3Npb24q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbigpCiAgICAgcmV0
dXJuIHNlc3Npb247CiB9CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0
YXJ0RG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit2b2lkIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdGFydERvd25sb2FkKERvd25sb2FkSUQgZG93
bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBPcHRpb25hbDxOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgYm9vbCBu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogewot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQobV9z
ZXNzaW9uSUQsIGRvd25sb2FkSUQsIHJlcXVlc3QsIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4sIHN1Z2dlc3RlZE5hbWUpOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRvd25sb2FkTWFuYWdl
cigpLnN0YXJ0RG93bmxvYWQobV9zZXNzaW9uSUQsIGRvd25sb2FkSUQsIHJlcXVlc3QsIGlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzLCBzdWdnZXN0
ZWROYW1lKTsKIH0KIAotdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVy
dE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIE9wdGlvbmFsPE5hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQordm9pZCBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rv
d25sb2FkKHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBEb3dubG9hZElEIGRv
d25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBp
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIC8vIElu
IGNhc2UgYSByZXNwb25zZSBpcyBzZXJ2ZWQgZnJvbSBzZXJ2aWNlIHdvcmtlciwgd2UgZG8gbm90
IGhhdmUgeWV0IHRoZSBhYmlsaXR5IHRvIGNvbnZlcnQgdGhlIGxvYWQuCiAgICAgaWYgKCFtYWlu
UmVzb3VyY2VMb2FkSWRlbnRpZmllciB8fCByZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJl
c3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXIpIHsKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+ZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChtX3Nlc3Npb25JRCwgZG93bmxvYWRJ
RCwgcmVxdWVzdCwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CisgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQobV9zZXNzaW9uSUQs
IGRvd25sb2FkSUQsIHJlcXVlc3QsIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIG5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IGJjZDYxNWYwOTg4Yy4uNTQ4YmFkYWRhY2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCkBAIC0yMDQsOCArMjA0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBh
Z2VMb2FkQ29tcGxldGVkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGJyb3dz
aW5nQ29udGV4dFJlbW92ZWQoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7CiAgICAgdm9pZCBjcm9zc09yaWdp
blJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgVVJMJiByZWRp
cmVjdFVSTCk7Ci0gICAgdm9pZCBzdGFydERvd25sb2FkKERvd25sb2FkSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
PiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lID0geyB9KTsKLSAgICB2b2lkIGNvbnZlcnRN
YWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh1aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgRG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluPik7CisgICAgdm9pZCBzdGFydERvd25sb2FkKERvd25sb2FkSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
PiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRO
YW1lID0geyB9KTsKKyAgICB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh1
aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgRG93bmxvYWRJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgYm9vbCBuZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyk7CiAKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lc0FzQ09SU0VuYWJsZWQo
VmVjdG9yPFN0cmluZz4mJiBzY2hlbWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4KaW5kZXggMDU3NTBiYjUzOWU0Li4zNTBjYTc5ZjNjNTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMzMsOCArMzMsOCBAQCBt
ZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7
CiAgICAgU2VuZEgyUGluZyhXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIHBh
cmFtZXRlcnMpIC0+IChFeHBlY3RlZDxTZWNvbmRzLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yPiBy
ZXN1bHQpIEFzeW5jCiAgICAgUHJlY29ubmVjdFRvKE9wdGlvbmFsPHVpbnQ2NF90PiBwcmVjb25u
ZWN0aW9uSWRlbnRpZmllciwgV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBs
b2FkUGFyYW1ldGVycyk7CiAKLSAgICBTdGFydERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBk
b3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgZW51bTpib29sIE9w
dGlvbmFsPFdlYktpdDo6TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4sIFN0cmluZyBzdWdnZXN0ZWROYW1lKQotICAgIENvbnZlcnRNYWluUmVz
b3VyY2VMb2FkVG9Eb3dubG9hZCh1aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwg
V2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0LCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBlbnVtOmJvb2wgT3B0
aW9uYWw8V2ViS2l0OjpOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbikKKyAgICBTdGFydERvd25sb2FkKFdlYktpdDo6RG93bmxvYWRJRCBkb3du
bG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgZW51bTpib29sIE9wdGlv
bmFsPFdlYktpdDo6TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBw
Qm91bmREb21haW4sIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MsIFN0cmluZyBzdWdnZXN0
ZWROYW1lKQorICAgIENvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh1aW50NjRfdCBt
YWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQs
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0LCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlLCBlbnVtOmJvb2wgT3B0aW9uYWw8V2ViS2l0OjpOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgYm9vbCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcykKIAogICAgIENvb2tpZXNGb3JET00oVVJMIGZpcnN0UGFydHksIHN0cnVj
dCBXZWJDb3JlOjpTYW1lU2l0ZUluZm8gc2FtZVNpdGVJbmZvLCBVUkwgdXJsLCBXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBl
bnVtOmJvb2wgV2ViQ29yZTo6SW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMsIGVudW06Ym9vbCBXZWJDb3JlOjpTaG91bGRBc2tJVFAgc2hvdWxkQXNrSVRQLCBlbnVtOmJv
b2wgV2ViQ29yZTo6U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcgc2hvdWxkUmVs
YXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcpIC0+IChTdHJpbmcgY29va2llU3RyaW5nLCBib29s
IGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMpIFN5bmNocm9ub3VzCiAgICAgU2V0Q29va2llc0Zyb21E
T00oVVJMIGZpcnN0UGFydHksIHN0cnVjdCBXZWJDb3JlOjpTYW1lU2l0ZUluZm8gc2FtZVNpdGVJ
bmZvLCBVUkwgdXJsLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIgcGFnZUlELCBlbnVtOmJvb2wgV2ViQ29yZTo6U2hvdWxkQXNrSVRQIHNo
b3VsZEFza0lUUCwgU3RyaW5nIGNvb2tpZVN0cmluZywgZW51bTpib29sIFdlYkNvcmU6OlNob3Vs
ZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2suY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0
YVRhc2suY3BwCmluZGV4IDc0MzY2YTFiZDA2ZC4uODIzMTY2MmQyZWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC01Nyw3ICs1
Nyw3IEBAIFJlZjxOZXR3b3JrRGF0YVRhc2s+IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdv
cmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0CiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVlc3QsIHBhcmFt
ZXRlcnMud2ViRnJhbWVJRCwgcGFyYW1ldGVycy53ZWJQYWdlSUQsIHBhcmFtZXRlcnMuc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5LCBwYXJh
bWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLnNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIHBhcmFtZXRlcnMuc2hvdWxkUHJlY29u
bmVjdE9ubHksIHBhcmFtZXRlcnMuaXNNYWluRnJhbWVOYXZpZ2F0aW9uLCBwYXJhbWV0ZXJzLmlz
TWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lLCBwYXJhbWV0ZXJzLm5ldHdvcmtBY3Rp
dml0eVRyYWNrZXIsIHBhcmFtZXRlcnMuaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgcGFy
YW1ldGVycy5zaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyk7CiAjZW5kaWYKICNp
ZiBVU0UoU09VUCkKLSAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlKHNlc3Np
b24sIGNsaWVudCwgcGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLndlYkZyYW1lSUQsIHBh
cmFtZXRlcnMud2ViUGFnZUlELCBwYXJhbWV0ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBw
YXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2Rp
bmdTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0LCBwYXJhbWV0ZXJzLmlzTWFpbkZyYW1lTmF2aWdhdGlvbik7CisgICAgcmV0
dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRl
cnMucmVxdWVzdCwgcGFyYW1ldGVycy53ZWJGcmFtZUlELCBwYXJhbWV0ZXJzLndlYlBhZ2VJRCwg
cGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50U25p
ZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIHBh
cmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgcGFyYW1l
dGVycy5pc01haW5GcmFtZU5hdmlnYXRpb24sIHBhcmFtZXRlcnMubmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MpOwogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFz
a0N1cmw6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1l
dGVycy53ZWJGcmFtZUlELCBwYXJhbWV0ZXJzLndlYlBhZ2VJRCwgcGFyYW1ldGVycy5zdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3ksIHBhcmFt
ZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgcGFyYW1ldGVycy5pc01haW5GcmFtZU5h
dmlnYXRpb24sIHBhcmFtZXRlcnMuc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENo
ZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENoZWNr
ZXIuY3BwCmluZGV4IDk1NWQzODhlNWU5Ni4uMDhmMmY4NDZmNDA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2hlY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENoZWNrZXIuY3BwCkBAIC01MCw3
ICs1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVPcmlnaW4oY29uc3QgVVJMJiB1cmws
IGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAgICAgcmV0dXJuIHVybC5wcm90b2NvbElz
RGF0YSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpIHx8ICFvcmlnaW4gfHwgb3JpZ2luLT5jYW5S
ZXF1ZXN0KHVybCk7CiB9CiAKLU5ldHdvcmtMb2FkQ2hlY2tlcjo6TmV0d29ya0xvYWRDaGVja2Vy
KE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBu
ZXR3b3JrUmVzb3VyY2VMb2FkZXIsIE5ldHdvcmtTY2hlbWVSZWdpc3RyeSogc2NoZW1lUmVnaXN0
cnksIEZldGNoT3B0aW9ucyYmIG9wdGlvbnMsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgSFRUUEhlYWRlck1hcCYmIG9yaWdp
bmFsUmVxdWVzdEhlYWRlcnMsIFVSTCYmIHVybCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiYmIHNv
dXJjZU9yaWdpbiwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiYmIHRvcE9yaWdpbiwgUHJlZmxpZ2h0
UG9saWN5IHByZWZsaWdodFBvbGljeSwgU3RyaW5nJiYgcmVmZXJyZXIsIGJvb2wgaXNIVFRQU1Vw
Z3JhZGVFbmFibGVkLCBib29sIHNob3VsZENhcHR1cmVFeHRyYU5ldHdvcmtMb2FkTWV0cmljcywg
TG9hZFR5cGUgcmVxdWVzdExvYWRUeXBlKQorTmV0d29ya0xvYWRDaGVja2VyOjpOZXR3b3JrTG9h
ZENoZWNrZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXIqIG5ldHdvcmtSZXNvdXJjZUxvYWRlciwgTmV0d29ya1NjaGVtZVJlZ2lzdHJ5KiBzY2hl
bWVSZWdpc3RyeSwgRmV0Y2hPcHRpb25zJiYgb3B0aW9ucywgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBIVFRQSGVhZGVyTWFw
JiYgb3JpZ2luYWxSZXF1ZXN0SGVhZGVycywgVVJMJiYgdXJsLCBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+JiYgc291cmNlT3JpZ2luLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+JiYgdG9wT3JpZ2luLCBQ
cmVmbGlnaHRQb2xpY3kgcHJlZmxpZ2h0UG9saWN5LCBTdHJpbmcmJiByZWZlcnJlciwgYm9vbCBu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgYm9vbCBpc0hUVFBTVXBncmFkZUVuYWJsZWQsIGJvb2wg
c2hvdWxkQ2FwdHVyZUV4dHJhTmV0d29ya0xvYWRNZXRyaWNzLCBMb2FkVHlwZSByZXF1ZXN0TG9h
ZFR5cGUpCiAgICAgOiBtX29wdGlvbnMoV1RGTW92ZShvcHRpb25zKSkKICAgICAsIG1fc2Vzc2lv
bklEKHNlc3Npb25JRCkKICAgICAsIG1fbmV0d29ya1Byb2Nlc3MobmV0d29ya1Byb2Nlc3MpCkBA
IC02Miw2ICs2Miw3IEBAIE5ldHdvcmtMb2FkQ2hlY2tlcjo6TmV0d29ya0xvYWRDaGVja2VyKE5l
dHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1JlCiAgICAgLCBtX3ByZWZsaWdo
dFBvbGljeShwcmVmbGlnaHRQb2xpY3kpCiAgICAgLCBtX3JlZmVycmVyKFdURk1vdmUocmVmZXJy
ZXIpKQogICAgICwgbV9zaG91bGRDYXB0dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3Moc2hvdWxk
Q2FwdHVyZUV4dHJhTmV0d29ya0xvYWRNZXRyaWNzKQorICAgICwgbV9uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyhuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICAsIG1faXNIVFRQU1VwZ3JhZGVFbmFibGVkKGlzSFRUUFNVcGdyYWRlRW5hYmxlZCkKICNlbmRp
ZgpAQCAtNDM2LDcgKzQzNyw4IEBAIHZvaWQgTmV0d29ya0xvYWRDaGVja2VyOjpjaGVja0NPUlNS
ZXF1ZXN0V2l0aFByZWZsaWdodChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0CiAgICAgICAgIHJl
cXVlc3QuaHR0cFVzZXJBZ2VudCgpLAogICAgICAgICBtX3Nlc3Npb25JRCwKICAgICAgICAgbV93
ZWJQYWdlUHJveHlJRCwKLSAgICAgICAgbV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeQorICAgICAg
ICBtX3N0b3JlZENyZWRlbnRpYWxzUG9saWN5LAorICAgICAgICBtX25lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzCiAgICAgfTsKICAgICBtX2NvcnNQcmVmbGlnaHRDaGVja2VyID0gbWFrZVVuaXF1ZTxO
ZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXI+KG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCksIG1fbmV0
d29ya1Jlc291cmNlTG9hZGVyLmdldCgpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBtX3Nob3VsZENh
cHR1cmVFeHRyYU5ldHdvcmtMb2FkTWV0cmljcywgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJl
cXVlc3QpLCBoYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKSwgaXNSZWRpcmVjdGVkID0gaXNSZWRp
cmVjdGVkKCldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0lG
X0FMTE9XRUQoImNoZWNrQ09SU1JlcXVlc3RXaXRoUHJlZmxpZ2h0IC0gbWFrZUNyb3NzT3JpZ2lu
QWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQgcHJlZmxpZ2h0IGNvbXBsZXRlLCBzdWNjZXNzOiAl
ZCBmb3JSZWRpcmVjdD8gJWQiLCBlcnJvci5pc051bGwoKSwgaXNSZWRpcmVjdGVkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDaGVja2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2hlY2tlci5oCmluZGV4
IDRkOWNhOTZhODc1MS4uODgxMDNlNjk1MzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDaGVja2VyLmgKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3Mg
TmV0d29ya0xvYWRDaGVja2VyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPE5ldHdvcmtMb2FkQ2hl
Y2tlcj4gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgTG9hZFR5cGUgOiBib29sIHsgTWFpbkZy
YW1lLCBPdGhlciB9OwogCi0gICAgTmV0d29ya0xvYWRDaGVja2VyKE5ldHdvcmtQcm9jZXNzJiwg
TmV0d29ya1Jlc291cmNlTG9hZGVyKiwgTmV0d29ya1NjaGVtZVJlZ2lzdHJ5KiwgV2ViQ29yZTo6
RmV0Y2hPcHRpb25zJiYsIFBBTDo6U2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiYsIFVSTCYmLCBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+JiYsIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJiB0b3BPcmlnaW4sIFdl
YkNvcmU6OlByZWZsaWdodFBvbGljeSwgU3RyaW5nJiYgcmVmZXJyZXIsIGJvb2wgaXNIVFRQU1Vw
Z3JhZGVFbmFibGVkID0gZmFsc2UsIGJvb2wgc2hvdWxkQ2FwdHVyZUV4dHJhTmV0d29ya0xvYWRN
ZXRyaWNzID0gZmFsc2UsIExvYWRUeXBlIHJlcXVlc3RMb2FkVHlwZSA9IExvYWRUeXBlOjpPdGhl
cik7CisgICAgTmV0d29ya0xvYWRDaGVja2VyKE5ldHdvcmtQcm9jZXNzJiwgTmV0d29ya1Jlc291
cmNlTG9hZGVyKiwgTmV0d29ya1NjaGVtZVJlZ2lzdHJ5KiwgV2ViQ29yZTo6RmV0Y2hPcHRpb25z
JiYsIFBBTDo6U2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiYsIFVSTCYmLCBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYsIFJl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJiB0b3BPcmlnaW4sIFdlYkNvcmU6OlByZWZs
aWdodFBvbGljeSwgU3RyaW5nJiYgcmVmZXJyZXIsIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MsIGJvb2wgaXNIVFRQU1VwZ3JhZGVFbmFibGVkID0gZmFsc2UsIGJvb2wgc2hvdWxkQ2FwdHVy
ZUV4dHJhTmV0d29ya0xvYWRNZXRyaWNzID0gZmFsc2UsIExvYWRUeXBlIHJlcXVlc3RMb2FkVHlw
ZSA9IExvYWRUeXBlOjpPdGhlcik7CiAgICAgfk5ldHdvcmtMb2FkQ2hlY2tlcigpOwogCiAgICAg
c3RydWN0IFJlZGlyZWN0aW9uVHJpcGxldCB7CkBAIC0xNTMsNiArMTUzLDcgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9yZWZlcnJlcjsKICAgICBib29sIG1fY2hlY2tDb250ZW50RXh0ZW5zaW9u
cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZENhcHR1cmVFeHRyYU5ldHdvcmtMb2FkTWV0
cmljcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsgZmFs
c2UgfTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGJvb2wgbV9pc0hUVFBTVXBncmFkZUVu
YWJsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgKaW5kZXggOGNmZWI2OGU1YWUzLi5lZDY0NzQ0N2ZiNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJh
bWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBh
cmFtZXRlcnMuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0NlcnRp
ZmljYXRlSW5mbyB7IGZhbHNlIH07CiAgICAgYm9vbCBpc01haW5GcmFtZU5hdmlnYXRpb24geyBm
YWxzZSB9OwogICAgIGJvb2wgaXNNYWluUmVzb3VyY2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUgeyBm
YWxzZSB9OworICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwogICAg
IFdlYkNvcmU6OlNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIHNob3VsZFJlbGF4
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIHsgV2ViQ29yZTo6U2hvdWxkUmVsYXhUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmc6Ok5vIH07CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpCbG9iRGF0
YUZpbGVSZWZlcmVuY2U+PiBibG9iRmlsZVJlZmVyZW5jZXM7CiAgICAgUHJlY29ubmVjdE9ubHkg
c2hvdWxkUHJlY29ubmVjdE9ubHkgeyBQcmVjb25uZWN0T25seTo6Tm8gfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggZTFhMDY0NjNi
NzU1Li40M2RlODMwMzg4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMTQ4LDkgKzIxNDgsOSBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpyZW1vdmVDYWNoZUVuZ2luZShjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQog
ICAgIG1fY2FjaGVFbmdpbmVzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCi12b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9h
ZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgT3B0aW9uYWw8
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4s
IGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpk
b3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25s
b2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIGJvb2wgbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7
Ci0gICAgZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2Fk
SUQsIHJlcXVlc3QsIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIHN1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICBkb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHNlc3Npb25JRCwgZG93
bmxvYWRJRCwgcmVxdWVzdCwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgbmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MsIHN1Z2dlc3RlZEZpbGVuYW1lKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElE
IGRvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgKaW5kZXggMmE0ZTlmNjJjYWY3Li4xODVjNTk5MTY1ZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTQyMiw3ICs0MjIsNyBA
QCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0YWtlIGEgc2Vzc2lvbiBJRCBz
byB3ZSBjYW4gaWRlbnRpZnkgd2hpY2ggZGlzayBjYWNoZSB0byBkZWxldGUuCiAgICAgdm9pZCBj
bGVhckRpc2tDYWNoZShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCi0gICAgdm9pZCBkb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQsIERv
d25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPE5hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSk7
CisgICAgdm9pZCBkb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluPiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSk7CiAgICAgdm9pZCByZXN1bWVEb3dubG9hZChQQUw6OlNlc3Npb25J
RCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICAgICB2b2lkIGNh
bmNlbERvd25sb2FkKERvd25sb2FkSUQpOwogI2lmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KaW5kZXggMDAyZWNkYjgzM2IyLi4wNTNiZWEyZGMyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAt
NDksNyArNDksNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7
CiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zLCBWZWN0b3I8U3RyaW5n
PiBjb29raWVIb3N0TmFtZXMsIFZlY3RvcjxTdHJpbmc+IEhTVFNDYWNoZUhvc3ROYW1lcywgVmVj
dG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnMsIFdlYktp
dDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwgb2xkRG9tYWluLCBVUkwgbmV3RG9tYWluLCBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMpIC0+ICgp
IEFzeW5jCiAKLSAgICBEb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBX
ZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QsIGVudW06Ym9vbCBPcHRpb25hbDxXZWJLaXQ6Ok5hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5h
bWUpCisgICAgRG93bmxvYWRSZXF1ZXN0KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViS2l0
OjpEb3dubG9hZElEIGRvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
LCBlbnVtOmJvb2wgT3B0aW9uYWw8V2ViS2l0OjpOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4g
aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cywgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKQogICAgIFJlc3VtZURvd25sb2FkKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQsIElQQzo6RGF0
YVJlZmVyZW5jZSByZXN1bWVEYXRhLCBTdHJpbmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKICAgICBDYW5jZWxEb3dubG9hZChX
ZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCkKICNpZiBQTEFURk9STShDT0NPQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycy5jcHAKaW5kZXggM2U0YjIzYzdhYjEwLi5lNTAzYzhiNWMzYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCkBAIC0xMDYsNiArMTA2LDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIAogICAgIGVuY29kZXIgPDwgZnJhbWVBbmNlc3Rvck9yaWdpbnM7CiAgICAgZW5jb2Rl
ciA8PCBpc0hUVFBTVXBncmFkZUVuYWJsZWQ7CisgICAgZW5jb2RlciA8PCBuZWVkc1NpdGVTcGVj
aWZpY1F1aXJrczsKICAgICBlbmNvZGVyIDw8IHBhZ2VIYXNSZXNvdXJjZUxvYWRDbGllbnQ7CiAg
ICAgZW5jb2RlciA8PCBwYXJlbnRGcmFtZUlEOwogICAgIGVuY29kZXIgPDwgY3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sQ2hlY2tFbmFibGVkOwpAQCAtMjU2LDYgKzI1NywxMiBAQCBPcHRpb25hbDxO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycz4gTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnM6OmRlY29kZShJUAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJlc3VsdC5p
c0hUVFBTVXBncmFkZUVuYWJsZWQgPSAqaXNIVFRQU1VwZ3JhZGVFbmFibGVkOwogCisgICAgT3B0
aW9uYWw8Ym9vbD4gbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7CisgICAgZGVjb2RlciA+PiBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrczsKKyAgICBpZiAoIW5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJlc3VsdC5uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyA9ICpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsKKwogICAgIE9wdGlvbmFsPGJvb2w+
IHBhZ2VIYXNSZXNvdXJjZUxvYWRDbGllbnQ7CiAgICAgZGVjb2RlciA+PiBwYWdlSGFzUmVzb3Vy
Y2VMb2FkQ2xpZW50OwogICAgIGlmICghcGFnZUhhc1Jlc291cmNlTG9hZENsaWVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuaAppbmRleCAwY2UxNjdlOWUwZWUuLjc1ZDdmYWRhZjE4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
aG91bGRFbmFibGVDcm9zc09yaWdpblJlc291cmNlUG9saWN5IHsgZmFsc2UgfTsKICAgICBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4gZnJhbWVBbmNlc3Rvck9yaWdpbnM7
CiAgICAgYm9vbCBpc0hUVFBTVXBncmFkZUVuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwogICAgIGJvb2wgcGFnZUhhc1Jlc291cmNl
TG9hZENsaWVudCB7IGZhbHNlIH07CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyPiBwYXJlbnRGcmFtZUlEOwogICAgIGJvb2wgY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sQ2hl
Y2tFbmFibGVkIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGYzYjRmMDM3ODk1ZS4uNDhiYWI0
NDFlNzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMmJiBwYXIKIAogICAgIGlmIChzeW5jaHJvbm91c1JlcGx5IHx8IHBhcmFtZXRlcnMuc2hvdWxk
UmVzdHJpY3RIVFRQUmVzcG9uc2VBY2Nlc3MgfHwgcGFyYW1ldGVycy5vcHRpb25zLmtlZXBBbGl2
ZSkgewogICAgICAgICBOZXR3b3JrTG9hZENoZWNrZXI6OkxvYWRUeXBlIHJlcXVlc3RMb2FkVHlw
ZSA9IGlzTWFpbkZyYW1lTG9hZCgpID8gTmV0d29ya0xvYWRDaGVja2VyOjpMb2FkVHlwZTo6TWFp
bkZyYW1lIDogTmV0d29ya0xvYWRDaGVja2VyOjpMb2FkVHlwZTo6T3RoZXI7Ci0gICAgICAgIG1f
bmV0d29ya0xvYWRDaGVja2VyID0gbWFrZVVuaXF1ZTxOZXR3b3JrTG9hZENoZWNrZXI+KGNvbm5l
Y3Rpb24ubmV0d29ya1Byb2Nlc3MoKSwgdGhpcywgICZjb25uZWN0aW9uLnNjaGVtZVJlZ2lzdHJ5
KCksIEZldGNoT3B0aW9ucyB7IG1fcGFyYW1ldGVycy5vcHRpb25zIH0sIHNlc3Npb25JRCgpLCBt
X3BhcmFtZXRlcnMud2ViUGFnZVByb3h5SUQsIEhUVFBIZWFkZXJNYXAgeyBtX3BhcmFtZXRlcnMu
b3JpZ2luYWxSZXF1ZXN0SGVhZGVycyB9LCBVUkwgeyBtX3BhcmFtZXRlcnMucmVxdWVzdC51cmwo
KSB9LCBtX3BhcmFtZXRlcnMuc291cmNlT3JpZ2luLmNvcHlSZWYoKSwgbV9wYXJhbWV0ZXJzLnRv
cE9yaWdpbi5jb3B5UmVmKCksIG1fcGFyYW1ldGVycy5wcmVmbGlnaHRQb2xpY3ksIG9yaWdpbmFs
UmVxdWVzdCgpLmh0dHBSZWZlcnJlcigpLCBtX3BhcmFtZXRlcnMuaXNIVFRQU1VwZ3JhZGVFbmFi
bGVkLCBzaG91bGRDYXB0dXJlRXh0cmFOZXR3b3JrTG9hZE1ldHJpY3MoKSwgcmVxdWVzdExvYWRU
eXBlKTsKKyAgICAgICAgbV9uZXR3b3JrTG9hZENoZWNrZXIgPSBtYWtlVW5pcXVlPE5ldHdvcmtM
b2FkQ2hlY2tlcj4oY29ubmVjdGlvbi5uZXR3b3JrUHJvY2VzcygpLCB0aGlzLCAgJmNvbm5lY3Rp
b24uc2NoZW1lUmVnaXN0cnkoKSwgRmV0Y2hPcHRpb25zIHsgbV9wYXJhbWV0ZXJzLm9wdGlvbnMg
fSwgc2Vzc2lvbklEKCksIG1fcGFyYW1ldGVycy53ZWJQYWdlUHJveHlJRCwgSFRUUEhlYWRlck1h
cCB7IG1fcGFyYW1ldGVycy5vcmlnaW5hbFJlcXVlc3RIZWFkZXJzIH0sIFVSTCB7IG1fcGFyYW1l
dGVycy5yZXF1ZXN0LnVybCgpIH0sIG1fcGFyYW1ldGVycy5zb3VyY2VPcmlnaW4uY29weVJlZigp
LCBtX3BhcmFtZXRlcnMudG9wT3JpZ2luLmNvcHlSZWYoKSwgbV9wYXJhbWV0ZXJzLnByZWZsaWdo
dFBvbGljeSwgb3JpZ2luYWxSZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCksIG1fcGFyYW1ldGVycy5u
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgbV9wYXJhbWV0ZXJzLmlzSFRUUFNVcGdyYWRlRW5hYmxl
ZCwgc2hvdWxkQ2FwdHVyZUV4dHJhTmV0d29ya0xvYWRNZXRyaWNzKCksIHJlcXVlc3RMb2FkVHlw
ZSk7CiAgICAgICAgIGlmIChtX3BhcmFtZXRlcnMuY3NwUmVzcG9uc2VIZWFkZXJzKQogICAgICAg
ICAgICAgbV9uZXR3b3JrTG9hZENoZWNrZXItPnNldENTUFJlc3BvbnNlSGVhZGVycyhDb250ZW50
U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgeyBtX3BhcmFtZXRlcnMuY3NwUmVzcG9uc2VI
ZWFkZXJzLnZhbHVlKCkgfSk7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDYWNoZUVu
dHJ5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICB9CiAKICAgICBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKCJyZXRyaWV2ZUNhY2hlRW50cnk6IENoZWNraW5nIHRoZSBIVFRQIGRp
c2sgY2FjaGUiKTsKLSAgICBtX2NhY2hlLT5yZXRyaWV2ZShyZXF1ZXN0LCBnbG9iYWxGcmFtZUlE
KCksIG1fcGFyYW1ldGVycy5pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QgeyBy
ZXF1ZXN0IH1dKGF1dG8gZW50cnksIGF1dG8gaW5mbykgbXV0YWJsZSB7CisgICAgbV9jYWNoZS0+
cmV0cmlldmUocmVxdWVzdCwgZ2xvYmFsRnJhbWVJRCgpLCBtX3BhcmFtZXRlcnMuaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbiwgbV9wYXJhbWV0ZXJzLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3QgPSBSZXNvdXJj
ZVJlcXVlc3QgeyByZXF1ZXN0IH1dKGF1dG8gZW50cnksIGF1dG8gaW5mbykgbXV0YWJsZSB7CiAg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTMzNSw2ICsz
MzUsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3JrTG9hZChSZXNv
dXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBGaXJzdExvYQogCiAgICAgcGFyYW1ldGVycy5yZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KTsKICAgICBwYXJhbWV0ZXJzLmlzTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4gPSBtX3BhcmFtZXRlcnMuaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsKKyAg
ICBwYXJhbWV0ZXJzLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gbV9wYXJhbWV0ZXJzLm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzOwogICAgIG1fbmV0d29ya0xvYWQgPSBtYWtlVW5pcXVlPE5ldHdv
cmtMb2FkPigqdGhpcywgJm5ldHdvcmtTZXNzaW9uLT5ibG9iUmVnaXN0cnkoKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgKm5ldHdvcmtTZXNzaW9uKTsKICAgICBtX25ldHdvcmtMb2FkLT5zdGFydCgp
OwogCkBAIC00NjcsNyArNDY4LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnZl
cnRUb0Rvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgUmVzb3UKIAogICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgcmVzb3VyY2UgY2FtZSBmcm9tIHRoZSBkaXNrIGNhY2hl
LgogICAgIGlmICghbV9uZXR3b3JrTG9hZCkgewotICAgICAgICBtX2Nvbm5lY3Rpb24tPm5ldHdv
cmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNzaW9uSUQoKSwg
ZG93bmxvYWRJRCwgcmVxdWVzdCwgbV9wYXJhbWV0ZXJzLmlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4pOworICAgICAgICBtX2Nvbm5lY3Rpb24tPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRN
YW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNzaW9uSUQoKSwgZG93bmxvYWRJRCwgcmVxdWVzdCwg
bV9wYXJhbWV0ZXJzLmlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIG1fcGFyYW1ldGVycy5u
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAgICAgICAgIGFib3J0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1BpbmdM
b2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCmluZGV4
IGI4ZmE1OGM2ODJjYi4uMmI2OGVhZDNmYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1BpbmdMb2FkLmNwcApAQCAtNDUsNyArNDUsNyBAQCBQaW5nTG9hZDo6UGluZ0xvYWQoTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5l
dAogICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAgLCBtX2NvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICwgbV90aW1lb3V0
VGltZXIoKnRoaXMsICZQaW5nTG9hZDo6dGltZW91dFRpbWVyRmlyZWQpCi0gICAgLCBtX25ldHdv
cmtMb2FkQ2hlY2tlcihtYWtlVW5pcXVlUmVmPE5ldHdvcmtMb2FkQ2hlY2tlcj4obmV0d29ya1By
b2Nlc3MsIG51bGxwdHIsIG51bGxwdHIsIEZldGNoT3B0aW9ucyB7IG1fcGFyYW1ldGVycy5vcHRp
b25zfSwgbV9zZXNzaW9uSUQsIG1fcGFyYW1ldGVycy53ZWJQYWdlUHJveHlJRCwgV1RGTW92ZSht
X3BhcmFtZXRlcnMub3JpZ2luYWxSZXF1ZXN0SGVhZGVycyksIFVSTCB7IG1fcGFyYW1ldGVycy5y
ZXF1ZXN0LnVybCgpIH0sIG1fcGFyYW1ldGVycy5zb3VyY2VPcmlnaW4uY29weVJlZigpLCBtX3Bh
cmFtZXRlcnMudG9wT3JpZ2luLmNvcHlSZWYoKSwgbV9wYXJhbWV0ZXJzLnByZWZsaWdodFBvbGlj
eSwgbV9wYXJhbWV0ZXJzLnJlcXVlc3QuaHR0cFJlZmVycmVyKCkpKQorICAgICwgbV9uZXR3b3Jr
TG9hZENoZWNrZXIobWFrZVVuaXF1ZVJlZjxOZXR3b3JrTG9hZENoZWNrZXI+KG5ldHdvcmtQcm9j
ZXNzLCBudWxscHRyLCBudWxscHRyLCBGZXRjaE9wdGlvbnMgeyBtX3BhcmFtZXRlcnMub3B0aW9u
c30sIG1fc2Vzc2lvbklELCBtX3BhcmFtZXRlcnMud2ViUGFnZVByb3h5SUQsIFdURk1vdmUobV9w
YXJhbWV0ZXJzLm9yaWdpbmFsUmVxdWVzdEhlYWRlcnMpLCBVUkwgeyBtX3BhcmFtZXRlcnMucmVx
dWVzdC51cmwoKSB9LCBtX3BhcmFtZXRlcnMuc291cmNlT3JpZ2luLmNvcHlSZWYoKSwgbV9wYXJh
bWV0ZXJzLnRvcE9yaWdpbi5jb3B5UmVmKCksIG1fcGFyYW1ldGVycy5wcmVmbGlnaHRQb2xpY3ks
IG1fcGFyYW1ldGVycy5yZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCBtX3BhcmFtZXRlcnMubmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MpKQogewogICAgIGluaXRpYWxpemUobmV0d29ya1Byb2Nlc3MpOwog
fQpAQCAtNTUsNyArNTUsNyBAQCBQaW5nTG9hZDo6UGluZ0xvYWQoTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGNvbm5lY3Rpb24sIE5ldHdvcmtSZXNvdXJjZUxvYQogICAgICwgbV9wYXJh
bWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQogICAgICwgbV90aW1lb3V0VGltZXIoKnRoaXMsICZQ
aW5nTG9hZDo6dGltZW91dFRpbWVyRmlyZWQpCi0gICAgLCBtX25ldHdvcmtMb2FkQ2hlY2tlciht
YWtlVW5pcXVlUmVmPE5ldHdvcmtMb2FkQ2hlY2tlcj4oY29ubmVjdGlvbi5uZXR3b3JrUHJvY2Vz
cygpLCBudWxscHRyLCAgJmNvbm5lY3Rpb24uc2NoZW1lUmVnaXN0cnkoKSwgRmV0Y2hPcHRpb25z
IHsgbV9wYXJhbWV0ZXJzLm9wdGlvbnN9LCBtX3Nlc3Npb25JRCwgbV9wYXJhbWV0ZXJzLndlYlBh
Z2VQcm94eUlELCBXVEZNb3ZlKG1fcGFyYW1ldGVycy5vcmlnaW5hbFJlcXVlc3RIZWFkZXJzKSwg
VVJMIHsgbV9wYXJhbWV0ZXJzLnJlcXVlc3QudXJsKCkgfSwgbV9wYXJhbWV0ZXJzLnNvdXJjZU9y
aWdpbi5jb3B5UmVmKCksIG1fcGFyYW1ldGVycy50b3BPcmlnaW4uY29weVJlZigpLCBtX3BhcmFt
ZXRlcnMucHJlZmxpZ2h0UG9saWN5LCBtX3BhcmFtZXRlcnMucmVxdWVzdC5odHRwUmVmZXJyZXIo
KSkpCisgICAgLCBtX25ldHdvcmtMb2FkQ2hlY2tlcihtYWtlVW5pcXVlUmVmPE5ldHdvcmtMb2Fk
Q2hlY2tlcj4oY29ubmVjdGlvbi5uZXR3b3JrUHJvY2VzcygpLCBudWxscHRyLCAgJmNvbm5lY3Rp
b24uc2NoZW1lUmVnaXN0cnkoKSwgRmV0Y2hPcHRpb25zIHsgbV9wYXJhbWV0ZXJzLm9wdGlvbnN9
LCBtX3Nlc3Npb25JRCwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VQcm94eUlELCBXVEZNb3ZlKG1fcGFy
YW1ldGVycy5vcmlnaW5hbFJlcXVlc3RIZWFkZXJzKSwgVVJMIHsgbV9wYXJhbWV0ZXJzLnJlcXVl
c3QudXJsKCkgfSwgbV9wYXJhbWV0ZXJzLnNvdXJjZU9yaWdpbi5jb3B5UmVmKCksIG1fcGFyYW1l
dGVycy50b3BPcmlnaW4uY29weVJlZigpLCBtX3BhcmFtZXRlcnMucHJlZmxpZ2h0UG9saWN5LCBt
X3BhcmFtZXRlcnMucmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgbV9wYXJhbWV0ZXJzLm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKSkKICAgICAsIG1fYmxvYkZpbGVzKGNvbm5lY3Rpb24ucmVzb2x2ZUJs
b2JSZWZlcmVuY2VzKG1fcGFyYW1ldGVycykpCiB7CiAgICAgZm9yIChhdXRvJiBmaWxlIDogbV9i
bG9iRmlsZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2Vy
dmljZVdvcmtlci9TZXJ2aWNlV29ya2VyU29mdFVwZGF0ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvU2VydmljZVdvcmtlclNvZnRVcGRhdGVM
b2FkZXIuY3BwCmluZGV4IDM0ZjRkOWQ2ZTdmNi4uNTdmMDAxZjY5MDkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvU2VydmljZVdvcmtlclNv
ZnRVcGRhdGVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2Vy
dmljZVdvcmtlci9TZXJ2aWNlV29ya2VyU29mdFVwZGF0ZUxvYWRlci5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgU2VydmljZVdvcmtlclNvZnRVcGRhdGVMb2FkZXI6OlNlcnZpY2VXb3JrZXJTb2Z0VXBk
YXRlTG9hZGVyKE5ldHdvcmtTZXNzaW9uJiBzZXMKICAgICAgICAgLy8gV2Ugc2V0IGNhY2hlIHBv
bGljeSB0byBkaXNhYmxlIHNwZWN1bGF0aXZlIGxvYWRpbmcvYXN5bmMgcmV2YWxpZGF0aW9uIGZy
b20gdGhlIGNhY2hlLgogICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJlc291cmNlUmVx
dWVzdENhY2hlUG9saWN5OjpSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CiAKLSAgICAgICAgc2Vz
c2lvbi5jYWNoZSgpLT5yZXRyaWV2ZShyZXF1ZXN0LCBOZXR3b3JrQ2FjaGU6Okdsb2JhbEZyYW1l
SUQgeyB9LCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm8sIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdCwgc2hvdWxkUmVmcmVzaENhY2hlXShhdXRvJiYg
ZW50cnksIGF1dG8mJikgbXV0YWJsZSB7CisgICAgICAgIHNlc3Npb24uY2FjaGUoKS0+cmV0cmll
dmUocmVxdWVzdCwgTmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEIHsgfSwgTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW46Ok5vLCBmYWxzZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCByZXF1ZXN0LCBzaG91bGRSZWZyZXNoQ2FjaGVdKGF1dG8mJiBlbnRyeSwgYXV0byYm
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgaWYgKCFtX3Nlc3Npb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRpb24uY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9Bc3luY1JldmFsaWRhdGlvbi5jcHAKaW5k
ZXggNTlhZTQzM2RhNzA3Li4yOWVjMGFiNWFlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRpb24uY3BwCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgQXN5bmNSZXZhbGlkYXRpb246OnN0YWxlV2hpbGVSZXZhbGlkYXRlRW5k
aW5nKCkKICAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihSZXN1bHQ6OlRpbWVvdXQpOwogfQog
Ci1Bc3luY1JldmFsaWRhdGlvbjo6QXN5bmNSZXZhbGlkYXRpb24oQ2FjaGUmIGNhY2hlLCBjb25z
dCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiYmIGVudHJ5LCBP
cHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXN1bHQpPiYmIGhhbmRsZXIpCitBc3lu
Y1JldmFsaWRhdGlvbjo6QXN5bmNSZXZhbGlkYXRpb24oQ2FjaGUmIGNhY2hlLCBjb25zdCBHbG9i
YWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiYmIGVudHJ5LCBPcHRpb25h
bDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
biwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZXN1bHQpPiYmIGhhbmRsZXIpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQXN5bmNSZXZhbGlkYXRp
b246OnN0YWxlV2hpbGVSZXZhbGlkYXRlRW5kaW5nKQogICAgICwgbV9jb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKGhhbmRsZXIpKQogewpAQCAtNzcsNyArNzcsNyBAQCBBc3luY1JldmFsaWRhdGlv
bjo6QXN5bmNSZXZhbGlkYXRpb24oQ2FjaGUmIGNhY2hlLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBm
cmFtZUlELAogICAgIGF1dG8gcmVzcG9uc2VNYXhTdGFsZW5lc3MgPSBlbnRyeS0+cmVzcG9uc2Uo
KS5jYWNoZUNvbnRyb2xTdGFsZVdoaWxlUmV2YWxpZGF0ZSgpOwogICAgIEFTU0VSVChyZXNwb25z
ZU1heFN0YWxlbmVzcyk7CiAgICAgbV90aW1lci5zdGFydE9uZVNob3QoKnJlc3BvbnNlTWF4U3Rh
bGVuZXNzICsgKGxpZmV0aW1lIC0gYWdlKSk7Ci0gICAgbV9sb2FkID0gbWFrZVVuaXF1ZTxTcGVj
dWxhdGl2ZUxvYWQ+KGNhY2hlLCBmcmFtZUlELCBXVEZNb3ZlKHJldmFsaWRhdGlvblJlcXVlc3Qp
LCBXVEZNb3ZlKGVudHJ5KSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgW3RoaXMsIGtl
eSwgcmV2YWxpZGF0aW9uUmVxdWVzdF0oYXV0byYmIHJldmFsaWRhdGVkRW50cnkpIHsKKyAgICBt
X2xvYWQgPSBtYWtlVW5pcXVlPFNwZWN1bGF0aXZlTG9hZD4oY2FjaGUsIGZyYW1lSUQsIFdURk1v
dmUocmV2YWxpZGF0aW9uUmVxdWVzdCksIFdURk1vdmUoZW50cnkpLCBpc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluLCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgW3RoaXMsIGtleSwgcmV2YWxp
ZGF0aW9uUmVxdWVzdF0oYXV0byYmIHJldmFsaWRhdGVkRW50cnkpIHsKICAgICAgICAgQVNTRVJU
KCFyZXZhbGlkYXRlZEVudHJ5IHx8ICFyZXZhbGlkYXRlZEVudHJ5LT5uZWVkc1ZhbGlkYXRpb24o
KSk7CiAgICAgICAgIEFTU0VSVCghcmV2YWxpZGF0ZWRFbnRyeSB8fCByZXZhbGlkYXRlZEVudHJ5
LT5rZXkoKSA9PSBrZXkpOwogICAgICAgICBpZiAobV9jb21wbGV0aW9uSGFuZGxlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRp
b24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRp
b24uaAppbmRleCBlODk3NzEwYjY1ZTQuLmQ0ODE3MGUzODE5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9Bc3luY1JldmFsaWRhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQXN5bmNSZXZhbGlkYXRpb24uaApAQCAt
NTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRpbWVvdXQsCiAgICAgICAgIFN1Y2Nlc3Ms
CiAgICAgfTsKLSAgICBBc3luY1JldmFsaWRhdGlvbihDYWNoZSYsIGNvbnN0IEdsb2JhbEZyYW1l
SUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhY2hlOjpFbnRyeT4mJiwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc3VsdCk+JiYpOworICAgIEFzeW5jUmV2YWxpZGF0
aW9uKENhY2hlJiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiYmLCBPcHRpb25h
bDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4sIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzdWx0KT4mJik7CiAgICAgdm9pZCBjYW5jZWwo
KTsKIAogICAgIGNvbnN0IFNwZWN1bGF0aXZlTG9hZCYgbG9hZCgpIGNvbnN0IHsgcmV0dXJuICpt
X2xvYWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlLmNwcAppbmRleCA2NGNkNGJjZDE2MTYuLjcwNzNjNjM1MWZkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApA
QCAtMzQwLDEzICszNDAsMTMgQEAgc3RhdGljIGJvb2wgaW5saW5lIGNhblJlcXVlc3RVc2VTcGVj
dWxhdGl2ZVJldmFsaWRhdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSkKLXZvaWQgQ2Fj
aGU6OnN0YXJ0QXN5bmNSZXZhbGlkYXRpb25JZk5lZWRlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXksIHN0ZDo6dW5p
cXVlX3B0cjxFbnRyeT4mJiBlbnRyeSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgT3B0
aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4pCit2b2lkIENhY2hlOjpzdGFydEFzeW5jUmV2YWxpZGF0aW9uSWZOZWVkZWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBOZXR3b3JrQ2FjaGU6Oktl
eSYga2V5LCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+JiYgZW50cnksIGNvbnN0IEdsb2JhbEZyYW1l
SUQmIGZyYW1lSUQsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluLCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKQogewog
ICAgIG1fcGVuZGluZ0FzeW5jUmV2YWxpZGF0aW9ucy5lbnN1cmUoa2V5LCBbJl0gewogICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fcGVuZGluZ0FzeW5jUmV2YWxpZGF0aW9uQnlQYWdlLmVuc3Vy
ZShmcmFtZUlELCBbXSB7CiAgICAgICAgICAgICByZXR1cm4gV2Vha0hhc2hTZXQ8QXN5bmNSZXZh
bGlkYXRpb24+KCk7CiAgICAgICAgIH0pOwotICAgICAgICBhdXRvIHJldmFsaWRhdGlvbiA9IG1h
a2VVbmlxdWU8QXN5bmNSZXZhbGlkYXRpb24+KCp0aGlzLCBmcmFtZUlELCByZXF1ZXN0LCBXVEZN
b3ZlKGVudHJ5KSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgW3RoaXMsIGtleV0oYXV0
byByZXN1bHQpIHsKKyAgICAgICAgYXV0byByZXZhbGlkYXRpb24gPSBtYWtlVW5pcXVlPEFzeW5j
UmV2YWxpZGF0aW9uPigqdGhpcywgZnJhbWVJRCwgcmVxdWVzdCwgV1RGTW92ZShlbnRyeSksIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzLCBbdGhp
cywga2V5XShhdXRvIHJlc3VsdCkgewogICAgICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0FzeW5j
UmV2YWxpZGF0aW9ucy5jb250YWlucyhrZXkpKTsKICAgICAgICAgICAgIG1fcGVuZGluZ0FzeW5j
UmV2YWxpZGF0aW9ucy5yZW1vdmUoa2V5KTsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIEFzeW5jIHJldmFsaWRhdGlvbiBjb21wbGV0ZWQgZm9yICclcycg
d2l0aCByZXN1bHQgJWQiLCBrZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19j
YXN0PGludD4ocmVzdWx0KSk7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBDYWNoZTo6YnJvd3Np
bmdDb250ZXh0UmVtb3ZlZChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBX
ZWJDb3IKICNlbmRpZgogfQogCi12b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIE9w
dGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluLCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBib29sIG5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzLCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpKTsKIApAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJCiAjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIGJvb2wg
Y2FuVXNlU3BlY3VsYXRpdmVSZXZhbGlkYXRpb24gPSBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIg
JiYgY2FuUmVxdWVzdFVzZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKHJlcXVlc3QpOwogICAgIGlm
IChjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbikKLSAgICAgICAgbV9zcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLT5yZWdpc3RlckxvYWQoZnJhbWVJRCwgcmVxdWVzdCwgc3RvcmFnZUtleSwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFu
YWdlci0+cmVnaXN0ZXJMb2FkKGZyYW1lSUQsIHJlcXVlc3QsIHN0b3JhZ2VLZXksIGlzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKICNlbmRpZgog
CiAgICAgYXV0byByZXRyaWV2ZURlY2lzaW9uID0gbWFrZVJldHJpZXZlRGVjaXNpb24ocmVxdWVz
dCk7CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUkKICAgICB9CiAj
ZW5kaWYKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHJlcXVlc3QsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGluZm8gPSBXVEZNb3ZlKGluZm8p
LCBzdG9yYWdlS2V5LCBuZXR3b3JrUHJvY2VzcyA9IG1ha2VSZWYobmV0d29ya1Byb2Nlc3MoKSks
IHNlc3Npb25JRCA9IG1fc2Vzc2lvbklELCBmcmFtZUlELCBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluXShhdXRvIHJlY29yZCwgYXV0byB0aW1pbmdzKSBtdXRhYmxlIHsKKyAgICBtX3N0b3Jh
Z2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBpbmZvID0gV1RGTW92ZShpbmZvKSwgc3RvcmFnZUtleSwgbmV0d29y
a1Byb2Nlc3MgPSBtYWtlUmVmKG5ldHdvcmtQcm9jZXNzKCkpLCBzZXNzaW9uSUQgPSBtX3Nlc3Np
b25JRCwgZnJhbWVJRCwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgbmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3NdKGF1dG8gcmVjb3JkLCBhdXRvIHRpbWluZ3MpIG11dGFibGUgewogICAgICAg
ICBpbmZvLnN0b3JhZ2VUaW1pbmdzID0gdGltaW5nczsKIAogICAgICAgICBpZiAoIXJlY29yZCkg
ewpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJCiAjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSkKICAgICAgICAgICAgIGF1dG8g
ZW50cnlDb3B5ID0gbWFrZVVuaXF1ZTxFbnRyeT4oKmVudHJ5KTsKICAgICAgICAgICAgIGVudHJ5
Q29weS0+c2V0TmVlZHNWYWxpZGF0aW9uKHRydWUpOwotICAgICAgICAgICAgc3RhcnRBc3luY1Jl
dmFsaWRhdGlvbklmTmVlZGVkKHJlcXVlc3QsIHN0b3JhZ2VLZXksIFdURk1vdmUoZW50cnlDb3B5
KSwgZnJhbWVJRCwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CisgICAgICAgICAgICBz
dGFydEFzeW5jUmV2YWxpZGF0aW9uSWZOZWVkZWQocmVxdWVzdCwgc3RvcmFnZUtleSwgV1RGTW92
ZShlbnRyeUNvcHkpLCBmcmFtZUlELCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGZy
YW1lSUQpOwogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5kZXggZTVjNjA1YzUx
ZjMyLi5jOWQ0MmI5YTkxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgfTsKICAgICB1c2luZyBSZXRyaWV2ZUNv
bXBsZXRpb25IYW5kbGVyID0gRnVuY3Rpb248dm9pZChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+LCBj
b25zdCBSZXRyaWV2ZUluZm8mKT47Ci0gICAgdm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZv
aWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFs
RnJhbWVJRCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgYm9vbCBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcywgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmKTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiYmLCBGdW5jdGlvbjx2b2lkKE1hcHBlZEJvZHkmKT4mJiA9IG51bGxwdHIpOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmVSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QsIE9wdGlvbmFsPFNlY29u
ZHM+IG1heEFnZUNhcCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB1cGRhdGUoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRW50cnkmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOwpAQCAtMjAxLDcgKzIwMSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVf
UkVWQUxJREFURSkKLSAgICB2b2lkIHN0YXJ0QXN5bmNSZXZhbGlkYXRpb25JZk5lZWRlZChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYsIHN0
ZDo6dW5pcXVlX3B0cjxFbnRyeT4mJiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIE9wdGlvbmFsPE5h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPik7CisgICAgdm9pZCBzdGFydEFzeW5jUmV2YWxpZGF0
aW9uSWZOZWVkZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgTmV0d29y
a0NhY2hlOjpLZXkmLCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+JiYsIGNvbnN0IEdsb2JhbEZyYW1l
SUQmLCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4sIGJvb2wgbmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MpOwogI2VuZGlmCiAKICAgICB2b2lkIGJyb3dzaW5nQ29udGV4dFJlbW92
ZWQoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAK
aW5kZXggNGMxMDczNTBmYTQzLi40NzE0YjVlOGJhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TcGVjdWxhdGl2ZUxvYWQ6OlNwZWN1bGF0
aXZlTG9hZChDYWNoZSYgY2FjaGUsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGdsb2JhbEZyYW1lSUQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtD
YWNoZTo6RW50cnk+IGNhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBPcHRpb25hbDxOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgUmV2YWxpZGF0
aW9uQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK1NwZWN1bGF0aXZlTG9h
ZDo6U3BlY3VsYXRpdmVMb2FkKENhY2hlJiBjYWNoZSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZ2xv
YmFsRnJhbWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIE9wdGlvbmFs
PE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
LCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzLCBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFu
ZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIDogbV9jYWNoZShjYWNoZSkKICAgICAsIG1f
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgLCBtX29y
aWdpbmFsUmVxdWVzdChyZXF1ZXN0KQpAQCAtNjgsNiArNjgsNyBAQCBTcGVjdWxhdGl2ZUxvYWQ6
OlNwZWN1bGF0aXZlTG9hZChDYWNoZSYgY2FjaGUsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGdsb2Jh
bEZyYW1lSQogICAgIHBhcmFtZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3kgPSBD
b250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeTo6U25pZmY7CiAgICAgcGFyYW1ldGVycy5yZXF1
ZXN0ID0gbV9vcmlnaW5hbFJlcXVlc3Q7CiAgICAgcGFyYW1ldGVycy5pc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluID0gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsKKyAgICBwYXJhbWV0
ZXJzLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7CiAg
ICAgbV9uZXR3b3JrTG9hZCA9IG1ha2VVbmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBudWxscHRy
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCAqbmV0d29ya1Nlc3Npb24pOwogICAgIG1fbmV0d29ya0xv
YWQtPnN0YXJ0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaAppbmRleCBkYjVk
ZGRiOGU2ZmUuLmZjNzEzODVmMTY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFNwZWN1bGF0aXZlTG9hZCBmaW5hbCA6IHB1YmxpYyBO
ZXR3b3JrTG9hZENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgdXNpbmcgUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXIgPSBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik+OwotICAgIFNw
ZWN1bGF0aXZlTG9hZChDYWNoZSYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4s
IE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiwgUmV2YWxpZGF0aW9uQ29tcGxl
dGlvbkhhbmRsZXImJik7CisgICAgU3BlY3VsYXRpdmVMb2FkKENhY2hlJiwgY29uc3QgR2xvYmFs
RnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+LCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzLCBSZXZhbGlkYXRpb25Db21wbGV0aW9u
SGFuZGxlciYmKTsKIAogICAgIHZpcnR1YWwgflNwZWN1bGF0aXZlTG9hZCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAppbmRleCAyMWEzZGQyOTM5
NWIuLmFhNGQzNGY4ZDEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZE1hbmFnZXIuY3BwCkBAIC0zNDMsNyArMzQzLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyOjpzaG91bGRSZWdpc3RlckxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jgog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJlZ2lz
dGVyTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IEtleSYgcmVzb3VyY2VLZXksIE9wdGlvbmFsPE5hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQordm9pZCBTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZWdpc3RlckxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJh
bWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLZXkmIHJlc291cmNl
S2V5LCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSk7CkBAIC0zNjcsMTIgKzM2NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
TG9hZE1hbmFnZXI6OnJlZ2lzdGVyTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBj
b25zdCBSZQogICAgICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLmFkZChmcmFtZUlELCBwZW5kaW5n
RnJhbWVMb2FkLmNvcHlSZWYoKSk7CiAKICAgICAgICAgLy8gUmV0cmlldmUgdGhlIHN1YnJlc291
cmNlcyBlbnRyeSBpZiBpdCBleGlzdHMgdG8gc3RhcnQgc3BlY3VsYXRpdmUgcmV2YWxpZGF0aW9u
IGFuZCB0byB1cGRhdGUgaXQuCi0gICAgICAgIHJldHJpZXZlU3VicmVzb3VyY2VzRW50cnkocmVz
b3VyY2VLZXksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgZnJhbWVJRCwg
cGVuZGluZ0ZyYW1lTG9hZCA9IFdURk1vdmUocGVuZGluZ0ZyYW1lTG9hZCksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW5dKHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gZW50
cnkpIHsKKyAgICAgICAgcmV0cmlldmVTdWJyZXNvdXJjZXNFbnRyeShyZXNvdXJjZUtleSwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBmcmFtZUlELCBwZW5kaW5nRnJhbWVM
b2FkID0gV1RGTW92ZShwZW5kaW5nRnJhbWVMb2FkKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbiwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3NdKHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJj
ZXNFbnRyeT4gZW50cnkpIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICAgICAg
c3RhcnRTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihmcmFtZUlELCAqZW50cnksIGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXJ0U3BlY3VsYXRpdmVSZXZh
bGlkYXRpb24oZnJhbWVJRCwgKmVudHJ5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAKICAgICAgICAgICAgIHBlbmRpbmdGcmFtZUxvYWQt
PnNldEV4aXN0aW5nU3VicmVzb3VyY2VzRW50cnkoV1RGTW92ZShlbnRyeSkpOwogICAgICAgICB9
KTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnByZWNv
bm5lY3RGb3JTdWJyZXNvdXJjZShjb25zdCBTdWJyZXNvdXJjZUluZm8mIHN1YgogI2VuZGlmCiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV2YWxpZGF0ZVN1YnJlc291cmNlKGNv
bnN0IFN1YnJlc291cmNlSW5mbyYgc3VicmVzb3VyY2VJbmZvLCBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IGVudHJ5LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBPcHRpb25hbDxOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikKK3ZvaWQg
U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV2YWxpZGF0ZVN1YnJlc291cmNlKGNvbnN0IFN1YnJl
c291cmNlSW5mbyYgc3VicmVzb3VyY2VJbmZvLCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5
LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgYm9vbCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcykKIHsKICAgICBBU1NFUlQoIWVudHJ5IHx8IGVudHJ5LT5uZWVkc1ZhbGlk
YXRpb24oKSk7CiAKQEAgLTQ5MSwxMSArNDkxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVMb2FkTWFu
YWdlcjo6cmV2YWxpZGF0ZVN1YnJlc291cmNlKGNvbnN0IFN1YnJlc291cmNlSW5mbyYgc3VicmVz
CiAgICAgLy8gcmVzcG9uc2Ugc2V0cyBjb29raWVzIHRoYXQgYXJlIG5lZWRlZCBmb3Igc3Vic2Vx
dWVudCBsb2Fkcy4KICAgICBpZiAocGVuZGluZ0xvYWQgJiYgIXBlbmRpbmdMb2FkLT5kaWRSZWNl
aXZlTWFpblJlc291cmNlUmVzcG9uc2UoKSAmJiBzdWJyZXNvdXJjZUluZm8uaXNGaXJzdFBhcnR5
KCkpIHsKICAgICAgICAgcHJlY29ubmVjdEZvclN1YnJlc291cmNlKHN1YnJlc291cmNlSW5mbywg
ZW50cnkuZ2V0KCksIGZyYW1lSUQsIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwotICAg
ICAgICBwZW5kaW5nTG9hZC0+YWRkUG9zdE1haW5SZXNvdXJjZVJlc3BvbnNlVGFzayhbdGhpcywg
c3VicmVzb3VyY2VJbmZvLCBlbnRyeSA9IFdURk1vdmUoZW50cnkpLCBmcmFtZUlELCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluXSgpIG11dGFibGUgeworICAgICAgICBwZW5kaW5nTG9hZC0+
YWRkUG9zdE1haW5SZXNvdXJjZVJlc3BvbnNlVGFzayhbdGhpcywgc3VicmVzb3VyY2VJbmZvLCBl
bnRyeSA9IFdURk1vdmUoZW50cnkpLCBmcmFtZUlELCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluLCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrc10oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlm
IChtX3BlbmRpbmdQcmVsb2Fkcy5jb250YWlucyhzdWJyZXNvdXJjZUluZm8ua2V5KCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgcmV2YWxpZGF0ZVN1YnJlc291cmNl
KHN1YnJlc291cmNlSW5mbywgV1RGTW92ZShlbnRyeSksIGZyYW1lSUQsIGlzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4pOworICAgICAgICAgICAgcmV2YWxpZGF0ZVN1YnJlc291cmNlKHN1YnJl
c291cmNlSW5mbywgV1RGTW92ZShlbnRyeSksIGZyYW1lSUQsIGlzTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUxvYWRN
YW5hZ2VyOjpyZXZhbGlkYXRlU3VicmVzb3VyY2UoY29uc3QgU3VicmVzb3VyY2VJbmZvJiBzdWJy
ZXMKIAogICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29y
a1Byb2Nlc3MpIFNwZWN1bGF0aXZlbHkgcmV2YWxpZGF0aW5nICclcyc6Iiwga2V5LmlkZW50aWZp
ZXIoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIGF1dG8gcmV2YWxpZGF0b3IgPSBtYWtlVW5pcXVl
PFNwZWN1bGF0aXZlTG9hZD4obV9jYWNoZSwgZnJhbWVJRCwgcmV2YWxpZGF0aW9uUmVxdWVzdCwg
V1RGTW92ZShlbnRyeSksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIFt0aGlzLCBrZXks
IHJldmFsaWRhdGlvblJlcXVlc3QsIGZyYW1lSURdKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gcmV2
YWxpZGF0ZWRFbnRyeSkgeworICAgIGF1dG8gcmV2YWxpZGF0b3IgPSBtYWtlVW5pcXVlPFNwZWN1
bGF0aXZlTG9hZD4obV9jYWNoZSwgZnJhbWVJRCwgcmV2YWxpZGF0aW9uUmVxdWVzdCwgV1RGTW92
ZShlbnRyeSksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIG5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzLCBbdGhpcywga2V5LCByZXZhbGlkYXRpb25SZXF1ZXN0LCBmcmFtZUlEXShzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IHJldmFsaWRhdGVkRW50cnkpIHsKICAgICAgICAgQVNTRVJUKCFyZXZh
bGlkYXRlZEVudHJ5IHx8ICFyZXZhbGlkYXRlZEVudHJ5LT5uZWVkc1ZhbGlkYXRpb24oKSk7CiAg
ICAgICAgIEFTU0VSVCghcmV2YWxpZGF0ZWRFbnRyeSB8fCByZXZhbGlkYXRlZEVudHJ5LT5rZXko
KSA9PSBrZXkpOwogCkBAIC01NjAsMTMgKzU2MCwxMyBAQCBzdGF0aWMgYm9vbCBjYW5SZXZhbGlk
YXRlKGNvbnN0IFN1YnJlc291cmNlSW5mbyYgc3VicmVzb3VyY2VJbmZvLCBjb25zdCBFbnRyeSog
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpw
cmVsb2FkRW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IFN1YnJlc291cmNlSW5mbyYgc3VicmVz
b3VyY2VJbmZvLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBPcHRpb25hbDxOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikKK3ZvaWQg
U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cHJlbG9hZEVudHJ5KGNvbnN0IEtleSYga2V5LCBjb25z
dCBTdWJyZXNvdXJjZUluZm8mIHN1YnJlc291cmNlSW5mbywgY29uc3QgR2xvYmFsRnJhbWVJRCYg
ZnJhbWVJRCwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4sIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpCiB7CiAgICAg
aWYgKG1fcGVuZGluZ1ByZWxvYWRzLmNvbnRhaW5zKGtleSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3BlbmRpbmdQcmVsb2Fkcy5hZGQoa2V5LCBudWxscHRyKTsKICAgICAKLSAgICByZXRyaWV2
ZUVudHJ5RnJvbVN0b3JhZ2Uoc3VicmVzb3VyY2VJbmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGtleSwgc3VicmVzb3VyY2VJbmZvLCBmcmFtZUlELCBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5KSB7CisgICAg
cmV0cmlldmVFbnRyeUZyb21TdG9yYWdlKHN1YnJlc291cmNlSW5mbywgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBrZXksIHN1YnJlc291cmNlSW5mbywgZnJhbWVJRCwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3NdKHN0ZDo6
dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAg
ICAgICAgIHJldHVybjsKIApAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVMb2Fk
TWFuYWdlcjo6cHJlbG9hZEVudHJ5KGNvbnN0IEtleSYga2V5LCBjb25zdCBTdWJyZXNvdXJjZUlu
Zm8mCiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LT5uZWVkc1ZhbGlkYXRp
b24oKSkgewogICAgICAgICAgICAgaWYgKGNhblJldmFsaWRhdGUoc3VicmVzb3VyY2VJbmZvLCBl
bnRyeS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV2YWxpZGF0ZVN1YnJlc291cmNlKHN1YnJl
c291cmNlSW5mbywgV1RGTW92ZShlbnRyeSksIGZyYW1lSUQsIGlzTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4pOworICAgICAgICAgICAgICAgIHJldmFsaWRhdGVTdWJyZXNvdXJjZShzdWJyZXNv
dXJjZUluZm8sIFdURk1vdmUoZW50cnkpLCBmcmFtZUlELCBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluLCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC01OTAsMTIgKzU5MCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
TG9hZE1hbmFnZXI6OnByZWxvYWRFbnRyeShjb25zdCBLZXkmIGtleSwgY29uc3QgU3VicmVzb3Vy
Y2VJbmZvJgogICAgIH0pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnN0YXJ0
U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgU3Vi
cmVzb3VyY2VzRW50cnkmIGVudHJ5LCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikKK3ZvaWQgU3BlY3VsYXRpdmVMb2FkTWFu
YWdlcjo6c3RhcnRTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihjb25zdCBHbG9iYWxGcmFtZUlEJiBm
cmFtZUlELCBTdWJyZXNvdXJjZXNFbnRyeSYgZW50cnksIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBib29sIG5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKQogewogICAgIGZvciAoYXV0byYgc3VicmVzb3VyY2VJbmZvIDogZW50
cnkuc3VicmVzb3VyY2VzKCkpIHsKICAgICAgICAgYXV0byYga2V5ID0gc3VicmVzb3VyY2VJbmZv
LmtleSgpOwogICAgICAgICBpZiAoIXN1YnJlc291cmNlSW5mby5pc1RyYW5zaWVudCgpKQotICAg
ICAgICAgICAgcHJlbG9hZEVudHJ5KGtleSwgc3VicmVzb3VyY2VJbmZvLCBmcmFtZUlELCBpc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKKyAgICAgICAgICAgIHByZWxvYWRFbnRyeShrZXks
IHN1YnJlc291cmNlSW5mbywgZnJhbWVJRCwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwg
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5v
dCBwcmVsb2FkaW5nICclcycgYmVjYXVzZSBpdCBpcyBtYXJrZWQgYXMgdHJhbnNpZW50Iiwga2V5
LmlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1fbm90UHJlbG9hZGVk
RW50cmllcy5hZGQoa2V5LCBtYWtlVW5pcXVlPEV4cGlyaW5nRW50cnk+KFt0aGlzLCBrZXksIGZy
YW1lSURdIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmgKaW5k
ZXggYTE0MTAxNDNjN2YxLi45NmNkZWM3NTFhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBleHBs
aWNpdCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKENhY2hlJiwgU3RvcmFnZSYpOwogICAgIH5TcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyKCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyTG9hZChjb25zdCBHbG9i
YWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS2V5JiBy
ZXNvdXJjZUtleSwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+KTsKKyAgICB2
b2lkIHJlZ2lzdGVyTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgS2V5JiByZXNvdXJjZUtleSwgT3B0aW9uYWw8TmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4+LCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKICAgICB2
b2lkIHJlZ2lzdGVyTWFpblJlc291cmNlTG9hZFJlc3BvbnNlKGNvbnN0IEdsb2JhbEZyYW1lSUQm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJik7CiAKICAgICB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4pPiBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyOwpAQCAtNjMsMTMgKzYzLDEzIEBA
IHByaXZhdGU6CiAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRSZWdpc3RlckxvYWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdm9pZCBhZGRQcmVsb2FkZWRFbnRyeShzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+LCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgT3B0aW9uYWw8V2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0PiYmIHJldmFsaWRhdGlvblJlcXVlc3QgPSBXVEY6Om51bGxvcHQp
OwotICAgIHZvaWQgcHJlbG9hZEVudHJ5KGNvbnN0IEtleSYsIGNvbnN0IFN1YnJlc291cmNlSW5m
byYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbj4pOworICAgIHZvaWQgcHJlbG9hZEVudHJ5KGNvbnN0IEtleSYsIGNvbnN0IFN1YnJlc291
cmNlSW5mbyYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbj4sIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwogICAgIHZvaWQgcmV0
cmlldmVFbnRyeUZyb21TdG9yYWdlKGNvbnN0IFN1YnJlc291cmNlSW5mbyYsIFJldHJpZXZlQ29t
cGxldGlvbkhhbmRsZXImJik7Ci0gICAgdm9pZCByZXZhbGlkYXRlU3VicmVzb3VyY2UoY29uc3Qg
U3VicmVzb3VyY2VJbmZvJiwgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiwgY29uc3QgR2xvYmFsRnJh
bWVJRCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPik7CisgICAgdm9pZCBy
ZXZhbGlkYXRlU3VicmVzb3VyY2UoY29uc3QgU3VicmVzb3VyY2VJbmZvJiwgc3RkOjp1bmlxdWVf
cHRyPEVudHJ5PiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluPiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAgICAgdm9pZCBw
cmVjb25uZWN0Rm9yU3VicmVzb3VyY2UoY29uc3QgU3VicmVzb3VyY2VJbmZvJiwgRW50cnkqLCBj
b25zdCBHbG9iYWxGcmFtZUlEJiwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+
KTsKICAgICBib29sIHNhdGlzZnlQZW5kaW5nUmVxdWVzdHMoY29uc3QgS2V5JiwgRW50cnkqKTsK
ICAgICB2b2lkIHJldHJpZXZlU3VicmVzb3VyY2VzRW50cnkoY29uc3QgS2V5JiBzdG9yYWdlS2V5
LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4p
PiYmKTsKLSAgICB2b2lkIHN0YXJ0U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3QgR2xvYmFs
RnJhbWVJRCYsIFN1YnJlc291cmNlc0VudHJ5JiwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4+KTsKKyAgICB2b2lkIHN0YXJ0U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3Qg
R2xvYmFsRnJhbWVJRCYsIFN1YnJlc291cmNlc0VudHJ5JiwgT3B0aW9uYWw8TmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4+LCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKIAogICAgIHN0
YXRpYyBib29sIGNhblVzZVByZWxvYWRlZEVudHJ5KGNvbnN0IFByZWxvYWRlZEVudHJ5JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KTsKICAgICBzdGF0aWMg
Ym9vbCBjYW5Vc2VQZW5kaW5nUHJlbG9hZChjb25zdCBTcGVjdWxhdGl2ZUxvYWQmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3Bw
CmluZGV4IGRhZWVjZTJlOTRhNi4uYTY1YjQxM2FiYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBA
IC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaG91bGRSZWxheFRoaXJkUGFydHlD
b29raWVCbG9ja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Vz
ZXJBZ2VudC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL2ds
aWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CiAKQEAgLTUxLDExICs1MiwxMiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBnRGVmYXVsdFJlYWRCdWZm
ZXJTaXplID0gODE5MjsKIAotTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291
cChOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgRnJhbWVJZGVu
dGlmaWVyIGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91
bGRDb250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRh
c2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pCitOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3Jr
RGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlELCBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgQ29udGVudFNuaWZmaW5n
UG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVudEVuY29kaW5nU25pZmZp
bmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwg
Ym9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgYm9vbCBuZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcykKICAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdh
dGlvbikKICAgICAsIG1fZnJhbWVJRChmcmFtZUlEKQogICAgICwgbV9wYWdlSUQocGFnZUlEKQog
ICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQorICAgICwgbV9u
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykKICAgICAsIG1f
dGltZW91dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2tTb3Vw
Ojp0aW1lb3V0RmlyZWQpCiB7CiAgICAgbV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFz
aygqdGhpcyk7CkBAIC0xMzQsNiArMTM2LDE0IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6
Y3JlYXRlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKG1fbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MpIHsKKyAgICAgICAgYXV0byB1c2VyQWdlbnQgPSBXZWJDb3Jl
OjpzdGFuZGFyZFVzZXJBZ2VudEZvclVSTChtX2N1cnJlbnRSZXF1ZXN0LnVybCgpKTsKKyAgICAg
ICAgaWYgKCF1c2VyQWdlbnQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KHVzZXJBZ2VudCk7CisgICAgfQorI2VuZGlmCisKICAgICByZXN0
cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQobV9jdXJyZW50UmVxdWVzdCk7CiAK
ICAgICB1bnNpZ25lZCBtZXNzYWdlRmxhZ3MgPSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CkBA
IC02NzEsNiArNjgxLDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQ
UmVkaXJlY3Rpb24oKQogICAgICAgICByZWRpcmVjdGVkVVJMLnNldEZyYWdtZW50SWRlbnRpZmll
cihyZXF1ZXN0LnVybCgpLmZyYWdtZW50SWRlbnRpZmllcigpKTsKICAgICByZXF1ZXN0LnNldFVS
TChyZWRpcmVjdGVkVVJMKTsKIAorICAgIC8vIFNldCB0aGUgdXNlciBhZ2VudCBmcm9tIHRoZSBm
aXJzdCByZXF1ZXN0LCBzaW5jZSB0aGUgY3VycmVudCByZXF1ZXN0IG9uZSBtaWdodAorICAgIC8v
IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IGEgcXVpcmsuCisgICAgaWYgKG1fZmlyc3RSZXF1ZXN0Lmhh
c0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgcmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KG1fZmlyc3RSZXF1ZXN0Lmh0dHBVc2VyQWdlbnQoKSk7Cisg
ICAgZWxzZQorICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworCiAgICAgLy8g
U2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVz
b3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCiAgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIp
ICYmIHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCiAgICAgICAg
IHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCmluZGV4IDFjYTQ1MDdj
YWRhNS4uM2ZiMTEwYzI1MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTM4LDE1ICszOCwxNSBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cCBmaW5hbCA6IHB1
YmxpYyBOZXR3b3JrRGF0YVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya0Rh
dGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0Ns
aWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBw
YWdlSUQsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZm
LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50RW5j
b2RpbmdTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgIHN0YXRpYyBSZWY8
TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29u
dGVudFNuaWZmLCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRD
b250ZW50RW5jb2RpbmdTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uLCBib29sIG5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTmV0d29ya0RhdGFUYXNrU291cChzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIGZyYW1lSUQs
IHBhZ2VJRCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENvbnRlbnRTbmlmZiwgc2hv
dWxkQ29udGVudEVuY29kaW5nU25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza1NvdXAoc2Vzc2lvbiwgY2xpZW50LCBy
ZXF1ZXN0LCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzaG91bGRD
b250ZW50U25pZmYsIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBzaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlv
biwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpKTsKICAgICB9CiAKICAgICB+TmV0d29ya0RhdGFU
YXNrU291cCgpOwogCiBwcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nl
c3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6Q29udGVudFNuaWZm
aW5nUG9saWN5LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNG
b3JNYWluRnJhbWVOYXZpZ2F0aW9uKTsKKyAgICBOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtT
ZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlm
ZmluZ1BvbGljeSwgV2ViQ29yZTo6Q29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIGJvb2wg
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgYm9vbCBkYXRhVGFza0lz
Rm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7CiAK
ICAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7
CkBAIC0xMzAsNiArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBtX3BhZ2VJRDsKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OwogICAg
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKKyAg
ICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwogICAgIEdSZWZQdHI8
U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CiAgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9z
b3VwTWVzc2FnZTsKICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCAwNjg2NjYzYWZk
MjIuLjU1ZTFiNGUzZWJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcApAQCAtMTQxNiw5ICsxNDE2LDExIEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQ
b29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQcm94CiAg
ICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogCiAg
ICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmQgPSBOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CisgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcyA9IGZhbHNlOwogICAgIGlmIChpbml0aWF0aW5nUGFnZSkgewogICAgICAgICBpbml0aWF0
aW5nUGFnZS0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkUHJveHkpOwogICAgICAgICBp
c0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbigpOworICAgICAgICBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IGluaXRpYXRpbmdQ
YWdlLT5wcmVmZXJlbmNlcygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCk7CiAgICAgfQogCiAg
ICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKQEAgLTE0MzgsNyArMTQ0MCw3IEBAIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3Rv
cmUsIFdlYlBhZ2VQcm94CiAgICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgICAgICB9CiAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVl
c3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3Qs
IGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vz
c2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBw
Qm91bmQsIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwog
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAppbmRleCA5
N2ViNWIzNGU3NTYuLmUxZmY5MzYwZjRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcApAQCAtMjcxLDYgKzI3MSw3
IEBAIHN0YXRpYyB2b2lkIGFkZFBhcmFtZXRlcnNTaGFyZWQoY29uc3QgRnJhbWUqIGZyYW1lLCBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhcmFt
ZXRlcnMuaXNIVFRQU1VwZ3JhZGVFbmFibGVkID0gZnJhbWUtPnNldHRpbmdzKCkuSFRUUFNVcGdy
YWRlRW5hYmxlZCgpOworICAgIHBhcmFtZXRlcnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBm
cmFtZS0+c2V0dGluZ3MoKS5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwogCiAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIHBhcmFtZXRlcnMucGFnZUhhc1Jl
c291cmNlTG9hZENsaWVudCA9IHBhZ2UtPmhhc1Jlc291cmNlTG9hZENsaWVudCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGQxYTA2ODll
MGNmZi4uMTA3M2RjOTE2YjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCkBAIC0yODksNyArMjg5LDggQEAgdm9pZCBXZWJGcmFtZTo6c3RhcnRE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmkKIAogICAgIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc0FwcEJvdW5k
ID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgIGlzQXBwQm91bmQgPSBtX2lz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW47Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTdGFydERvd25sb2FkKHBvbGljeURv
d25sb2FkSUQsIHJlcXVlc3QsICBpc0FwcEJvdW5kLCBzdWdnZXN0ZWROYW1lKSwgMCk7CisgICAg
Ym9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IG1fY29yZUZyYW1lID8gbV9jb3JlRnJhbWUt
PnNldHRpbmdzKCkubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSA6IGZhbHNlOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3Rh
cnREb3dubG9hZChwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0LCBpc0FwcEJvdW5kLCBuZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcywgc3VnZ2VzdGVkTmFtZSksIDApOwogfQogCiB2b2lkIFdlYkZyYW1l
Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMzEzLDcgKzMxNCw4IEBAIHZvaWQgV2ViRnJhbWU6OmNv
bnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIsCiAKICAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBC
b3VuZCA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICBpc0FwcEJvdW5kID0g
bV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOwotICAgIHdlYlByb2Nlc3MuZW5zdXJlTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxv
YWQobWFpblJlc291cmNlTG9hZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3Qs
IHJlc3BvbnNlLCBpc0FwcEJvdW5kKSwgMCk7CisgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcyA9IG1fY29yZUZyYW1lID8gbV9jb3JlRnJhbWUtPnNldHRpbmdzKCkubmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MoKSA6IGZhbHNlOworICAgIHdlYlByb2Nlc3MuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQobWFpblJl
c291cmNlTG9hZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNl
LCBpc0FwcEJvdW5kLCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyksIDApOwogfQogCiB2b2lkIFdl
YkZyYW1lOjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VMZXZlbCBtZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3Qg
cmVxdWVzdElEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VHdGsuY3BwCmluZGV4IDRkMDk0M2MyNDg0NS4uMGMzNzhkZTdkMDE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
CkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9X
aW5kb3dzS2V5Ym9hcmRDb2Rlcy5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CkBAIC0xMjMsMTAgKzEyMiw3IEBAIGJvb2wgV2ViUGFnZTo6
cGxhdGZvcm1DYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCiAKIFN0cmlu
ZyBXZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2VudChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKLSAg
ICBpZiAodXJsLmlzTnVsbCgpIHx8ICFtX3BhZ2UtPnNldHRpbmdzKCkubmVlZHNTaXRlU3BlY2lm
aWNRdWlya3MoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIFdlYkNv
cmU6OnN0YW5kYXJkVXNlckFnZW50Rm9yVVJMKHVybCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpnZXRDZW50ZXJGb3Jab29tR2VzdHVyZShjb25zdCBJbnRQb2ludCYgY2Vu
dGVySW5WaWV3Q29vcmRpbmF0ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50
UG9pbnQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCg==
</data>
<flag name="review"
          id="422959"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407676</attachid>
            <date>2020-09-01 06:43:25 -0700</date>
            <delta_ts>2020-09-02 04:35:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-user-agent-quirks-redirection.diff</filename>
            <type>text/plain</type>
            <size>9753</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZDk1NjdlYTZkOTNkLi45MzI1ZGFjOTJlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjAtMDktMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVuZXhwZWN0ZWQgVXNlci1BZ2VudCBvbiByZWRpcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYXIg
dGhlIHVzZXIgYWdlbnQgb24gbmV3IHJlcXVlc3QgYWZ0ZXIgYSByZWRpcmVjdCB0byBlbnN1cmUg
YSBuZXcgb25lIGlzIGNvbXB1dGVkIHRha2luZyBpbnRvIGFjY291bnQgdGhlCisgICAgICAgIHF1
aXJrcyBpZiBuZWVkZWQuIEFsc28gZW5zdXJlIHF1aXJrcyBhcmUgYXBwbGllZCBmb3IgZG93bmxv
YWRzIHN0YXJ0ZWQgaW4gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbik6IENsZWFyIHRoZSB1c2VyIGFn
ZW50IG9uIG5ldyByZXF1ZXN0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
b3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBB
ZGQgdXNlckFnZW50Rm9yVVJMKCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKTogVXNlIHVz
ZXJBZ2VudEZvclVSTCgpIGluc3RlYWQgb2YgdXNlckFnZW50KCkuCisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnVzZXJBZ2VudEZvclVSTCk6IEltcGxlbWVudCBpdCB0byBhcHBseSBxdWlya3MgaWYgbmVl
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IEp1c3QgcmV0dXJuIHRo
ZSB3ZWIgcGFnZSB1c2VyIGFnZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVS
TCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9XZWJQYWdlUHJveHlQ
bGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXNlckFnZW50
Rm9yVVJMKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwpOiBEaXR0by4KKwogMjAy
MC0wOS0wMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS11bV1BFXSBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUg
Zm9yIGRvd25sb2FkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCmluZGV4IGRhZWVjZTJlOTRhNi4uMWRlNWVi
YzViOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC02NzEsNiArNjcxLDkgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAgICAgICAgIHJlZGly
ZWN0ZWRVUkwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCkuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpOwogICAgIHJlcXVlc3Quc2V0VVJMKHJlZGlyZWN0ZWRVUkwpOwogCisgICAgLy8g
Q2xlYXIgdGhlIHVzZXIgYWdlbnQgdG8gZW5zdXJlIGEgbmV3IG9uZSBpcyBjb21wdXRlZC4KKyAg
ICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworCiAgICAgLy8gU2hvdWxkIG5vdCBzZXQg
UmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8gbm9uLXNl
Y3VyZSBvbmUuCiAgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMo
cmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCiAgICAgICAgIHJlcXVlc3QuY2xlYXJI
VFRQUmVmZXJyZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcAppbmRleCA0YjIyNmZkNTQwMjguLmU4ZTg3
MDIyMGQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0RG93bmxvYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyQWdlbnQuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCkBAIC00Nyw2ICs0OCwxNyBAQCBwcml2YXRlOgogICAgICAgICB3
ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKG1fd2ViQ29udGV4dCwgZG93bmxvYWQuZ2V0
KCkpOwogICAgIH0KIAorICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRv
d25sb2FkUHJveHksIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghcmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpIHsKKyAgICAgICAgICAg
IEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQoJmRvd25sb2FkUHJveHkpOworICAgICAgICAgICAgYXV0byogd2ViVmll
dyA9IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KHdlYlZpZXcgPyB3ZWJraXRXZWJWaWV3R2V0
UGFnZSh3ZWJWaWV3KS51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkgOiBXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgfQorCiAgICAgdm9pZCBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSwgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdl
YmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKCZkb3dubG9hZFByb3h5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZDkyZGJlZDEzYTI5Li5lMjgyZTRj
MjA2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC05NzcsNiAr
OTc3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdG9vbFRpcCgpIGNvbnN0IHsgcmV0
dXJuIG1fdG9vbFRpcDsgfQogCiAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX3VzZXJBZ2VudDsgfQorICAgIFN0cmluZyB1c2VyQWdlbnRGb3JVUkwoY29uc3Qg
VVJMJik7CiAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoY29uc3QgU3Ry
aW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsgfQogICAgIHZvaWQg
c2V0QXBwbGljYXRpb25OYW1lRm9yRGVza3RvcFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxp
Y2F0aW9uTmFtZSkgeyBtX2FwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQgPSBhcHBs
aWNhdGlvbk5hbWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAppbmRleCBhM2JjZDRkMjg4NTYuLmYzZTYwMWJlMDRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQyNiw3ICsxNDI2LDcgQEAgRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUGFnZVByb3gKICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlG
b3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VV
UkwsIHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFz
SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJB
Z2VudCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50
KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXMoVVJMKCkpOwogICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShm
YWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVBy
b3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwCmluZGV4IGI2ZmY2MWQyZTg3Ni4uZjBhYWVjMTZmOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtNTIsNiArNTIsMTUgQEAg
R3RrV2lkZ2V0KiBXZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQoKQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkudmlld1dpZGdldCgpOwogfQogCitT
dHJpbmcgV2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgaWYgKHVybC5pc051bGwoKSB8fCAhcHJlZmVyZW5jZXMoKS5uZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcygpKQorICAgICAgICByZXR1cm4gdGhpcy0+dXNlckFnZW50KCk7CisKKyAgICBhdXRvIHVz
ZXJBZ2VudCA9IFdlYkNvcmU6OnN0YW5kYXJkVXNlckFnZW50Rm9yVVJMKHVybCk7CisgICAgcmV0
dXJuIHVzZXJBZ2VudC5pc051bGwoKSA/IHRoaXMtPnVzZXJBZ2VudCgpIDogdXNlckFnZW50Owor
fQorCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcm
IGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6c3Rh
bmRhcmRVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDM3ZjVjYWIzYmI2
OS4uOTUzYmM2ZTE5MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KQEAgLTkwLDYgKzkwLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogewogfQogCitTdHJpbmcgV2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRG
b3JVUkwoY29uc3QgVVJMJikKK3sKKyAgICByZXR1cm4gdXNlckFnZW50KCk7Cit9CisKIFN0cmlu
ZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50KQogewogICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhB
cHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IGMyNDdhZDNhNDJj
ZS4uOGY1YTg4OGFhZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KQEAgLTEyOSw2ICsxMjksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBs
YXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgc2V0U2hvdWxkVXNlSW1wbGljaXRSdWJiZXJCYW5kQ29u
dHJvbChjbGllbnRFeHBlY3RzTGVnYWN5SW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbCk7CiB9CiAK
K1N0cmluZyBXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAg
IHJldHVybiB1c2VyQWdlbnQoKTsKK30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRV
c2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAg
ICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
cGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvcGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwCmluZGV4IDU4
ZjhmYjYwZmZmNi4uOGFlNjQzNDMxNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9wbGF5c3RhdGlvbi9XZWJQYWdlUHJveHlQbGF5U3RhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3Bw
CkBAIC00Myw2ICs0MywxMSBAQCBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogV2ViUGFnZVByb3h5
Ojp2aWV3QmFja2VuZCgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1N0cmluZyBXZWJQYWdl
UHJveHk6OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdl
bnQoKTsKK30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNv
cmU6OnN0YW5kYXJkVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCmluZGV4IDhi
MjY3ZDc1NmZlMC4uMzFlMzkyN2E0YmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViUGFnZVByb3h5V2luLmNwcApAQCAtNDIsNiArNDIsMTEgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CiAKK1N0cmluZyBXZWJQYWdlUHJveHk6
OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdlbnQoKTsK
K30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OnN0
YW5kYXJkVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dwZS9XZWJQYWdlUHJveHlXUEUuY3BwCmluZGV4IDhmNjQwZGJk
ODI1Ny4uMTFhMjNkYmNmZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
cGUvV2ViUGFnZVByb3h5V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUv
V2ViUGFnZVByb3h5V1BFLmNwcApAQCAtNDksNiArNDksMTEgQEAgc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqIFdlYlBhZ2VQcm94eTo6dmlld0JhY2tlbmQoKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkudmlld0JhY2tlbmQoKTsKIH0KIAorU3Ry
aW5nIFdlYlBhZ2VQcm94eTo6dXNlckFnZW50Rm9yVVJMKGNvbnN0IFVSTCYpCit7CisgICAgcmV0
dXJuIHVzZXJBZ2VudCgpOworfQorCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKICAgICBy
ZXR1cm4gV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFn
ZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407756</attachid>
            <date>2020-09-02 04:35:12 -0700</date>
            <delta_ts>2020-09-02 05:12:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ua-redirect.diff</filename>
            <type>text/plain</type>
            <size>21029</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZDk1NjdlYTZkOTNkLi5kYjIzNDc5NjQ3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjAtMDktMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVuZXhwZWN0ZWQgVXNlci1BZ2VudCBvbiByZWRpcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYXIg
dGhlIHVzZXIgYWdlbnQgb24gbmV3IHJlcXVlc3QgYWZ0ZXIgYSByZWRpcmVjdCB0byBlbnN1cmUg
YSBuZXcgb25lIGlzIGNvbXB1dGVkIHRha2luZyBpbnRvIGFjY291bnQgdGhlCisgICAgICAgIHF1
aXJrcyBpZiBuZWVkZWQuIEFsc28gZW5zdXJlIHF1aXJrcyBhcmUgYXBwbGllZCBmb3IgZG93bmxv
YWRzIHN0YXJ0ZWQgaW4gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbik6IENsZWFyIHRoZSB1c2VyIGFn
ZW50IG9uIG5ldyByZXF1ZXN0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
b3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBB
ZGQgdXNlckFnZW50Rm9yVVJMKCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKTogVXNlIHVz
ZXJBZ2VudEZvclVSTCgpIGluc3RlYWQgb2YgdXNlckFnZW50KCkuCisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnVzZXJBZ2VudEZvclVSTCk6IEltcGxlbWVudCBpdCB0byBhcHBseSBxdWlya3MgaWYgbmVl
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IEp1c3QgcmV0dXJuIHRo
ZSB3ZWIgcGFnZSB1c2VyIGFnZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVS
TCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9XZWJQYWdlUHJveHlQ
bGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXNlckFnZW50
Rm9yVVJMKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwpOiBEaXR0by4KKwogMjAy
MC0wOS0wMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS11bV1BFXSBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IFdlYnNpdGVEYXRhU3RvcmUg
Zm9yIGRvd25sb2FkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCmluZGV4IGRhZWVjZTJlOTRhNi4uMWRlNWVi
YzViOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC02NzEsNiArNjcxLDkgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAgICAgICAgIHJlZGly
ZWN0ZWRVUkwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCkuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpOwogICAgIHJlcXVlc3Quc2V0VVJMKHJlZGlyZWN0ZWRVUkwpOwogCisgICAgLy8g
Q2xlYXIgdGhlIHVzZXIgYWdlbnQgdG8gZW5zdXJlIGEgbmV3IG9uZSBpcyBjb21wdXRlZC4KKyAg
ICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworCiAgICAgLy8gU2hvdWxkIG5vdCBzZXQg
UmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8gbm9uLXNl
Y3VyZSBvbmUuCiAgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMo
cmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCiAgICAgICAgIHJlcXVlc3QuY2xlYXJI
VFRQUmVmZXJyZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcAppbmRleCA0YjIyNmZkNTQwMjguLmU4ZTg3
MDIyMGQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0RG93bmxvYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyQWdlbnQuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCkBAIC00Nyw2ICs0OCwxNyBAQCBwcml2YXRlOgogICAgICAgICB3
ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKG1fd2ViQ29udGV4dCwgZG93bmxvYWQuZ2V0
KCkpOwogICAgIH0KIAorICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRv
d25sb2FkUHJveHksIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghcmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpIHsKKyAgICAgICAgICAg
IEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQoJmRvd25sb2FkUHJveHkpOworICAgICAgICAgICAgYXV0byogd2ViVmll
dyA9IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KHdlYlZpZXcgPyB3ZWJraXRXZWJWaWV3R2V0
UGFnZSh3ZWJWaWV3KS51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkgOiBXZWJQYWdlUHJv
eHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgfQorCiAgICAgdm9pZCBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSwgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdl
YmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKCZkb3dubG9hZFByb3h5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZDkyZGJlZDEzYTI5Li5lMjgyZTRj
MjA2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC05NzcsNiAr
OTc3LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdG9vbFRpcCgpIGNvbnN0IHsgcmV0
dXJuIG1fdG9vbFRpcDsgfQogCiAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX3VzZXJBZ2VudDsgfQorICAgIFN0cmluZyB1c2VyQWdlbnRGb3JVUkwoY29uc3Qg
VVJMJik7CiAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoY29uc3QgU3Ry
aW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsgfQogICAgIHZvaWQg
c2V0QXBwbGljYXRpb25OYW1lRm9yRGVza3RvcFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxp
Y2F0aW9uTmFtZSkgeyBtX2FwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQgPSBhcHBs
aWNhdGlvbk5hbWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAppbmRleCBhM2JjZDRkMjg4NTYuLmYzZTYwMWJlMDRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQyNiw3ICsxNDI2LDcgQEAgRG93bmxvYWRQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgV2ViUGFnZVByb3gKICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlG
b3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VV
UkwsIHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFz
SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJB
Z2VudCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50
KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXMoVVJMKCkpOwogICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShm
YWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVBy
b3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwCmluZGV4IGI2ZmY2MWQyZTg3Ni4uZjBhYWVjMTZmOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtNTIsNiArNTIsMTUgQEAg
R3RrV2lkZ2V0KiBXZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQoKQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkudmlld1dpZGdldCgpOwogfQogCitT
dHJpbmcgV2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgaWYgKHVybC5pc051bGwoKSB8fCAhcHJlZmVyZW5jZXMoKS5uZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcygpKQorICAgICAgICByZXR1cm4gdGhpcy0+dXNlckFnZW50KCk7CisKKyAgICBhdXRvIHVz
ZXJBZ2VudCA9IFdlYkNvcmU6OnN0YW5kYXJkVXNlckFnZW50Rm9yVVJMKHVybCk7CisgICAgcmV0
dXJuIHVzZXJBZ2VudC5pc051bGwoKSA/IHRoaXMtPnVzZXJBZ2VudCgpIDogdXNlckFnZW50Owor
fQorCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcm
IGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6c3Rh
bmRhcmRVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDM3ZjVjYWIzYmI2
OS4uOTUzYmM2ZTE5MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KQEAgLTkwLDYgKzkwLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogewogfQogCitTdHJpbmcgV2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRG
b3JVUkwoY29uc3QgVVJMJikKK3sKKyAgICByZXR1cm4gdXNlckFnZW50KCk7Cit9CisKIFN0cmlu
ZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50KQogewogICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhB
cHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IGMyNDdhZDNhNDJj
ZS4uOGY1YTg4OGFhZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0KQEAgLTEyOSw2ICsxMjksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBs
YXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgc2V0U2hvdWxkVXNlSW1wbGljaXRSdWJiZXJCYW5kQ29u
dHJvbChjbGllbnRFeHBlY3RzTGVnYWN5SW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbCk7CiB9CiAK
K1N0cmluZyBXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAg
IHJldHVybiB1c2VyQWdlbnQoKTsKK30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRV
c2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAg
ICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
cGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvcGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwCmluZGV4IDU4
ZjhmYjYwZmZmNi4uOGFlNjQzNDMxNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9wbGF5c3RhdGlvbi9XZWJQYWdlUHJveHlQbGF5U3RhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3Bw
CkBAIC00Myw2ICs0MywxMSBAQCBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogV2ViUGFnZVByb3h5
Ojp2aWV3QmFja2VuZCgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1N0cmluZyBXZWJQYWdl
UHJveHk6OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdl
bnQoKTsKK30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3Qg
U3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNv
cmU6OnN0YW5kYXJkVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCmluZGV4IDhi
MjY3ZDc1NmZlMC4uMzFlMzkyN2E0YmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViUGFnZVByb3h5V2luLmNwcApAQCAtNDIsNiArNDIsMTEgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CiAKK1N0cmluZyBXZWJQYWdlUHJveHk6
OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdlbnQoKTsK
K30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OnN0
YW5kYXJkVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dwZS9XZWJQYWdlUHJveHlXUEUuY3BwCmluZGV4IDhmNjQwZGJk
ODI1Ny4uMTFhMjNkYmNmZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
cGUvV2ViUGFnZVByb3h5V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUv
V2ViUGFnZVByb3h5V1BFLmNwcApAQCAtNDksNiArNDksMTEgQEAgc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqIFdlYlBhZ2VQcm94eTo6dmlld0JhY2tlbmQoKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkudmlld0JhY2tlbmQoKTsKIH0KIAorU3Ry
aW5nIFdlYlBhZ2VQcm94eTo6dXNlckFnZW50Rm9yVVJMKGNvbnN0IFVSTCYpCit7CisgICAgcmV0
dXJuIHVzZXJBZ2VudCgpOworfQorCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKICAgICBy
ZXR1cm4gV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFn
ZW50KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAyODU1MWZmM2YwMWQuLjQ3Y2IzZjZlYWE2YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA5LTAyICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBV
bmV4cGVjdGVkIFVzZXItQWdlbnQgb24gcmVkaXJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTg1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIHRvIGNoZWNrIHRoZSB1c2Vy
IGFnZW50IGlzIHNlbnQgaW4gaGVhZGVycyBhbmQgcHJlc2VydmVkIGFmdGVyIGEgcmVkaXJlY3Qg
Zm9yIGJvdGggbWFpbiByZXNvdXJjZQorICAgICAgICBhbmQgc3VicmVzb3VyY2VzLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwOgor
ICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAodGVzdERvd25sb2FkVXNlckFnZW50
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAodGVzdFVzZXJBZ2VudCk6
CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorCiAyMDIw
LTA4LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
d2Via2l0Y29yZXB5XSBSZWdpc3RlciBhbm90aGVyIHBhY2thZ2UgaW4gdGhlIFdlYktpdCByZXBv
c2l0b3J5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdERvd25sb2Fkcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdERvd25sb2Fkcy5jcHAKaW5kZXggYTIxNzI5YmQyZDA1Li42NDBkNWNiNjNhMzggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0RG93bmxvYWRz
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdERvd25s
b2Fkcy5jcHAKQEAgLTM3OSw2ICszNzksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2Nh
bEZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIAogc3Rh
dGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CiBzdGF0aWMgY29uc3QgY2hhcioga1NlcnZl
clN1Z2dlc3RlZEZpbGVuYW1lID0gIndlYmtpdC1kb3dubG9hZGVkLWZpbGUiOworc3RhdGljIEhh
c2hNYXA8Q1N0cmluZywgQ1N0cmluZz4gc191c2VyQWdlbnRNYXA7CiAKIHN0YXRpYyB2b2lkIGFk
ZENvbnRlbnREaXNwb3NpdGlvbkhUVFBIZWFkZXJUb1Jlc3BvbnNlKFNvdXBNZXNzYWdlKiBtZXNz
YWdlKQogewpAQCAtNDA4LDYgKzQwOSw5IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNv
dXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAKICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CiAKKyAg
ICBpZiAoZ19zdHJfaGFzX3ByZWZpeChwYXRoLCAiL3VhLSIpKQorICAgICAgICBzX3VzZXJBZ2Vu
dE1hcC5hZGQocGF0aCwgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1
ZXN0X2hlYWRlcnMsICJVc2VyLUFnZW50IikpOworCiAgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvY2FuY2VsLWFmdGVyLWRlc3RpbmF0aW9uIikpIHsKICAgICAgICAgLy8gVXNlIGFuIGluZmlu
aXRlIG1lc3NhZ2UgdG8gbWFrZSBzdXJlIGl0J3MgY2FuY2VsbGVkIGJlZm9yZSBpdCBmaW5pc2hl
cy4KICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1lc3NhZ2UtPnJl
c3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7CkBAIC00MTcsNyArNDIxLDEz
IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91bmtub3duIikpCisgICAgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvdWEtdGVzdC1yZWRpcmVjdCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJM
b2NhdGlvbiIsICIvdWEtdGVzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvdW5rbm93biIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdWEt
dGVzdCIpKQogICAgICAgICBwYXRoID0gIi90ZXN0LnBkZiI7CiAKICAgICBHVW5pcXVlUHRyPGNo
YXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0
YSgpLCBwYXRoLCBudWxscHRyKSk7CkBAIC03MjEsNiArNzMxLDQzIEBAIHN0YXRpYyB2b2lkIHRl
c3REb3dubG9hZE1JTUVUeXBlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAg
ICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgZXhw
ZWN0ZWRGaWxlbmFtZS5nZXQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFVzZXJB
Z2VudChEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc191c2VyQWdl
bnRNYXAuY2xlYXIoKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHRl
c3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3VhLXRlc3QiKSk7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9
IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZShXRUJLSVRfSVNfVVJJX1JFUVVFU1QocmVxdWVzdCkpOworICAgIEFTU0VSVF9DTVBf
Q1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi91YS10ZXN0IikpOworCisgICAgY29uc3QgY2hhciogdXNlckFnZW50
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0
dHBfaGVhZGVycyhyZXF1ZXN0KSwgIlVzZXItQWdlbnQiKTsKKyAgICBnX2Fzc2VydF9ub25udWxs
KHVzZXJBZ2VudCk7CisgICAgZ19hc3NlcnRfY21wdWludChzX3VzZXJBZ2VudE1hcC5zaXplKCks
ID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKHNfdXNlckFnZW50TWFwLmNvbnRhaW5zKCIvdWEt
dGVzdCIpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9PSwgc191c2VyQWdl
bnRNYXAuZ2V0KCIvdWEtdGVzdCIpKTsKKyAgICBzX3VzZXJBZ2VudE1hcC5jbGVhcigpOworCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBleHBlY3RlZEZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMu
cGRmIiwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5h
dGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGV4cGVjdGVkRmlsZW5hbWUuZ2V0KCkp
OworCisgICAgZG93bmxvYWQgPSB0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVz
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi91YS10ZXN0LXJlZGlyZWN0IikpOworICAgIGdfYXNz
ZXJ0X251bGwod2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwor
ICAgIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJlcXVlc3QpKTsKKyAg
ICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCks
ID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdWEtdGVzdC1yZWRpcmVjdCIpKTsKKworICAg
IHVzZXJBZ2VudCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUod2Via2l0X3VyaV9yZXF1
ZXN0X2dldF9odHRwX2hlYWRlcnMocmVxdWVzdCksICJVc2VyLUFnZW50Iik7CisgICAgZ19hc3Nl
cnRfbm9ubnVsbCh1c2VyQWdlbnQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoc191c2VyQWdlbnRN
YXAuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250
YWlucygiL3VhLXRlc3QtcmVkaXJlY3QiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHVzZXJB
Z2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3VhLXRlc3QtcmVkaXJlY3QiKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLXRlc3QiKSk7CisgICAg
QVNTRVJUX0NNUF9DU1RSSU5HKHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3Vh
LXRlc3QiKSk7CisgICAgc191c2VyQWdlbnRNYXAuY2xlYXIoKTsKKworICAgIHRlc3QtPmNoZWNr
RGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBleHBlY3RlZEZpbGVuYW1l
LmdldCgpKTsKK30KKwogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIHRlc3RDb250ZXh0
TWVudURvd25sb2FkQWN0aW9ucyhXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogewpAQCAtODA1LDYgKzg1Miw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBQb2xpY3lS
ZXNwb25zZURvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicG9saWN5LWRlY2lzaW9uLWRv
d25sb2FkIiwgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQpOwogICAgIFBvbGljeVJlc3BvbnNl
RG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJwb2xpY3ktZGVjaXNpb24tZG93bmxvYWQt
Y2FuY2VsIiwgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWRDYW5jZWwpOwogICAgIERvd25sb2Fk
VGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibWltZS10eXBlIiwgdGVzdERvd25sb2FkTUlNRVR5cGUp
OworICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAidXNlci1hZ2VudCIsIHRlc3RE
b3dubG9hZFVzZXJBZ2VudCk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBrZXlTdHJva2UgaW4g
V1BFLgogI2lmIFBMQVRGT1JNKEdUSykKICNpZiAhVVNFKEdUSzQpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdExvYWRlckNsaWVudC5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdExvYWRlckNsaWVudC5jcHAK
aW5kZXggODc3YjI1ZTEzZmVjLi45Yjk4ZmU0MDgxMTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0TG9hZGVyQ2xpZW50LmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdExvYWRlckNsaWVudC5jcHAKQEAg
LTY5Myw2ICs2OTMsNTAgQEAgc3RhdGljIHZvaWQgdGVzdFJlZGlyZWN0VG9EYXRhVVJJKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGludChzdHJuY21w
KG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkRGF0YSwgbWFpblJlc291cmNlRGF0YVNpemUpLCA9
PSwgMCk7CiB9CiAKK3N0YXRpYyBIYXNoTWFwPENTdHJpbmcsIENTdHJpbmc+IHNfdXNlckFnZW50
TWFwOworCitzdGF0aWMgdm9pZCB0ZXN0VXNlckFnZW50KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5n
c19nZXRfdXNlcl9hZ2VudCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
VmlldykpOworCisgICAgc191c2VyQWdlbnRNYXAuY2xlYXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi91YS1tYWluIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHNfdXNlckFnZW50
TWFwLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2VyQWdlbnRNYXAuY29u
dGFpbnMoIi91YS1tYWluIikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1c2VyQWdlbnQsID09
LCBzX3VzZXJBZ2VudE1hcC5nZXQoIi91YS1tYWluIikpOworICAgIHNfdXNlckFnZW50TWFwLmNs
ZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi91YS1t
YWluLXJlZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHNfdXNlckFnZW50TWFwLnNpemUoKSwgPT0sIDIpOwor
ICAgIGdfYXNzZXJ0X3RydWUoc191c2VyQWdlbnRNYXAuY29udGFpbnMoIi91YS1tYWluLXJlZGly
ZWN0IikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1c2VyQWdlbnQsID09LCBzX3VzZXJBZ2Vu
dE1hcC5nZXQoIi91YS1tYWluLXJlZGlyZWN0IikpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2Vy
QWdlbnRNYXAuY29udGFpbnMoIi91YS1tYWluIikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1
c2VyQWdlbnQsID09LCBzX3VzZXJBZ2VudE1hcC5nZXQoIi91YS1tYWluIikpOworICAgIHNfdXNl
ckFnZW50TWFwLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi91YS1jc3MiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoc191c2VyQWdlbnRNYXAuc2l6ZSgpLCA9PSwgMik7
CisgICAgZ19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLWNzcyIpKTsK
KyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9PSwgc191c2VyQWdlbnRNYXAuZ2V0
KCIvdWEtY3NzIikpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2VyQWdlbnRNYXAuY29udGFpbnMo
Ii91YS1zdHlsZS5jc3MiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHVzZXJBZ2VudCwgPT0s
IHNfdXNlckFnZW50TWFwLmdldCgiL3VhLXN0eWxlLmNzcyIpKTsKKyAgICBzX3VzZXJBZ2VudE1h
cC5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
dWEtcmVkaXJlY3RlZC1jc3MiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoc191c2VyQWdlbnRNYXAuc2l6ZSgpLCA9PSwg
Myk7CisgICAgZ19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLXJlZGly
ZWN0ZWQtY3NzIikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1c2VyQWdlbnQsID09LCBzX3Vz
ZXJBZ2VudE1hcC5nZXQoIi91YS1yZWRpcmVjdGVkLWNzcyIpKTsKKyAgICBnX2Fzc2VydF90cnVl
KHNfdXNlckFnZW50TWFwLmNvbnRhaW5zKCIvdWEtcmVkaXJlY3RlZC1zdHlsZS5jc3MiKSk7Cisg
ICAgQVNTRVJUX0NNUF9DU1RSSU5HKHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgi
L3VhLXJlZGlyZWN0ZWQtc3R5bGUuY3NzIikpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2VyQWdl
bnRNYXAuY29udGFpbnMoIi91YS1zdHlsZS5jc3MiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5H
KHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3VhLXN0eWxlLmNzcyIpKTsKKyAg
ICBzX3VzZXJBZ2VudE1hcC5jbGVhcigpOworfQorCiBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFj
ayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCkBAIC03MTEs
NiArNzU1LDkgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKIAogICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKIAorICAgIGlmIChnX3N0cl9oYXNf
cHJlZml4KHBhdGgsICIvdWEtIikpCisgICAgICAgIHNfdXNlckFnZW50TWFwLmFkZChwYXRoLCBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIlVz
ZXItQWdlbnQiKSk7CisKICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChwYXRoLCAiL25vcm1hbCIp
IHx8IGdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi9odHRwLWdldC1tZXRob2QiKSkKICAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOwogICAg
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZXJyb3IiKSkKQEAgLTc1NCw2ICs4MDEsMjMg
QEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICAgICAgICAgICI8L3NjcmlwdD4iCiAgICAg
ICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCB1bmZpbmlzaGVk
U3VicmVzb3VyY2VMb2FkUmVzcG9uc2VTdHJpbmcsIHN0cmxlbih1bmZpbmlzaGVkU3VicmVzb3Vy
Y2VMb2FkUmVzcG9uc2VTdHJpbmcpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvdWEtbWFpbiIpKQorICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVu
KHJlc3BvbnNlU3RyaW5nKSk7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91YS1t
YWluLXJlZGlyZWN0IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvdWEtbWFpbiIpOworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJN
QU5FTlRMWSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3VhLXN0eWxlLmNz
cyIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdHlsZSA9ICJib2R5IHsgbWFyZ2lu
OiAwcHg7IHBhZGRpbmc6IDBweDsgfSI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHN0eWxlLCBzdHJs
ZW4oc3R5bGUpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdWEtcmVkaXJl
Y3RlZC1zdHlsZS5jc3MiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi91YS1zdHlsZS5jc3MiKTsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9W
RURfUEVSTUFORU5UTFkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91YS1j
c3MiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY3NzSHRtbCA9ICI8aHRtbD48aGVh
ZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy91YS1zdHlsZS5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGNzc0h0bWws
IHN0cmxlbihjc3NIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Vh
LXJlZGlyZWN0ZWQtY3NzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlZGlyZWN0
ZWRDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3Vh
LXJlZGlyZWN0ZWQtc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRt
bD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3RybGVuKHJlZGly
ZWN0ZWRDU1NIdG1sKSk7CiAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3N0YWxs
IikpIHsKICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGlzIG5ldmVyIHVucGF1c2VkIGFuZCBzdGFs
bHMgZm9yZXZlci4KICAgICAgICAgc291cF9zZXJ2ZXJfcGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1l
c3NhZ2UpOwpAQCAtNzk2LDYgKzg2MCw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRVUklSZXF1ZXN0IiwgImh0dHAtbWV0aG9kIiwgdGVzdFVSSVJlcXVl
c3RIVFRQTWV0aG9kKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRVUklSZXNwb25zZSIs
ICJodHRwLWhlYWRlcnMiLCB0ZXN0VVJJUmVzcG9uc2VIVFRQSGVhZGVycyk7CiAgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViUGFnZSIsICJyZWRpcmVjdC10by1kYXRhLXVyaSIsIHRlc3RS
ZWRpcmVjdFRvRGF0YVVSSSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJ1c2VyLWFnZW50IiwgdGVzdFVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407757</attachid>
            <date>2020-09-02 05:12:08 -0700</date>
            <delta_ts>2020-09-02 07:04:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ua-redirect.diff</filename>
            <type>text/plain</type>
            <size>22078</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNjA1M2E2NWJlMjgwLi42NTdmNjAwYjJlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjAtMDktMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVuZXhwZWN0ZWQgVXNlci1BZ2VudCBvbiByZWRpcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYXIg
dGhlIHVzZXIgYWdlbnQgb24gbmV3IHJlcXVlc3QgYWZ0ZXIgYSByZWRpcmVjdCB0byBlbnN1cmUg
YSBuZXcgb25lIGlzIGNvbXB1dGVkIHRha2luZyBpbnRvIGFjY291bnQgdGhlCisgICAgICAgIHF1
aXJrcyBpZiBuZWVkZWQuIEFsc28gZW5zdXJlIHF1aXJrcyBhcmUgYXBwbGllZCBmb3IgZG93bmxv
YWRzIHN0YXJ0ZWQgaW4gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbik6IENsZWFyIHRoZSB1c2VyIGFn
ZW50IG9uIG5ldyByZXF1ZXN0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRE
b3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBB
ZGQgdXNlckFnZW50Rm9yVVJMKCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKTogVXNlIHVz
ZXJBZ2VudEZvclVSTCgpIGluc3RlYWQgb2YgdXNlckFnZW50KCkuCisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnVzZXJBZ2VudEZvclVSTCk6IEltcGxlbWVudCBpdCB0byBhcHBseSBxdWlya3MgaWYgbmVl
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IEp1c3QgcmV0dXJuIHRo
ZSB3ZWIgcGFnZSB1c2VyIGFnZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVS
TCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9XZWJQYWdlUHJveHlQ
bGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXNlckFnZW50
Rm9yVVJMKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTCk6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwpOiBEaXR0by4KKwogMjAy
MC0wOS0wMSAgSGVjdG9yIExvcGV6ICA8aGVjdG9yX2lfbG9wZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjY2NDA4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCmluZGV4
IGRhZWVjZTJlOTRhNi4uYmFhNjc4MzJiNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC02NzEs
NiArNjcxLDEwIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJl
Y3Rpb24oKQogICAgICAgICByZWRpcmVjdGVkVVJMLnNldEZyYWdtZW50SWRlbnRpZmllcihyZXF1
ZXN0LnVybCgpLmZyYWdtZW50SWRlbnRpZmllcigpKTsKICAgICByZXF1ZXN0LnNldFVSTChyZWRp
cmVjdGVkVVJMKTsKIAorICAgIC8vIENsZWFyIHRoZSB1c2VyIGFnZW50IHRvIGVuc3VyZSBhIG5l
dyBvbmUgaXMgY29tcHV0ZWQuCisgICAgYXV0byB1c2VyQWdlbnQgPSByZXF1ZXN0Lmh0dHBVc2Vy
QWdlbnQoKTsKKyAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworCiAgICAgLy8gU2hv
dWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3Vy
Y2UgdG8gbm9uLXNlY3VyZSBvbmUuCiAgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYm
IHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCiAgICAgICAgIHJl
cXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKQEAgLTcyMyw3ICs3MjcsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKICAgICBjbGVhclJlcXVl
c3QoKTsKIAogICAgIGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2Up
OwotICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3Bv
bnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgaXNDcm9zc09yaWdpbiwgd2FzQmxvY2tpbmdDb29raWVzXShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QpIHsKKyAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJl
Y3Rpb24oV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUocmVxdWVzdCksIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlzQ3Jvc3NPcmlnaW4sIHdhc0Jsb2NraW5nQ29va2ll
cywgdXNlckFnZW50ID0gV1RGTW92ZSh1c2VyQWdlbnQpXShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QpIHsKICAgICAgICAgaWYgKG5ld1JlcXVlc3QuaXNOdWxsKCkgfHwgbV9zdGF0
ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC03MzUsNiAr
NzM5LDkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlv
bigpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1Jl
cXVlc3QocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICghcmVxdWVzdC5oYXNIVFRQSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KHVzZXJBZ2VudCk7CiAgICAgICAgIH0KICAgICAgICAgY3JlYXRl
UmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCB3YXNCbG9ja2luZ0Nvb2tpZXMpOwogICAgICAgICBp
ZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2Fk
Q2xpZW50LmNwcAppbmRleCA0YjIyNmZkNTQwMjguLmU4ZTg3MDIyMGQwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0RG93bmxvYWRDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdERvd25sb2FkQ2xp
ZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBA
IC00Nyw2ICs0OCwxNyBAQCBwcml2YXRlOgogICAgICAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxv
YWRTdGFydGVkKG1fd2ViQ29udGV4dCwgZG93bmxvYWQuZ2V0KCkpOwogICAgIH0KIAorICAgIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHksIFJlc291cmNl
UmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmICghcmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OlVzZXJBZ2VudCkpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0RG93bmxv
YWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoJmRvd25s
b2FkUHJveHkpOworICAgICAgICAgICAgYXV0byogd2ViVmlldyA9IHdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpOworICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
VXNlckFnZW50KHdlYlZpZXcgPyB3ZWJraXRXZWJWaWV3R2V0UGFnZSh3ZWJWaWV3KS51c2VyQWdl
bnRGb3JVUkwocmVxdWVzdC51cmwoKSkgOiBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50
KCkpOworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXF1
ZXN0KSk7CisgICAgfQorCiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBH
UmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNy
ZWF0ZURvd25sb2FkKCZkb3dubG9hZFByb3h5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKaW5kZXggZjNkM2NiMmIyNDNhLi40NjA2YmNlYWE2MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC05NzUsNiArOTc1LDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFN0cmluZyYgdG9vbFRpcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9vbFRpcDsgfQogCiAg
ICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJBZ2VudDsg
fQorICAgIFN0cmluZyB1c2VyQWdlbnRGb3JVUkwoY29uc3QgVVJMJik7CiAgICAgdm9pZCBzZXRB
cHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxp
Y2F0aW9uTmFtZUZvclVzZXJBZ2VudDsgfQogICAgIHZvaWQgc2V0QXBwbGljYXRpb25OYW1lRm9y
RGVza3RvcFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSkgeyBtX2FwcGxp
Y2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQgPSBhcHBsaWNhdGlvbk5hbWU7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBhM2JjZDRkMjg4NTYu
LmYzZTYwMWJlMDRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcApAQCAtMTQyNiw3ICsxNDI2LDcgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGFnZVByb3gKICAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQ
YWdlVVJMKTsKICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVn
aXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsK
ICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKKyAgICAgICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2Vy
QWdlbnRGb3JVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOwogICAgICAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IGI2ZmY2MWQyZTg3
Ni4uZjBhYWVjMTZmOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2Vi
UGFnZVByb3h5R3RrLmNwcApAQCAtNTIsNiArNTIsMTUgQEAgR3RrV2lkZ2V0KiBXZWJQYWdlUHJv
eHk6OnZpZXdXaWRnZXQoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+
KHBhZ2VDbGllbnQoKSkudmlld1dpZGdldCgpOwogfQogCitTdHJpbmcgV2ViUGFnZVByb3h5Ojp1
c2VyQWdlbnRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051bGwoKSB8
fCAhcHJlZmVyZW5jZXMoKS5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKQorICAgICAgICByZXR1
cm4gdGhpcy0+dXNlckFnZW50KCk7CisKKyAgICBhdXRvIHVzZXJBZ2VudCA9IFdlYkNvcmU6OnN0
YW5kYXJkVXNlckFnZW50Rm9yVVJMKHVybCk7CisgICAgcmV0dXJuIHVzZXJBZ2VudC5pc051bGwo
KSA/IHRoaXMtPnVzZXJBZ2VudCgpIDogdXNlckFnZW50OworfQorCiBTdHJpbmcgV2ViUGFnZVBy
b3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZUZvclVz
ZXJBZ2VudCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnQoYXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDM3ZjVjYWIzYmI2OS4uOTUzYmM2ZTE5MjA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTkw
LDYgKzkwLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewog
fQogCitTdHJpbmcgV2ViUGFnZVByb3h5Ojp1c2VyQWdlbnRGb3JVUkwoY29uc3QgVVJMJikKK3sK
KyAgICByZXR1cm4gdXNlckFnZW50KCk7Cit9CisKIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5k
YXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQog
ewogICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IGMyNDdhZDNhNDJjZS4uOGY1YTg4OGFhZmY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTEy
OSw2ICsxMjksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAg
ICAgc2V0U2hvdWxkVXNlSW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbChjbGllbnRFeHBlY3RzTGVn
YWN5SW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbCk7CiB9CiAKK1N0cmluZyBXZWJQYWdlUHJveHk6
OnVzZXJBZ2VudEZvclVSTChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdlbnQoKTsK
K30KKwogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIHN0YW5kYXJkVXNl
ckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vV2ViUGFnZVBy
b3h5UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24v
V2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwCmluZGV4IDU4ZjhmYjYwZmZmNi4uOGFlNjQzNDMx
NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9XZWJQ
YWdlUHJveHlQbGF5U3RhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxh
eXN0YXRpb24vV2ViUGFnZVByb3h5UGxheVN0YXRpb24uY3BwCkBAIC00Myw2ICs0MywxMSBAQCBz
dHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogV2ViUGFnZVByb3h5Ojp2aWV3QmFja2VuZCgpCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKK1N0cmluZyBXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVS
TChjb25zdCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdlbnQoKTsKK30KKwogU3RyaW5nIFdl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5h
bWVGb3JVc2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OnN0YW5kYXJkVXNlckFnZW50
KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCmluZGV4IDhiMjY3ZDc1NmZlMC4uMzFlMzkyN2E0
YmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2lu
LmNwcApAQCAtNDIsNiArNDIsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlh
bGl6ZSgpCiB7CiB9CiAKK1N0cmluZyBXZWJQYWdlUHJveHk6OnVzZXJBZ2VudEZvclVSTChjb25z
dCBVUkwmKQoreworICAgIHJldHVybiB1c2VyQWdlbnQoKTsKK30KKwogU3RyaW5nIFdlYlBhZ2VQ
cm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JV
c2VyQWdlbnQpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OnN0YW5kYXJkVXNlckFnZW50KGFwcGxp
Y2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dw
ZS9XZWJQYWdlUHJveHlXUEUuY3BwCmluZGV4IDhmNjQwZGJkODI1Ny4uMTFhMjNkYmNmZWU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93cGUvV2ViUGFnZVByb3h5V1BFLmNwcApA
QCAtNDksNiArNDksMTEgQEAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIFdlYlBhZ2VQcm94eTo6
dmlld0JhY2tlbmQoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBh
Z2VDbGllbnQoKSkudmlld0JhY2tlbmQoKTsKIH0KIAorU3RyaW5nIFdlYlBhZ2VQcm94eTo6dXNl
ckFnZW50Rm9yVVJMKGNvbnN0IFVSTCYpCit7CisgICAgcmV0dXJuIHVzZXJBZ2VudCgpOworfQor
CiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6c3RhbmRh
cmRVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNjk3NTZhYjFlNmUuLjNiNzNi
ZWMyZjEwZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA5LTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVbmV4cGVjdGVkIFVzZXItQWdlbnQg
b24gcmVkaXJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTg1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCB1bml0IHRlc3RzIHRvIGNoZWNrIHRoZSB1c2VyIGFnZW50IGlzIHNlbnQgaW4gaGVh
ZGVycyBhbmQgcHJlc2VydmVkIGFmdGVyIGEgcmVkaXJlY3QgZm9yIGJvdGggbWFpbiByZXNvdXJj
ZQorICAgICAgICBhbmQgc3VicmVzb3VyY2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwOgorICAgICAgICAoc2VydmVyQ2FsbGJh
Y2spOgorICAgICAgICAodGVzdERvd25sb2FkVXNlckFnZW50KToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RMb2FkZXJD
bGllbnQuY3BwOgorICAgICAgICAodGVzdFVzZXJBZ2VudCk6CisgICAgICAgIChzZXJ2ZXJDYWxs
YmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorCiAyMDIwLTA5LTAxICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0ZsYXRwYWsgU0RLXSBBZGFwdCBj
bGVhbi13ZWJraXQgc2NyaXB0IHRvIGZsYXRwYWsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0RG93bmxvYWRzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0RG93bmxvYWRzLmNwcAppbmRleCBhMjE3MjliZDJk
MDUuLjY0MGQ1Y2I2M2EzOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0RG93bmxvYWRzLmNwcApAQCAtMzc5LDYgKzM3OSw3IEBAIHN0YXRp
YyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIHN0
YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25s
b2FkZWQtZmlsZSI7CitzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBDU3RyaW5nPiBzX3VzZXJBZ2Vu
dE1hcDsKIAogc3RhdGljIHZvaWQgYWRkQ29udGVudERpc3Bvc2l0aW9uSFRUUEhlYWRlclRvUmVz
cG9uc2UoU291cE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CkBAIC00MDgsNiArNDA5LDkgQEAgc3RhdGlj
IHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhcioKIAogICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX09LKTsKIAorICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHBhdGgsICIvdWEt
IikpCisgICAgICAgIHNfdXNlckFnZW50TWFwLmFkZChwYXRoLCBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIlVzZXItQWdlbnQiKSk7CisKICAg
ICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9jYW5jZWwtYWZ0ZXItZGVzdGluYXRpb24iKSkgewog
ICAgICAgICAvLyBVc2UgYW4gaW5maW5pdGUgbWVzc2FnZSB0byBtYWtlIHN1cmUgaXQncyBjYW5j
ZWxsZWQgYmVmb3JlIGl0IGZpbmlzaGVzLgogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19z
ZXRfZW5jb2RpbmcobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVO
S0VEKTsKQEAgLTQxNyw3ICs0MjEsMTMgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Vua25vd24i
KSkKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91YS10ZXN0LXJlZGlyZWN0IikpIHsKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURf
UEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi91YS10ZXN0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91bmtub3duIikgfHwg
Z19zdHJfZXF1YWwocGF0aCwgIi91YS10ZXN0IikpCiAgICAgICAgIHBhdGggPSAiL3Rlc3QucGRm
IjsKIAogICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0
OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksIHBhdGgsIG51bGxwdHIpKTsKQEAgLTcyMSw2ICs3
MzEsNDMgQEAgc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTUlNRVR5cGUoRG93bmxvYWRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVG
aWxlKGRvd25sb2FkLmdldCgpLCBleHBlY3RlZEZpbGVuYW1lLmdldCgpKTsKIH0KIAorc3RhdGlj
IHZvaWQgdGVzdERvd25sb2FkVXNlckFnZW50KERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBzX3VzZXJBZ2VudE1hcC5jbGVhcigpOworICAgIEdSZWZQdHI8V2ViS2l0
RG93bmxvYWQ+IGRvd25sb2FkID0gdGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hl
cyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdWEtdGVzdCIpKTsKKyAgICBnX2Fzc2VydF9udWxs
KHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25s
b2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19VUklfUkVRVUVTVChyZXF1
ZXN0KSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3VhLXRlc3QiKSk7CisKKyAg
ICBjb25zdCBjaGFyKiB1c2VyQWdlbnQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJlcXVlc3QpLCAiVXNlci1BZ2VudCIp
OworICAgIGdfYXNzZXJ0X25vbm51bGwodXNlckFnZW50KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHNfdXNlckFnZW50TWFwLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2Vy
QWdlbnRNYXAuY29udGFpbnMoIi91YS10ZXN0IikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1
c2VyQWdlbnQsID09LCBzX3VzZXJBZ2VudE1hcC5nZXQoIi91YS10ZXN0IikpOworICAgIHNfdXNl
ckFnZW50TWFwLmNsZWFyKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGV4cGVjdGVkRmlsZW5h
bWUoZ19zdHJkdXBfcHJpbnRmKCIlcy5wZGYiLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpKTsK
KyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwg
ZXhwZWN0ZWRGaWxlbmFtZS5nZXQoKSk7CisKKyAgICBkb3dubG9hZCA9IHRlc3QtPmRvd25sb2Fk
VVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3VhLXRlc3Qt
cmVkaXJlY3QiKSk7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KGRvd25sb2FkLmdldCgpKSk7CisgICAgcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRf
cmVxdWVzdChkb3dubG9hZC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfVVJJ
X1JFUVVFU1QocmVxdWVzdCkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3Jl
cXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi91YS10
ZXN0LXJlZGlyZWN0IikpOworCisgICAgdXNlckFnZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X29uZSh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyhyZXF1ZXN0KSwgIlVz
ZXItQWdlbnQiKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKHVzZXJBZ2VudCk7CisgICAgZ19hc3Nl
cnRfY21wdWludChzX3VzZXJBZ2VudE1hcC5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF90
cnVlKHNfdXNlckFnZW50TWFwLmNvbnRhaW5zKCIvdWEtdGVzdC1yZWRpcmVjdCIpKTsKKyAgICBB
U1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9PSwgc191c2VyQWdlbnRNYXAuZ2V0KCIvdWEt
dGVzdC1yZWRpcmVjdCIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHNfdXNlckFnZW50TWFwLmNvbnRh
aW5zKCIvdWEtdGVzdCIpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9PSwg
c191c2VyQWdlbnRNYXAuZ2V0KCIvdWEtdGVzdCIpKTsKKyAgICBzX3VzZXJBZ2VudE1hcC5jbGVh
cigpOworCisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQu
Z2V0KCksIGV4cGVjdGVkRmlsZW5hbWUuZ2V0KCkpOworfQorCiAjaWYgUExBVEZPUk0oR1RLKQog
c3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RG93bmxvYWRBY3Rpb25zKFdlYlZpZXdEb3dubG9h
ZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CkBAIC04MDUsNiArODUyLDcgQEAgdm9pZCBi
ZWZvcmVBbGwoKQogICAgIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2Fk
cyIsICJwb2xpY3ktZGVjaXNpb24tZG93bmxvYWQiLCB0ZXN0UG9saWN5UmVzcG9uc2VEb3dubG9h
ZCk7CiAgICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInBv
bGljeS1kZWNpc2lvbi1kb3dubG9hZC1jYW5jZWwiLCB0ZXN0UG9saWN5UmVzcG9uc2VEb3dubG9h
ZENhbmNlbCk7CiAgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJtaW1lLXR5cGUi
LCB0ZXN0RG93bmxvYWRNSU1FVHlwZSk7CisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2Fk
cyIsICJ1c2VyLWFnZW50IiwgdGVzdERvd25sb2FkVXNlckFnZW50KTsKICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGtleVN0cm9rZSBpbiBXUEUuCiAjaWYgUExBVEZPUk0oR1RLKQogI2lmICFVU0Uo
R1RLNCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0TG9hZGVyQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0TG9hZGVyQ2xpZW50LmNwcAppbmRleCA4NzdiMjVlMTNmZWMuLjliOThmZTQwODExOSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RMb2Fk
ZXJDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0TG9hZGVyQ2xpZW50LmNwcApAQCAtNjkzLDYgKzY5Myw1MCBAQCBzdGF0aWMgdm9pZCB0ZXN0
UmVkaXJlY3RUb0RhdGFVUkkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAg
Z19hc3NlcnRfY21waW50KHN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZXhwZWN0ZWREYXRhLCBt
YWluUmVzb3VyY2VEYXRhU2l6ZSksID09LCAwKTsKIH0KIAorc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgQ1N0cmluZz4gc191c2VyQWdlbnRNYXA7CisKK3N0YXRpYyB2b2lkIHRlc3RVc2VyQWdlbnQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgY29uc3QgY2hhciogdXNl
ckFnZW50ID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBzX3VzZXJBZ2VudE1hcC5jbGVh
cigpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3VhLW1haW4i
KS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoc191c2VyQWdlbnRNYXAuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLW1haW4iKSk7CisgICAgQVNTRVJUX0NN
UF9DU1RSSU5HKHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3VhLW1haW4iKSk7
CisgICAgc191c2VyQWdlbnRNYXAuY2xlYXIoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3VhLW1haW4tcmVkaXJlY3QiKS5kYXRhKCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoc191c2VyQWdl
bnRNYXAuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5j
b250YWlucygiL3VhLW1haW4tcmVkaXJlY3QiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHVz
ZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3VhLW1haW4tcmVkaXJlY3QiKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLW1haW4iKSk7Cisg
ICAgQVNTRVJUX0NNUF9DU1RSSU5HKHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgi
L3VhLW1haW4iKSk7CisgICAgc191c2VyQWdlbnRNYXAuY2xlYXIoKTsKKworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3VhLWNzcyIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21wdWludChzX3VzZXJB
Z2VudE1hcC5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF90cnVlKHNfdXNlckFnZW50TWFw
LmNvbnRhaW5zKCIvdWEtY3NzIikpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh1c2VyQWdlbnQs
ID09LCBzX3VzZXJBZ2VudE1hcC5nZXQoIi91YS1jc3MiKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShz
X3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLXN0eWxlLmNzcyIpKTsKKyAgICBBU1NFUlRfQ01Q
X0NTVFJJTkcodXNlckFnZW50LCA9PSwgc191c2VyQWdlbnRNYXAuZ2V0KCIvdWEtc3R5bGUuY3Nz
IikpOworICAgIHNfdXNlckFnZW50TWFwLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi91YS1yZWRpcmVjdGVkLWNzcyIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21wdWludChzX3Vz
ZXJBZ2VudE1hcC5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKHNfdXNlckFnZW50
TWFwLmNvbnRhaW5zKCIvdWEtcmVkaXJlY3RlZC1jc3MiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RS
SU5HKHVzZXJBZ2VudCwgPT0sIHNfdXNlckFnZW50TWFwLmdldCgiL3VhLXJlZGlyZWN0ZWQtY3Nz
IikpOworICAgIGdfYXNzZXJ0X3RydWUoc191c2VyQWdlbnRNYXAuY29udGFpbnMoIi91YS1yZWRp
cmVjdGVkLXN0eWxlLmNzcyIpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9
PSwgc191c2VyQWdlbnRNYXAuZ2V0KCIvdWEtcmVkaXJlY3RlZC1zdHlsZS5jc3MiKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShzX3VzZXJBZ2VudE1hcC5jb250YWlucygiL3VhLXN0eWxlLmNzcyIpKTsK
KyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodXNlckFnZW50LCA9PSwgc191c2VyQWdlbnRNYXAuZ2V0
KCIvdWEtc3R5bGUuY3NzIikpOworICAgIHNfdXNlckFnZW50TWFwLmNsZWFyKCk7Cit9CisKIHN0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIGdwb2ludGVyKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9
ICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nISIKQEAgLTcxMSw2ICs3NTUsOSBAQCBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KgogCiAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwogCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi91YS0iKSkKKyAgICAgICAgc191
c2VyQWdlbnRNYXAuYWRkKHBhdGgsIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2Fn
ZS0+cmVxdWVzdF9oZWFkZXJzLCAiVXNlci1BZ2VudCIpKTsKKwogICAgIGlmIChnX3N0cl9oYXNf
cHJlZml4KHBhdGgsICIvbm9ybWFsIikgfHwgZ19zdHJfaGFzX3ByZWZpeChwYXRoLCAiL2h0dHAt
Z2V0LW1ldGhvZCIpKQogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVu
KHJlc3BvbnNlU3RyaW5nKSk7CiAgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9lcnJv
ciIpKQpAQCAtNzU0LDYgKzgwMSwyMyBAQCBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3Vw
U2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKgogICAgICAg
ICAgICAgIjwvc2NyaXB0PiIKICAgICAgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CiAgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHVuZmluaXNoZWRTdWJyZXNvdXJjZUxvYWRSZXNwb25zZVN0cmluZywgc3Ry
bGVuKHVuZmluaXNoZWRTdWJyZXNvdXJjZUxvYWRSZXNwb25zZVN0cmluZykpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi91YS1tYWluIikpCisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3VhLW1haW4tcmVkaXJlY3QiKSkgeworICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9u
IiwgIi91YS1tYWluIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvdWEtc3R5bGUuY3NzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHN0eWxlID0gImJvZHkgeyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyB9IjsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgc3R5bGUsIHN0cmxlbihzdHlsZSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi91YS1yZWRpcmVjdGVkLXN0eWxlLmNzcyIpKSB7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRp
b24iLCAiL3VhLXN0eWxlLmNzcyIpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3VhLWNzcyIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjc3NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3Vh
LXN0eWxlLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgY3NzSHRtbCwgc3RybGVuKGNzc0h0bWwpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvdWEtcmVkaXJlY3RlZC1jc3MiKSkgeworICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPScvdWEtcmVkaXJlY3RlZC1zdHlsZS5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0
ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKICAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvc3RhbGwiKSkgewogICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaXMg
bmV2ZXIgdW5wYXVzZWQgYW5kIHN0YWxscyBmb3JldmVyLgogICAgICAgICBzb3VwX3NlcnZlcl9w
YXVzZV9tZXNzYWdlKHNlcnZlciwgbWVzc2FnZSk7CkBAIC03OTYsNiArODYwLDcgQEAgdm9pZCBi
ZWZvcmVBbGwoKQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFVSSVJlcXVlc3QiLCAiaHR0
cC1tZXRob2QiLCB0ZXN0VVJJUmVxdWVzdEhUVFBNZXRob2QpOwogICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFVSSVJlc3BvbnNlIiwgImh0dHAtaGVhZGVycyIsIHRlc3RVUklSZXNwb25zZUhU
VFBIZWFkZXJzKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgInJlZGly
ZWN0LXRvLWRhdGEtdXJpIiwgdGVzdFJlZGlyZWN0VG9EYXRhVVJJKTsKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInVzZXItYWdlbnQiLCB0ZXN0VXNlckFnZW50KTsKIH0K
IAogdm9pZCBhZnRlckFsbCgpCg==
</data>
<flag name="review"
          id="423119"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>