<?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>191646</bug_id>
          
          <creation_ts>2018-11-14 12:34:55 -0800</creation_ts>
          <short_desc>[Curl] Add Server Trust Evaluation Support.</short_desc>
          <delta_ts>2019-04-01 10:41:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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=187679</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>187679</dependson>
    
    <dependson>191647</dependson>
    
    <dependson>191648</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>takashi.komori</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1478575</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-14 12:34:55 -0800</bug_when>
    <thetext>Add Server Trust Evaluation Support. Need to implement UI on MiniBrowser to ask user to trust the server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521622</commentid>
    <comment_count>1</comment_count>
      <attachid>366052</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-26 22:36:47 -0700</bug_when>
    <thetext>Created attachment 366052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521636</commentid>
    <comment_count>2</comment_count>
      <attachid>366052</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-03-27 00:22:49 -0700</bug_when>
    <thetext>Comment on attachment 366052
Patch

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

Just a couple of nitpicks from me.

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:327
&gt; +        m_acceptedServerTrustCert.insert(std::make_pair(host, pem));

If you use emplace() then you don&apos;t need make_pair. :)

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.h:77
&gt; +    std::map&lt;std::wstring, std::wstring&gt; m_acceptedServerTrustCert;

I think this can be unordered_map instead, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521642</commentid>
    <comment_count>3</comment_count>
      <attachid>366052</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-03-27 01:01:19 -0700</bug_when>
    <thetext>Comment on attachment 366052
Patch

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

&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:80
&gt; +    return ProtectionSpace(url.host().toString(), static_cast&lt;int&gt;(port ? *port : 0), serverType, String(), authenticationScheme, certificateInfo);

&quot;(port ? *port : 0)&quot; can be &quot;port.valueOr(0)&quot;. protectionSpaceFromHandle has the same code.

&gt; Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp:423
&gt; +void NetworkDataTaskCurl::restartWithCredential(const AuthenticationChallenge&amp; challenge, const Credential&amp; credential)

It seems that you don&apos;t need change the first argument.

&gt; Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp:433
&gt; +    if (!challenge.protectionSpace().certificateInfo().certificateChain().isEmpty())

Is this never be empty in case of ServerTrustEvaluation? 
if (challenge.protectionSpace().authenticationScheme() == ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested)
I feel this is somewhat better.

&gt; Tools/MiniBrowser/win/Common.cpp:288
&gt; +std::wstring replaceWString(std::wstring src, const std::wstring&amp; oldValue, const std::wstring&amp; newValue)

You can name this &apos;replaceString&apos;. If you will need a std::string version, you can overload replaceString(std::string, const std::string&amp;, const std::string&amp;).

&gt; Tools/MiniBrowser/win/Common.cpp:294
&gt; +    while ((pos = src.find(oldValue, pos)) != std::string::npos) {

Nit: std::string::npos should be std::wstring::npos or src.npos.

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:323
&gt; +    if (it != m_acceptedServerTrustCert.end() &amp;&amp; it-&gt;second == pem)

You check only the first matching. m_acceptedServerTrustCert can be std::set&lt;std::pair&lt;std::wstring,std::wstring&gt;&gt;.

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:334
&gt; +std::wstring WebKitBrowserWindow::createPEMString(WKProtectionSpaceRef protectionSpace)

This shouldn&apos;t be a WebKitBrowserWindow&apos;s method.

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:345
&gt; +        pems += std::wstring(reinterpret_cast&lt;const char*&gt;(data), reinterpret_cast&lt;const char*&gt;(data + size));

std::wstring(reinterpret_cast&lt;const char*&gt;(data), size)

&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.h:77
&gt; +    std::map&lt;std::wstring, std::wstring&gt; m_acceptedServerTrustCert;

should be plural if this is just a single cert.
m_acceptedServerTrustCerts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521649</commentid>
    <comment_count>4</comment_count>
      <attachid>366052</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-03-27 01:49:43 -0700</bug_when>
    <thetext>Comment on attachment 366052
Patch

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

&gt;&gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:323
&gt;&gt; +    if (it != m_acceptedServerTrustCert.end() &amp;&amp; it-&gt;second == pem)
&gt; 
&gt; You check only the first matching. m_acceptedServerTrustCert can be std::set&lt;std::pair&lt;std::wstring,std::wstring&gt;&gt;.

Err. I misunderstood. You store only the latest cert for hosts. It makes sense. Ignore my comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522014</commentid>
    <comment_count>5</comment_count>
      <attachid>366157</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-28 00:42:00 -0700</bug_when>
    <thetext>Created attachment 366157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522015</commentid>
    <comment_count>6</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-28 00:43:14 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #2)
Thanks for your comment!

&gt; &gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:327
&gt; &gt; +        m_acceptedServerTrustCert.insert(std::make_pair(host, pem));
&gt; 
&gt; If you use emplace() then you don&apos;t need make_pair. :)

Fixed.

&gt; &gt; Tools/MiniBrowser/win/WebKitBrowserWindow.h:77
&gt; &gt; +    std::map&lt;std::wstring, std::wstring&gt; m_acceptedServerTrustCert;
&gt; 
&gt; I think this can be unordered_map instead, right?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522016</commentid>
    <comment_count>7</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-28 00:48:27 -0700</bug_when>
    <thetext>Thank you for your review!

(In reply to Fujii Hironori from comment #3)
&gt; Comment on attachment 366052 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=366052&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:80
&gt; &gt; +    return ProtectionSpace(url.host().toString(), static_cast&lt;int&gt;(port ? *port : 0), serverType, String(), authenticationScheme, certificateInfo);
&gt; 
&gt; &quot;(port ? *port : 0)&quot; can be &quot;port.valueOr(0)&quot;. protectionSpaceFromHandle has
&gt; the same code.

Fixed.

&gt; &gt; Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp:423
&gt; &gt; +void NetworkDataTaskCurl::restartWithCredential(const AuthenticationChallenge&amp; challenge, const Credential&amp; credential)
&gt; 
&gt; It seems that you don&apos;t need change the first argument.

Reverted to former argument list.

&gt; &gt; Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp:433
&gt; &gt; +    if (!challenge.protectionSpace().certificateInfo().certificateChain().isEmpty())
&gt; 
&gt; Is this never be empty in case of ServerTrustEvaluation? 
&gt; if (challenge.protectionSpace().authenticationScheme() ==
&gt; ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested)
&gt; I feel this is somewhat better.

Fixed.

&gt; &gt; Tools/MiniBrowser/win/Common.cpp:288
&gt; &gt; +std::wstring replaceWString(std::wstring src, const std::wstring&amp; oldValue, const std::wstring&amp; newValue)
&gt; 
&gt; You can name this &apos;replaceString&apos;. If you will need a std::string version,
&gt; you can overload replaceString(std::string, const std::string&amp;, const
&gt; std::string&amp;).

Changed.
 
&gt; &gt; Tools/MiniBrowser/win/Common.cpp:294
&gt; &gt; +    while ((pos = src.find(oldValue, pos)) != std::string::npos) {
&gt; 
&gt; Nit: std::string::npos should be std::wstring::npos or src.npos.

Fixed.

&gt; &gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:334
&gt; &gt; +std::wstring WebKitBrowserWindow::createPEMString(WKProtectionSpaceRef protectionSpace)
&gt; 
&gt; This shouldn&apos;t be a WebKitBrowserWindow&apos;s method.

Moved to Common.cpp

&gt; &gt; Tools/MiniBrowser/win/WebKitBrowserWindow.cpp:345
&gt; &gt; +        pems += std::wstring(reinterpret_cast&lt;const char*&gt;(data), reinterpret_cast&lt;const char*&gt;(data + size));
&gt; 
&gt; std::wstring(reinterpret_cast&lt;const char*&gt;(data), size)

Fixed.
 
&gt; &gt; Tools/MiniBrowser/win/WebKitBrowserWindow.h:77
&gt; &gt; +    std::map&lt;std::wstring, std::wstring&gt; m_acceptedServerTrustCert;
&gt; 
&gt; should be plural if this is just a single cert.
&gt; m_acceptedServerTrustCerts

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522017</commentid>
    <comment_count>8</comment_count>
      <attachid>366157</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-03-28 01:15:03 -0700</bug_when>
    <thetext>Comment on attachment 366157
Patch

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

&gt; Tools/MiniBrowser/win/Common.h:31
&gt; +#include &lt;WebKit/WebKit2_C.h&gt;

AppleWin port doesn&apos;t enable WK2. You shouldn&apos;t put WK2-related code in Common.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522396</commentid>
    <comment_count>9</comment_count>
      <attachid>366258</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-29 00:37:27 -0700</bug_when>
    <thetext>Created attachment 366258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522397</commentid>
    <comment_count>10</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-03-29 00:38:30 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #8)
&gt; Comment on attachment 366157 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=366157&amp;action=review
&gt; 
&gt; &gt; Tools/MiniBrowser/win/Common.h:31
&gt; &gt; +#include &lt;WebKit/WebKit2_C.h&gt;
&gt; 
&gt; AppleWin port doesn&apos;t enable WK2. You shouldn&apos;t put WK2-related code in
&gt; Common.h.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522509</commentid>
    <comment_count>11</comment_count>
      <attachid>366258</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-29 11:35:09 -0700</bug_when>
    <thetext>Comment on attachment 366258
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522528</commentid>
    <comment_count>12</comment_count>
      <attachid>366258</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-29 12:03:22 -0700</bug_when>
    <thetext>Comment on attachment 366258
Patch

Clearing flags on attachment: 366258

Committed r243654: &lt;https://trac.webkit.org/changeset/243654&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522529</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-29 12:03:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522531</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-29 12:04:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/49429836&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366052</attachid>
            <date>2019-03-26 22:36:47 -0700</date>
            <delta_ts>2019-03-28 00:41:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191646-20190327143340.patch</filename>
            <type>text/plain</type>
            <size>30903</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcyMzg4ZTMxZmYwNzQ3
OWFkNWIwNjg1NDQ2MWJiM2ViNDk2NTU0Zi4uYjdhODRmZjI5MzQzOGViY2YzODgxM2UyOTU4YzNm
NWMwZWQ4ZTZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTI2ICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBB
ZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3NzbC9pZnJhbWUt
dXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NzbC9taXhlZENv
bnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMv
c3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3Bh
Y2VGb3JQYXNzd29yZEJhc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGb3JTZXJ2ZXJUcnVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVz
dDo6ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbik6CisKIDIwMTktMDMtMjYgIEFudG9pbmUg
UXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW91c2Vtb3ZlRXZl
bnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdCBpbnRlcm5hbCBzZXR0aW5nIGFuZCBxdWlyawpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCAzOTgwM2JlYzAyNGMyNTA3ZGYwZTU1NjhlM2ZiM2YyMDhkZDg4M2RiLi40MzYxN2Zk
MGExYjQ3OWExZWY4MWFiZTgxOGIyZWNjNzExODIxNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDE5LTAzLTI2ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29t
PgorCisgICAgICAgIFtDdXJsXSBBZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBo
dHRwL3Rlc3RzL3NzbC9pZnJhbWUtdXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAgICBo
dHRwL3Rlc3RzL3NzbC9taXhlZENvbnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAgICAg
ICAgICAgICAgIGh0dHAvdGVzdHMvc3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRGYWlsV2l0aEVycm9yKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6dHJ5SHR0cEF1dGhlbnRpY2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6dHJ5UHJveHlBdXRo
ZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OnRyeVNl
cnZlclRydXN0RXZhbHVhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1
cmw6OnJlc3RhcnRXaXRoQ3JlZGVudGlhbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3Vy
bC9OZXR3b3JrRGF0YVRhc2tDdXJsLmg6CisKIDIwMTktMDMtMjYgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW91c2Vtb3ZlRXZlbnRIYW5kbGlu
Z1ByZXZlbnRzRGVmYXVsdCBpbnRlcm5hbCBzZXR0aW5nIGFuZCBxdWlyawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaAppbmRleCAwYzFjMDMxY2E4Yzk0MWJjOTRkNDJmYjM1NzIzNzRiNmRmODc2
ZTA3Li5jNjBmMWI0MGUyYjEzNDIxMTEyZjU4MGZhMDNkNTEwY2FmNGNkOGI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaApAQCAtNDUsMTEgKzQ1LDE0IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBDdXJsUmVzcG9uc2UmLCB1bnNpZ25l
ZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiA9IG51bGxw
dHIpOworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFVSTCYsIGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYsIGNvbnN0IFJlc291cmNlRXJyb3ImLCBBdXRoZW50aWNhdGlvbkNsaWVudCog
PSBudWxscHRyKTsKKwogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBhdXRoZW50aWNhdGlvbkNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKICAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHByb3RlY3Rpb25TcGFjZVNl
cnZlclR5cGVGcm9tVVJJKGNvbnN0IFVSTCYsIGJvb2wgaXNGb3JQcm94eSk7Ci0gICAgUHJvdGVj
dGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUoY29uc3QgQ3VybFJlc3BvbnNlJiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9u
U3BhY2VGb3JQYXNzd29yZEJhc2VkKGNvbnN0IEN1cmxSZXNwb25zZSYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKKyAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlRm9yU2VydmVy
VHJ1c3QoY29uc3QgVVJMJiwgY29uc3QgQ2VydGlmaWNhdGVJbmZvJik7CiAgICAgT3B0aW9uYWw8
dWludDE2X3Q+IGRldGVybWluZVByb3h5UG9ydChjb25zdCBVUkwmKTsKICAgICBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21DdXJsQXV0
aChsb25nKTsKICAgICBTdHJpbmcgcGFyc2VSZWFsbShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwCmluZGV4IDJmZGNjZGIzZDU3
OGVmMjU0YjEwYTdlOGIwZWMyODE3NGE4Y2EzZTkuLmIzYzNjOWRmNjY1MjJhMmM4NGE3YjU1YWE2
MDBkYWNiY2IyYmZkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3Bw
CkBAIC0zNSw3ICszNSwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQ3VybFJlc3BvbnNlJiBj
dXJsUmVzcG9uc2UsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVyZUNvdW50LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgQXV0aGVudGljYXRpb25DbGllbnQqIGNsaWVudCkKLSAgICA6
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZShwcm90ZWN0aW9uU3BhY2VGcm9tSGFuZGxlKGN1
cmxSZXNwb25zZSwgcmVzcG9uc2UpLCBDcmVkZW50aWFsKCksIHByZXZpb3VzRmFpbHVyZUNvdW50
LCByZXNwb25zZSwgUmVzb3VyY2VFcnJvcigpKQorICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VCYXNlKHByb3RlY3Rpb25TcGFjZUZvclBhc3N3b3JkQmFzZWQoY3VybFJlc3BvbnNlLCByZXNw
b25zZSksIENyZWRlbnRpYWwoKSwgcHJldmlvdXNGYWlsdXJlQ291bnQsIHJlc3BvbnNlLCBSZXNv
dXJjZUVycm9yKCkpCisgICAgLCBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50KGNsaWVudCkKK3sKK30K
KworQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgY29uc3Qg
UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvciwgQXV0aGVudGljYXRpb25DbGllbnQqIGNsaWVu
dCkKKyAgICA6IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZShwcm90ZWN0aW9uU3BhY2VGb3JT
ZXJ2ZXJUcnVzdCh1cmwsIGNlcnRpZmljYXRlSW5mbyksIENyZWRlbnRpYWwoKSwgMCwgUmVzb3Vy
Y2VSZXNwb25zZSgpLCByZXNvdXJjZUVycm9yKQogICAgICwgbV9hdXRoZW50aWNhdGlvbkNsaWVu
dChjbGllbnQpCiB7CiB9CkBAIC01MSw3ICs1Nyw3IEBAIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5
cGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9t
CiAgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFAgOiBQcm90
ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwogfQogCi1Qcm90ZWN0aW9uU3BhY2UgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUoY29uc3QgQ3VybFJlc3BvbnNl
JiBjdXJsUmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorUHJvdGVj
dGlvblNwYWNlIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGb3JQYXNz
d29yZEJhc2VkKGNvbnN0IEN1cmxSZXNwb25zZSYgY3VybFJlc3BvbnNlLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAoIXJlc3BvbnNlLmlzVW5hdXRob3JpemVk
KCkgJiYgIXJlc3BvbnNlLmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkKCkpCiAgICAgICAg
IHJldHVybiBQcm90ZWN0aW9uU3BhY2UoKTsKQEAgLTY1LDYgKzcxLDE1IEBAIFByb3RlY3Rpb25T
cGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZShj
b25zdCBDdXJsUmVzCiAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZSh1cmwuaG9zdCgpLnRvU3Ry
aW5nKCksIHN0YXRpY19jYXN0PGludD4ocG9ydCA/ICpwb3J0IDogMCksIHNlcnZlclR5cGUsIHBh
cnNlUmVhbG0ocmVzcG9uc2UpLCBhdXRoZW50aWNhdGlvblNjaGVtZSk7CiB9CiAKK1Byb3RlY3Rp
b25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRm9yU2VydmVy
VHJ1c3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQoreworICAgIGF1dG8gcG9ydCA9IGRldGVybWluZVByb3h5UG9ydCh1cmwpOworICAgIGF1
dG8gc2VydmVyVHlwZSA9IHByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKHVybCwgZmFs
c2UpOworICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZDsKKworICAgIHJl
dHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBzdGF0aWNfY2FzdDxp
bnQ+KHBvcnQgPyAqcG9ydCA6IDApLCBzZXJ2ZXJUeXBlLCBTdHJpbmcoKSwgYXV0aGVudGljYXRp
b25TY2hlbWUsIGNlcnRpZmljYXRlSW5mbyk7Cit9CisKIE9wdGlvbmFsPHVpbnQxNl90PiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTo6ZGV0ZXJtaW5lUHJveHlQb3J0KGNvbnN0IFVSTCYgdXJsKQog
ewogICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzb2Nrc1BvcnQgPSAxMDgwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKaW5k
ZXggYzVjNDUzNWU4N2ViMTc4OGI4NDg0YjQ3NGY1ZWQ3OWI2NDcyNWRlNS4uODI3YTJjM2FjY2Nk
M2RjNGJlYjBhOGE3NjBhNDUzMTQzZTk4OGJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0zMjQsNiArMzI0LDEy
IEBAIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlU1NMRm9ySG9zdChjb25zdCBTdHJpbmcmIGhvc3Qp
CiAgICAgICAgIHNldENBQ2VydFBhdGgocGF0aC0+dXRmOCgpLmRhdGEoKSk7CiB9CiAKK3ZvaWQg
Q3VybEhhbmRsZTo6ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbigpCit7CisgICAgc2V0U3Ns
VmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsKKyAgICBzZXRTc2xW
ZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3Q6Okxvb3NlTmFtZUNoZWNrKTsKK30KKwog
Q1VSTGNvZGUgQ3VybEhhbmRsZTo6d2lsbFNldHVwU3NsQ3R4KHZvaWQqIHNzbEN0eCkKIHsKICAg
ICBpZiAoIXNzbEN0eCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0LmgKaW5kZXggYzc5ZGVjMWZhZGY3YTgzZDk1Y2UzNjhiZTY3MTM5YWVh
MDE1YTJjZi4uODBiODkxNThmMzlhNDNjYWNiNTc2OGRlOTI5YzdjYzdlMTJjZDM1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgK
QEAgLTI1Myw2ICsyNTMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEh0dHBBdXRoVXNlclBh
c3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgbG9uZyBhdXRoVHlwZSA9IENVUkxBVVRI
X0FOWSk7CiAKKyAgICB2b2lkIGRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKTsKICAgICB2
b2lkIHNldENBQ2VydFBhdGgoY29uc3QgY2hhciopOwogICAgIHZvaWQgc2V0U3NsVmVyaWZ5UGVl
cihWZXJpZnlQZWVyKTsKICAgICB2b2lkIHNldFNzbFZlcmlmeUhvc3QoVmVyaWZ5SG9zdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVl
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0
LmNwcAppbmRleCBmZmUyMzMxM2U5YTljYjRjOWY2MDQ2MjNiMDU3NTZiMTM3ZjRmYzFhLi4zYWFm
ODkxMTgwYmFmMzBiMDg2NjJjYTcwMTIxZDFiNWU5MTcyMDYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKQEAgLTIxMyw2
ICsyMTMsOSBAQCBDVVJMKiBDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2ZlcigpCiAgICAgICAgIG1f
Y3VybEhhbmRsZS0+c2V0SHR0cEF1dGhVc2VyUGFzcyhtX3VzZXIsIG1fcGFzc3dvcmQsIG1fYXV0
aFR5cGUpOwogICAgIH0KIAorICAgIGlmIChtX3Nob3VsZERpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1
YXRpb24pCisgICAgICAgIG1fY3VybEhhbmRsZS0+ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlv
bigpOworCiAgICAgbV9jdXJsSGFuZGxlLT5zZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGRpZFJl
Y2VpdmVIZWFkZXJDYWxsYmFjaywgdGhpcyk7CiAgICAgbV9jdXJsSGFuZGxlLT5zZXRXcml0ZUNh
bGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgdGhpcyk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKaW5kZXgg
NTNhYTBiNTVmOGMwYzY5OGZhZWI0ZjFhZTNkZDY5YTFkNzMzMjQxMy4uOGFjNDhlOTRkODQxZjY3
NDM5ZGYzYzk5MzRlOGE0Zjc0NDNiM2Q0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJDdXJsTXVsdGlwYXJ0SGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ3VybFJlcXVlc3RT
Y2hlZHVsZXJDbGllbnQuaCIKICNpbmNsdWRlICJDdXJsUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJD
dXJsU1NMVmVyaWZpZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIKICNpbmNs
dWRlICJQcm90ZWN0aW9uU3BhY2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAg
LTc1LDYgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QXV0aGVudGljYXRpb25TY2hlbWUoUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNl
clBhc3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkaXNhYmxlU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKCkgeyBtX3Nob3VsZERpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24gPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRTdGFydFRpbWUoY29uc3QgTW9ub3RvbmljVGltZSYg
c3RhcnRUaW1lKSB7IG1fcmVxdWVzdFN0YXJ0VGltZSA9IHN0YXJ0VGltZTsgfQogCiAgICAgdm9p
ZCBzdGFydCgpOwpAQCAtMTczLDYgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXNl
cjsKICAgICBTdHJpbmcgbV9wYXNzd29yZDsKICAgICB1bnNpZ25lZCBsb25nIG1fYXV0aFR5cGUg
eyBDVVJMQVVUSF9BTlkgfTsKKyAgICBib29sIG1fc2hvdWxkRGlzYWJsZVNlcnZlclRydXN0RXZh
bHVhdGlvbiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFN1c3BlbmQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9lbmFibGVNdWx0aXBhcnQgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAK
aW5kZXggNzc1NWVmM2NmNWY4MWNiOGRlYTkzNzE3ZmUxYzY4Zjk0MzVhZGY1YS4uOTRlY2VhYmNl
MTQwMDcyNzQ5ODQ1YmJiOTc2NmQzZmI4YjU5MmRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmNwcApAQCAt
MTg5LDExICsxODksMTYgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkQ29tcGxl
dGUoQ3VybFJlcXVlc3QmIHJlcXVlc3QpCiAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVy
cm9yKHsgfSwgbV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkpOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRGYWlsV2l0aEVycm9yKEN1cmxSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrQ3VybDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCiB7CiAgICAgaWYgKHN0YXRlKCkgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCBzdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2Ns
aWVudCAmJiAhaXNEb3dubG9hZCgpKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHJlc291
cmNlRXJyb3IuaXNTU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3IoKSkgeworICAgICAgICB0cnlTZXJ2
ZXJUcnVzdEV2YWx1YXRpb24oQXV0aGVudGljYXRpb25DaGFsbGVuZ2UocmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKSwgcmVxdWVzdC5jZXJ0aWZpY2F0ZUluZm8oKSwgcmVzb3VyY2VFcnJv
cikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRl
V2l0aEVycm9yKHJlc291cmNlRXJyb3IpOwogfQogCkBAIC0zMjEsNyArMzI2LDcgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2tDdXJsOjp0cnlIdHRwQXV0aGVudGljYXRpb24oQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmJiBjaGFsbGUKIHsKICAgICBpZiAoIW1fdXNlci5pc051bGwoKSAmJiAhbV9wYXNz
d29yZC5pc051bGwoKSkgewogICAgICAgICBhdXRvIHBlcnNpc3RlbmNlID0gbV9zdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlID8g
V2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbiA6IFdlYkNvcmU6OkNyZWRl
bnRpYWxQZXJzaXN0ZW5jZU5vbmU7Ci0gICAgICAgIHJlc3RhcnRXaXRoQ3JlZGVudGlhbChjaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3N3b3JkLCBw
ZXJzaXN0ZW5jZSkpOworICAgICAgICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY2hhbGxlbmdlLCBD
cmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgcGVyc2lzdGVuY2UpKTsKICAgICAgICAgbV91
c2VyID0gU3RyaW5nKCk7CiAgICAgICAgIG1fcGFzc3dvcmQgPSBTdHJpbmcoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzQzLDcgKzM0OCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6dHJ5
SHR0cEF1dGhlbnRpY2F0aW9uKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFk
ZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRoaXMgZGlyZWN0b3J5LgogICAgICAgICAgICAgICAg
ICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdl
KCkuc2V0KG1fcGFydGl0aW9uLCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJlc3RhcnRXaXRoQ3JlZGVudGlhbChjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlKCksIGNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIHJlc3RhcnRXaXRoQ3Jl
ZGVudGlhbChjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzY1LDcgKzM3MCw3IEBAIHZvaWQgTmV0d29y
a0RhdGFUYXNrQ3VybDo6dHJ5SHR0cEF1dGhlbnRpY2F0aW9uKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYgY2hhbGxlCiAgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQobV9wYXJ0aXRpb24sIGNyZWRlbnRp
YWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25z
ZSgpLnVybCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdGFydFdpdGhDcmVk
ZW50aWFsKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY3JlZGVudGlhbCk7CisgICAgICAg
ICAgICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zOTAsNyArMzk1LDcgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2tDdXJsOjp0cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmcKICAgICAgICAgICAgIEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zZXRE
ZWZhdWx0UHJveHlBdXRoTWV0aG9kKCk7CiAKICAgICAgICAgICAgIGF1dG8gcmVxdWVzdENyZWRl
bnRpYWwgPSBtX2N1cmxSZXF1ZXN0ID8gQ3JlZGVudGlhbChtX2N1cmxSZXF1ZXN0LT51c2VyKCks
IG1fY3VybFJlcXVlc3QtPnBhc3N3b3JkKCksIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpIDog
Q3JlZGVudGlhbCgpOwotICAgICAgICAgICAgcmVzdGFydFdpdGhDcmVkZW50aWFsKGNoYWxsZW5n
ZS5wcm90ZWN0aW9uU3BhY2UoKSwgcmVxdWVzdENyZWRlbnRpYWwpOworICAgICAgICAgICAgcmVz
dGFydFdpdGhDcmVkZW50aWFsKGNoYWxsZW5nZSwgcmVxdWVzdENyZWRlbnRpYWwpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM5OCw3ICs0MDMsMjQgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2tDdXJsOjp0cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmcKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpy
ZXN0YXJ0V2l0aENyZWRlbnRpYWwoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3Bh
Y2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1
cmw6OnRyeVNlcnZlclRydXN0RXZhbHVhdGlvbihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNo
YWxsZW5nZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBjaGFsbGVuZ2VdKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlz
cG9zaXRpb24sIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIHsKKyAgICAgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvIHJlcXVlc3RDcmVkZW50aWFsID0gbV9j
dXJsUmVxdWVzdCA/IENyZWRlbnRpYWwobV9jdXJsUmVxdWVzdC0+dXNlcigpLCBtX2N1cmxSZXF1
ZXN0LT5wYXNzd29yZCgpLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSA6IENyZWRlbnRpYWwo
KTsKKyAgICAgICAgICAgIHJlc3RhcnRXaXRoQ3JlZGVudGlhbChjaGFsbGVuZ2UsIHJlcXVlc3RD
cmVkZW50aWFsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNh
bmNlbCgpOworICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoY2hhbGxlbmdl
LmVycm9yKCkpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OnJlc3Rh
cnRXaXRoQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewogICAgIEFTU0VSVChtX2N1cmxSZXF1
ZXN0KTsKIApAQCAtNDA2LDggKzQyOCwxMCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OnJl
c3RhcnRXaXRoQ3JlZGVudGlhbChjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3RpbwogICAg
IG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwogCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1
cmxSZXF1ZXN0KFdURk1vdmUocHJldmlvdXNSZXF1ZXN0KSwgUmVxdWVzdFN0YXR1czo6UmV1c2Vk
UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJv
dGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpOworICAgIG1fY3VybFJlcXVlc3Qt
PnNldEF1dGhlbnRpY2F0aW9uU2NoZW1lKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5hdXRo
ZW50aWNhdGlvblNjaGVtZSgpKTsKICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVk
ZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICBpZiAoIWNoYWxsZW5n
ZS5wcm90ZWN0aW9uU3BhY2UoKS5jZXJ0aWZpY2F0ZUluZm8oKS5jZXJ0aWZpY2F0ZUNoYWluKCku
aXNFbXB0eSgpKQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5kaXNhYmxlU2VydmVyVHJ1c3RFdmFs
dWF0aW9uKCk7CiAgICAgbV9jdXJsUmVxdWVzdC0+c2V0U3RhcnRUaW1lKG1fc3RhcnRUaW1lKTsK
ICAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuaAppbmRleCBhMzJmNjE2
OGNhNzQyNDZlNTY1MjI2MWYyMGY4NzhjYWE0NWIyY2FiLi4wNjVlZGJjOTM2MzllMmQ3M2ViYzlj
NjE5YWY4ODMxMjQ5ZTUyYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgKQEAgLTc2LDcgKzc2LDkgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdHJ5SHR0cEF1dGhlbnRpY2F0aW9uKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYpOwogICAgIHZvaWQgdHJ5UHJveHlBdXRoZW50aWNhdGlvbihXZWJD
b3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKLSAgICB2b2lkIHJlc3RhcnRXaXRoQ3Jl
ZGVudGlhbChjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik7CisgICAgdm9pZCByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7
CisKKyAgICB2b2lkIHRyeVNlcnZlclRydXN0RXZhbHVhdGlvbihXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYmKTsKIAogICAgIHZvaWQgYXBwZW5kQ29va2llSGVhZGVyKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgaGFuZGxlQ29va2llSGVhZGVycyhjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpDdXJsUmVzcG9uc2UmKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZjJk
YjhlY2RhMmRhNjk5ZTliNWIzNWVkMzE4OWQ1N2UyZDhjYmQ3Li4wNTdmYTJiYzY5ODM2YjFkNTcw
MTk3YjRlNjc4MDIzOGM0MjgwNWYxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMDMtMjYgIFRha2FzaGkgS29t
b3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBTZXJ2
ZXIgVHJ1c3QgRXZhbHVhdGlvbiBTdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNjQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgTWluaUJyb3dzZXIgVUkgZm9yIGFza2lu
ZyBpZiB1c2VyIHRydXN0cyB0aGUgc2VydmVyLgorCisgICAgICAgICogTWluaUJyb3dzZXIvd2lu
L0NvbW1vbi5jcHA6CisgICAgICAgIChhc2tTZXJ2ZXJUcnVzdEV2YWx1YXRpb24pOgorICAgICAg
ICAocmVwbGFjZVdTdHJpbmcpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uaDoK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJMaWIucmM6CisgICAgICAgICog
TWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliUmVzb3VyY2UuaDoKKyAgICAgICAgKiBNaW5p
QnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5jcHA6CisgICAgICAgIChXZWJLaXRCcm93
c2VyV2luZG93OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAo
V2ViS2l0QnJvd3NlcldpbmRvdzo6Y2FuVHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJLaXRCcm93c2VyV2luZG93OjpjcmVhdGVQRU1TdHJpbmcpOgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93Lmg6CisKIDIwMTktMDMtMjYgIEFha2FzaCBK
YWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtld3MtYXBwXSBTZXQgZGJf
Y29uc3RyYWludCB0byBGYWxzZSBmb3IgRm9yZWlnbiBLZXlzCmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24u
Y3BwCmluZGV4IDBlMGY0NjQ2YzdjNDJhYTMyODlmNDJmMzc0ZTI0MjI1MDg4MmZlNTAuLjhkMDEz
NzZhMmRlNWU4YTQ0YzRmYTdkZThlYmU4ZjMzYTc3NmNiM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9Db21tb24uY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21t
b24uY3BwCkBAIC0yMzEsNiArMjMxLDM0IEBAIE9wdGlvbmFsPENyZWRlbnRpYWw+IGFza0NyZWRl
bnRpYWwoSFdORCBod25kLCBjb25zdCBzdGQ6OndzdHJpbmcmIHJlYWxtKQogICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKK2Jvb2wgYXNrU2VydmVyVHJ1c3RFdmFsdWF0aW9uKEhXTkQgaHdu
ZCwgY29uc3Qgc3RkOjp3c3RyaW5nJiBwZW1zKQoreworICAgIGNsYXNzIFNlcnZlclRydXN0RXZh
bHVhdGlvbkRpYWxvZyA6IHB1YmxpYyBEaWFsb2cgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uRGlhbG9nKGNvbnN0IHN0ZDo6d3N0cmluZyYgcGVtcykKKyAgICAg
ICAgICAgIDogbV9wZW1zIHsgcGVtcyB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFNlbmRNZXNz
YWdlKEdldERsZ0l0ZW0odGhpcy0+aERsZygpLCBJRENfU0VSVkVSX1RSVVNUX1RFWFQpLCBXTV9T
RVRGT05ULCAoV1BBUkFNKUdldFN0b2NrT2JqZWN0KEFOU0lfRklYRURfRk9OVCksIFRSVUUpOwor
ICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0ZDo6d3N0cmluZyBtX3BlbXM7
CisKKyAgICAgICAgdm9pZCBzZXR1cCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldFRleHQo
SURDX1NFUlZFUl9UUlVTVF9URVhULCBtX3BlbXMpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBvaygpIGZpbmFsCisgICAgICAgIHsKKworICAgICAgICB9CisgICAgfTsKKworICAgIFNlcnZl
clRydXN0RXZhbHVhdGlvbkRpYWxvZyBkaWFsb2cgeyBwZW1zIH07CisgICAgcmV0dXJuIGRpYWxv
Zy5ydW4oaEluc3QsIGh3bmQsIElERF9TRVJWRVJfVFJVU1QpOworfQorCiBDb21tYW5kTGluZU9w
dGlvbnMgcGFyc2VDb21tYW5kTGluZSgpCiB7CiAgICAgQ29tbWFuZExpbmVPcHRpb25zIG9wdGlv
bnM7CkBAIC0yNTYsMyArMjg0LDE3IEBAIENvbW1hbmRMaW5lT3B0aW9ucyBwYXJzZUNvbW1hbmRM
aW5lKCkKIAogICAgIHJldHVybiBvcHRpb25zOwogfQorCitzdGQ6OndzdHJpbmcgcmVwbGFjZVdT
dHJpbmcoc3RkOjp3c3RyaW5nIHNyYywgY29uc3Qgc3RkOjp3c3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3Qgc3RkOjp3c3RyaW5nJiBuZXdWYWx1ZSkKK3sKKyAgICBpZiAoc3JjLmVtcHR5KCkgfHwgb2xk
VmFsdWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNyYzsKKworICAgIHNpemVfdCBwb3MgPSAw
OworICAgIHdoaWxlICgocG9zID0gc3JjLmZpbmQob2xkVmFsdWUsIHBvcykpICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKSB7CisgICAgICAgIHNyYy5yZXBsYWNlKHBvcywgb2xkVmFsdWUubGVuZ3RoKCks
IG5ld1ZhbHVlKTsKKyAgICAgICAgcG9zICs9IG5ld1ZhbHVlLmxlbmd0aCgpOworICAgIH0KKwor
ICAgIHJldHVybiBzcmM7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmgKaW5kZXggYmViYWUzMmM3NmM0
MWI1NjNiNDAwMjg3ODNiMzI5OTI0OWEyNmVlMy4uZjFmZmI3MmQxYTBiNzRlYmMyNjU4YTNiNzEz
NTUzMDJmMjc1YTA1NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5o
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaApAQCAtNjksNiArNjksOCBAQCBD
b21tYW5kTGluZU9wdGlvbnMgcGFyc2VDb21tYW5kTGluZSgpOwogdm9pZCBjcmVhdGVDcmFzaFJl
cG9ydChFWENFUFRJT05fUE9JTlRFUlMqKTsKIE9wdGlvbmFsPENyZWRlbnRpYWw+IGFza0NyZWRl
bnRpYWwoSFdORCwgY29uc3Qgc3RkOjp3c3RyaW5nJiByZWFsbSk7CiBib29sIGFza1Byb3h5U2V0
dGluZ3MoSFdORCwgUHJveHlTZXR0aW5ncyYpOworYm9vbCBhc2tTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24oSFdORCwgY29uc3Qgc3RkOjp3c3RyaW5nJiBwZW1zKTsKK3N0ZDo6d3N0cmluZyByZXBsYWNl
V1N0cmluZyhzdGQ6OndzdHJpbmcgc3JjLCBjb25zdCBzdGQ6OndzdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBzdGQ6OndzdHJpbmcmIG5ld1ZhbHVlKTsKIAogZXh0ZXJuIEhJTlNUQU5DRSBoSW5zdDsK
IGV4dGVybiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyTGliLnJjIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlC
cm93c2VyTGliLnJjCmluZGV4IGZkMDM3Y2UwNGYyOTI1NmQ3NWFkNGUyN2ZiZDExYTQwODdmY2U2
ZmQuLmY4ODc3MWE2MWY5NDFhYzBmMjE0NDkyNjkwYWZmZGRjYjBjYTQyMTEgMTAwNzU1Ci0tLSBh
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYi5yYworKysgYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4vTWluaUJyb3dzZXJMaWIucmMKQEAgLTI4MCw2ICsyODAsMTcgQEAgQkVHSU4K
ICAgICBMVEVYVCAgICAgICAgICAgIkNvbW1hIHNlcGFyYXRlZCBob3N0bmFtZXMuIixJRENfU1RB
VElDLDgwLDEwMSwxOTQsOA0KIEVORA0KIA0KK0lERF9TRVJWRVJfVFJVU1QgRElBTE9HRVggMCwg
MCwgMzE5LCAxODQNCitTVFlMRSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8IERTX0ZJWEVE
U1lTIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KK0NBUFRJT04gIlNlcnZl
ciBUcnVzdCBFdmFsdWF0aW9uIFJlcXVlc3QiDQorRk9OVCA4LCAiTVMgU2hlbGwgRGxnIiwgNDAw
LCAwLCAweDENCitCRUdJTg0KKyAgICBERUZQVVNIQlVUVE9OICAgIlllcyIsSURPSywxOTcsMTYz
LDUwLDE0DQorICAgIFBVU0hCVVRUT04gICAgICAiTm8iLElEQ0FOQ0VMLDI2MiwxNjMsNTAsMTQN
CisgICAgTFRFWFQgICAgICAgICAgICJDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiIsSURDX1NUQVRJ
Qyw3LDcsMjk0LDE3DQorICAgIEVESVRURVhUICAgICAgICBJRENfU0VSVkVSX1RSVVNUX1RFWFQs
NywyNCwzMDUsMTMwLEVTX01VTFRJTElORSB8IEVTX1JFQURPTkxZIHwgV1NfVlNDUk9MTCB8IFdT
X0hTQ1JPTEwgfCBOT1QgV1NfVEFCU1RPUA0KK0VORA0KKw0KIA0KICNpZmRlZiBBUFNUVURJT19J
TlZPS0VEDQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCkBAIC0zNTcsNiArMzY4LDE0IEBAIEJFR0lO
CiAgICAgICAgIFRPUE1BUkdJTiwgNw0KICAgICAgICAgQk9UVE9NTUFSR0lOLCAxNjkNCiAgICAg
RU5EDQorDQorICAgIElERF9TRVJWRVJfVFJVU1QsIERJQUxPRw0KKyAgICBCRUdJTg0KKyAgICAg
ICAgTEVGVE1BUkdJTiwgNw0KKyAgICAgICAgUklHSFRNQVJHSU4sIDMxMg0KKyAgICAgICAgVE9Q
TUFSR0lOLCA3DQorICAgICAgICBCT1RUT01NQVJHSU4sIDE3Nw0KKyAgICBFTkQNCiBFTkQNCiAj
ZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRA0KIA0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4vTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oCmluZGV4IDU4OGU4MjI2MzkwYWJjYWU0MWI5YmE5
YjgxYTY0M2UxNzMyNzY2YmMuLjE3OWZhZGE0OGI1NzQ4YWE3N2M5MWRiNzc2MDBhYTA5MzI2MThm
ZGEgMTAwNzU1Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291
cmNlLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliUmVzb3VyY2Uu
aApAQCAtNTcsNiArNTcsNyBAQAogI2RlZmluZSBJRERfQVVUSCAgICAgICAgICAgICAgICAgICAg
ICAgIDE3NgogI2RlZmluZSBJRE1fREVCVUdfSU5GT19MQVlFUiAgICAgICAgICAgIDE3NwogI2Rl
ZmluZSBJRERfUFJPWFkgICAgICAgICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBJRERfU0VS
VkVSX1RSVVNUICAgICAgICAgICAgICAgIDE3OQogI2RlZmluZSBJRENfRU1QVFlfVVJMX0NBQ0hF
ICAgICAgICAgICAgIDEwMDAKICNkZWZpbmUgSURDX1JFVFVSTl9GUkVFX01FTU9SWSAgICAgICAg
ICAxMDAxCiAjZGVmaW5lIElEQ19FTVBUWV9XRUJDT1JFX0NBQ0hFICAgICAgICAgMTAwMgpAQCAt
MTE4LDE5ICsxMTksMjAgQEAKICNkZWZpbmUgSURDX1BST1hZX0NVU1RPTSAgICAgICAgICAgICAg
ICAxMDU5CiAjZGVmaW5lIElEQ19QUk9YWV9FWENMVURFICAgICAgICAgICAgICAgMTA2MAogI2Rl
ZmluZSBJRENfUFJPWFlfRElTQUJMRSAgICAgICAgICAgICAgIDEwNjEKKyNkZWZpbmUgSURDX1NF
UlZFUl9UUlVTVF9URVhUICAgICAgICAgICAxMDYyCiAjZGVmaW5lIElETV9ORVdfV0VCS0lUX1dJ
TkRPVyAgICAgICAgICAgMzI3NzYKICNkZWZpbmUgSURNX05FV19XRUJLSVRMRUdBQ1lfV0lORE9X
ICAgICAzMjc3NwogI2RlZmluZSBJRE1fUFJPWFlfU0VUVElOR1MgICAgICAgICAgICAgIDMyNzc4
CiAjZGVmaW5lIElEQ19TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgLTEKIAogLy8gTmV4dCBk
ZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vCisvLyAKICNpZmRlZiBBUFNUVURJT19J
TlZPS0VECiAjaWZuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKICNkZWZpbmUgX0FQU19O
T19NRkMgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9W
QUxVRSAgICAgICAgMTc5CisjZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAg
MTgwCiAjZGVmaW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3NzkKLSNkZWZp
bmUgX0FQU19ORVhUX0NPTlRST0xfVkFMVUUgICAgICAgICAxMDYyCisjZGVmaW5lIF9BUFNfTkVY
VF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTA2MwogI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFM
VUUgICAgICAgICAgIDExMAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9XZWJLaXRCcm93c2VyV2luZG93LmNwcAppbmRleCBhYTUyYWUzZmY3ODU0MDU5MWMzMDUwMDIy
OWUyYmVhMjRhMDUzNzZkLi5mMzA1NzIyZjc4MGNjZjNiYzUzMDMyNjM4ZDYwMzI1ODYwZWIyYTUx
IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5j
cHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwCkBA
IC0yOSw5ICsyOSwxMiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgPFdlYktpdC9X
S0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGlj
YXRpb25EZWNpc2lvbkxpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ2VydGlmaWNhdGVJ
bmZvQ3VybC5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0NyZWRlbnRpYWwuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQvV0tEYXRhLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLSW5zcGVjdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVj
dGlvblNwYWNlQ3VybC5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZD
dXJsLmg+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC0yODYsMTkgKzI4OSw2NSBAQCB2b2lkIFdl
YktpdEJyb3dzZXJXaW5kb3c6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1Bh
Z2VSZWYgcGFnZSwgV0tBdQogICAgIGF1dG8mIHRoaXNXaW5kb3cgPSB0b1dlYktpdEJyb3dzZXJX
aW5kb3coY2xpZW50SW5mbyk7CiAgICAgYXV0byBwcm90ZWN0aW9uU3BhY2UgPSBXS0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxsZW5nZSk7CiAgICAgYXV0byBk
ZWNpc2lvbkxpc3RlbmVyID0gV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUdldERlY2lzaW9uTGlz
dGVuZXIoY2hhbGxlbmdlKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZWFsbShX
S1Byb3RlY3Rpb25TcGFjZUNvcHlSZWFsbShwcm90ZWN0aW9uU3BhY2UpKTsKLSAgICBpZiAoYXV0
byBjcmVkZW50aWFsID0gYXNrQ3JlZGVudGlhbCh0aGlzV2luZG93Lmh3bmQoKSwgY3JlYXRlU3Ry
aW5nKHJlYWxtLmdldCgpKSkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVz
ZXJuYW1lID0gY3JlYXRlV0tTdHJpbmcoY3JlZGVudGlhbC0+dXNlcm5hbWUpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFzc3dvcmQgPSBjcmVhdGVXS1N0cmluZyhjcmVkZW50
aWFsLT5wYXNzd29yZCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJlZj4gd2tD
cmVkZW50aWFsKEFkb3B0V0ssIFdLQ3JlZGVudGlhbENyZWF0ZSh1c2VybmFtZS5nZXQoKSwgcGFz
c3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKLSAgICAg
ICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9u
TGlzdGVuZXIsIHdrQ3JlZGVudGlhbC5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlv
blNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOworCisgICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1l
ID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFs
dWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAgIGlmICh0aGlzV2luZG93LmNhblRydXN0U2VydmVy
Q2VydGlmaWNhdGUocHJvdGVjdGlvblNwYWNlKSkgeworICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gY3JlYXRlV0tTdHJpbmcoImFjY2VwdCBzZXJ2ZXIgdHJ1
c3QiKTsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXNzd29yZCA9IGNy
ZWF0ZVdLU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJl
Zj4gd2tDcmVkZW50aWFsKEFkb3B0V0ssIFdLQ3JlZGVudGlhbENyZWF0ZSh1c2VybmFtZS5nZXQo
KSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsK
KyAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlh
bChkZWNpc2lvbkxpc3RlbmVyLCB3a0NyZWRlbnRpYWwuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHJlYWxtKFdLUHJvdGVjdGlvblNwYWNlQ29weVJlYWxtKHByb3RlY3Rpb25TcGFjZSkp
OworCisgICAgICAgIGlmIChhdXRvIGNyZWRlbnRpYWwgPSBhc2tDcmVkZW50aWFsKHRoaXNXaW5k
b3cuaHduZCgpLCBjcmVhdGVTdHJpbmcocmVhbG0uZ2V0KCkpKSkgeworICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gY3JlYXRlV0tTdHJpbmcoY3JlZGVudGlh
bC0+dXNlcm5hbWUpOworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhc3N3
b3JkID0gY3JlYXRlV0tTdHJpbmcoY3JlZGVudGlhbC0+cGFzc3dvcmQpOworICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tDcmVkZW50aWFsUmVmPiB3a0NyZWRlbnRpYWwoQWRvcHRXSywgV0tDcmVk
ZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlh
bFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRl
Y2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIHdrQ3JlZGVudGlh
bC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBX
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0
ZW5lciwgbnVsbHB0cik7CiB9CiAKK2Jvb2wgV2ViS2l0QnJvd3NlcldpbmRvdzo6Y2FuVHJ1c3RT
ZXJ2ZXJDZXJ0aWZpY2F0ZShXS1Byb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7
CisgICAgYXV0byBob3N0ID0gY3JlYXRlU3RyaW5nKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VD
b3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0byBwZW0gPSBjcmVhdGVQ
RU1TdHJpbmcocHJvdGVjdGlvblNwYWNlKTsKKworICAgIGF1dG8gaXQgPSBtX2FjY2VwdGVkU2Vy
dmVyVHJ1c3RDZXJ0LmZpbmQoaG9zdCk7CisgICAgaWYgKGl0ICE9IG1fYWNjZXB0ZWRTZXJ2ZXJU
cnVzdENlcnQuZW5kKCkgJiYgaXQtPnNlY29uZCA9PSBwZW0pCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGFza1NlcnZlclRydXN0RXZhbHVhdGlvbihod25kKCksIHBlbSkpIHsKKyAg
ICAgICAgbV9hY2NlcHRlZFNlcnZlclRydXN0Q2VydC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoaG9z
dCwgcGVtKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RkOjp3c3RyaW5nIFdlYktpdEJyb3dzZXJXaW5kb3c6OmNyZWF0ZVBFTVN0cmlu
ZyhXS1Byb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgYXV0byBjZXJ0
aWZpY2F0ZUluZm8gPSBXS1Byb3RlY3Rpb25TcGFjZUNvcHlDZXJ0aWZpY2F0ZUluZm8ocHJvdGVj
dGlvblNwYWNlKTsKKyAgICBhdXRvIGNoYWluU2l6ZSA9IFdLQ2VydGlmaWNhdGVJbmZvR2V0Q2Vy
dGlmaWNhdGVDaGFpblNpemUoY2VydGlmaWNhdGVJbmZvKTsKKworICAgIHN0ZDo6d3N0cmluZyBw
ZW1zOworCisgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgY2hhaW5TaXplOyBpKyspIHsKKyAgICAg
ICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0V0soV0tDZXJ0aWZpY2F0ZUluZm9Db3B5Q2VydGlm
aWNhdGVBdEluZGV4KGNlcnRpZmljYXRlSW5mbywgaSkpOworICAgICAgICBhdXRvIHNpemUgPSBX
S0RhdGFHZXRTaXplKGNlcnRpZmljYXRlLmdldCgpKTsKKyAgICAgICAgYXV0byBkYXRhID0gV0tE
YXRhR2V0Qnl0ZXMoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICBwZW1zICs9IHN0ZDo6d3N0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YSArIHNpemUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVwbGFj
ZVdTdHJpbmcocGVtcywgTCJcbiIsIEwiXHJcbiIpOworfQorCiBXS1BhZ2VSZWYgV2ViS2l0QnJv
d3NlcldpbmRvdzo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlQ29uZmlndXJh
dGlvblJlZiBjb25maWd1cmF0aW9uLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFj
dGlvbiwgV0tXaW5kb3dGZWF0dXJlc1JlZiB3aW5kb3dGZWF0dXJlcywgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbykKIHsKICAgICBhdXRvJiBuZXdXaW5kb3cgPSBNYWluV2luZG93OjpjcmVhdGUoKS5s
ZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3Nl
cldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuaApp
bmRleCA0MjNjMjdlN2EwYjViY2U5YTA2OTA3YTc3MDMwY2U3NmQzNDQ1MDY1Li42NDMyOGI0MWVl
OTJiYzY0YTU4MDY4MzMzYjRmNzgzMTViZGMxNTZiIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9XZWJLaXRCcm93c2VyV2luZG93LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDb21t
b24uaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Ml9DLmg+CisjaW5jbHVkZSA8bWFwPgogCiBjbGFzcyBXZWJLaXRCcm93c2VyV2luZG93
IDogcHVibGljIEJyb3dzZXJXaW5kb3cgewogcHVibGljOgpAQCAtNjEsNiArNjIsOSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCB1cGRhdGVQcm94eVNldHRpbmdzKCk7CiAKKyAgICBib29sIGNhblRy
dXN0U2VydmVyQ2VydGlmaWNhdGUoV0tQcm90ZWN0aW9uU3BhY2VSZWYpOworICAgIHN0ZDo6d3N0
cmluZyBjcmVhdGVQRU1TdHJpbmcoV0tQcm90ZWN0aW9uU3BhY2VSZWYpOworCiAgICAgc3RhdGlj
IHZvaWQgZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tU
eXBlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgZGlkQ29tbWl0TmF2aWdhdGlv
bihXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKik7CiAg
ICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJl
ZiwgV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiwgY29uc3Qgdm9pZCopOwpAQCAtNzAsNCAr
NzQsNSBAQCBwcml2YXRlOgogICAgIEhXTkQgbV9oTWFpblduZCB7IG51bGxwdHIgfTsKICAgICBI
V05EIG1fdXJsQmFyV25kIHsgbnVsbHB0ciB9OwogICAgIFByb3h5U2V0dGluZ3MgbV9wcm94eSB7
IH07CisgICAgc3RkOjptYXA8c3RkOjp3c3RyaW5nLCBzdGQ6OndzdHJpbmc+IG1fYWNjZXB0ZWRT
ZXJ2ZXJUcnVzdENlcnQ7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDcxNjY5NzM1M2NmZWM2NGY4NWRhZjBhNDUxZmRk
ZTAxMmQ0N2E2YzQuLmNkMTFjZjk5ODYxNDU0OGMwY2IzMTIyNzhkYjBhNDFlNzA1YTQwNDMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0wMy0yNiAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hp
LktvbW9yaUBzb255LmNvbT4KKworICAgICAgICBbQ3VybF0gQWRkIFNlcnZlciBUcnVzdCBFdmFs
dWF0aW9uIFN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTE2NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTktMDMtMjYgIFph
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29udGVudENoYW5nZU9i
c2VydmVyXSBTa2lwIGFub255bW91cyByZW5kZXJlcnMgd2hlbiBjaGVja2luZyBmb3IgIndpbGxS
ZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA0YWY3MGFmNDg1NThmZTAwMmRkNWIx
NGI5N2FmNTc3OGIwNzg0Y2FjLi45MjdjMzE3ZDNjMmM4ZjIwNWEyMWI4ZjJiYzQwZTYzMjU2OTY1
MzliIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMjAsNSArMjAsMTAgQEAgaHR0cC90ZXN0cy9zZWN1cml0eS9jb29raWVz
L3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1yZWRpcmVjdC5odG1sIFsgU2tpcCBdCiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2Nvb2tpZXMvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLXVzZXIt
YWN0aW9uLmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29va2llcy90aGlyZC1w
YXJ0eS1jb29raWUtYmxvY2tpbmcteHNsdC54bWwgWyBTa2lwIF0KIAorIyBTZXJ2ZXIgdHJ1c3Qg
ZXZhbHVhdGlvbiBvbmx5IHN1cHBvcnRlZCBpbiBXSzIuCitodHRwL3Rlc3RzL3NzbC9pZnJhbWUt
dXBncmFkZS5odHRwcy5odG1sIFsgU2tpcCBdCitodHRwL3Rlc3RzL3NzbC9taXhlZENvbnRlbnQv
aW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvc3NsL3VwZ3Jh
ZGUtb3JpZ2luLXVzYWdlLmh0bWwgWyBGYWlsdXJlIF0KKwogIyBUaGVyZSBpcyBub3QgTmV0d29y
a1Byb2Nlc3MgaW4gV0sxLCBzbyBpdCBjYW4ndCBjcmFzaC4KIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5YmkvbmV0d29yay1wcm9jZXNzLWNyYXNoLWVycm9yLmh0bWwgWyBTa2lwIF0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGZk
MDA5OGE4NjJhZGE5MjY3NTAyZWQwODYyNDhjODc1ZTY0MjZhZTcuLmQ1MGM4MjFkOGIyOWM3NzU0
MTJlODljMDAzYjlhMGYxODUzYTExYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
Y2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwpAQCAtOTQ5LDEwICs5NDksNiBAQCBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2Nvb2tpZXMvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLXJlZGlyZWN0Lmh0bWwg
WyBQYXNzIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29va2llcy90aGlyZC1wYXJ0eS1jb29raWUt
YmxvY2tpbmctdXNlci1hY3Rpb24uaHRtbCBbIFBhc3MgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9j
b29raWVzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy14c2x0LnhtbCBbIFBhc3MgXQogCi1o
dHRwL3Rlc3RzL3NzbC9pZnJhbWUtdXBncmFkZS5odHRwcy5odG1sIFsgU2tpcCBdCi1odHRwL3Rl
c3RzL3NzbC9taXhlZENvbnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwgWyBGYWlsdXJlIF0K
LWh0dHAvdGVzdHMvc3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwgWyBGYWlsdXJlIF0KLQog
aHR0cC90ZXN0cy9zc2wvbWVkaWEtc3RyZWFtIFsgU2tpcCBdCiAKIFsgRGVidWcgXSBodHRwL3Rl
c3RzL3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0Lmh0bWwg
WyBTa2lwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366157</attachid>
            <date>2019-03-28 00:42:00 -0700</date>
            <delta_ts>2019-03-29 00:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191646-20190328163854.patch</filename>
            <type>text/plain</type>
            <size>28505</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE5MGI4ODljMWEzYTAy
NzlhNmNhNjUxNTBjNmE1ZjE3ZjRhNTAwYy4uOGYxMTk3YmExZDFlOTNiZmIxOTYwYjQ4NDMxODNi
MWY3ZTgxZjBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTI4ICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBB
ZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3NzbC9pZnJhbWUt
dXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NzbC9taXhlZENv
bnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMv
c3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3Bh
Y2VGb3JQYXNzd29yZEJhc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGb3JTZXJ2ZXJUcnVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVz
dDo6ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbik6CisKIDIwMTktMDMtMjcgIEp1c3RpbiBG
YW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViIEdQVV0gU3RhbmRhcmRp
emUgV2ViIEdQVSBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjcmVhdGlvbiBsb2dpYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCAwMTg3OGU4YWRlYjU2MzZlMTI2YTY3ZWVmNzEwNDNiNjk3OTZlN2Y4Li43ZmMx
NjNjZGQ3MDUzZWQ4OTRjYmM1NWY4NjdhNWNhMTQ5YjkwNDRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDE5LTAzLTI4ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnku
Y29tPgorCisgICAgICAgIFtDdXJsXSBBZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9y
dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rz
OiBodHRwL3Rlc3RzL3NzbC9pZnJhbWUtdXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAg
ICBodHRwL3Rlc3RzL3NzbC9taXhlZENvbnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMvc3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRGYWlsV2l0aEVycm9y
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6dHJ5U2VydmVyVHJ1c3RF
dmFsdWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFy
dFdpdGhDcmVkZW50aWFsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtE
YXRhVGFza0N1cmwuaDoKKwogMjAxOS0wMy0yNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgW0FSS2l0XSBCbGFjayB2aWV3IHdoZW4gb3BlbmluZyBhIDNEIG1vZGVs
IHVzZHogZmlsZSBpbiBuZXcgdGFiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4IDBj
MWMwMzFjYThjOTQxYmM5NGQ0MmZiMzU3MjM3NGI2ZGY4NzZlMDcuLmM2MGYxYjQwZTJiMTM0MjEx
MTJmNTgwZmEwM2Q1MTBjYWY0Y2Q4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBA
IC00NSwxMSArNDUsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IEN1cmxSZXNwb25zZSYsIHVuc2lnbmVkLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgQXV0aGVudGljYXRpb25DbGllbnQqID0gbnVsbHB0cik7CisgICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgVVJMJiwgY29uc3QgQ2VydGlmaWNhdGVJbmZvJiwgY29uc3QgUmVz
b3VyY2VFcnJvciYsIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiA9IG51bGxwdHIpOworCiAgICAgQXV0
aGVudGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIFByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGUgcHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkoY29uc3Qg
VVJMJiwgYm9vbCBpc0ZvclByb3h5KTsKLSAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNw
YWNlRnJvbUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgUHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZUZvclBhc3N3b3JkQmFzZWQo
Y29uc3QgQ3VybFJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIFByb3Rl
Y3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2VGb3JTZXJ2ZXJUcnVzdChjb25zdCBVUkwmLCBjb25z
dCBDZXJ0aWZpY2F0ZUluZm8mKTsKICAgICBPcHRpb25hbDx1aW50MTZfdD4gZGV0ZXJtaW5lUHJv
eHlQb3J0KGNvbnN0IFVSTCYpOwogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUN1cmxBdXRoKGxvbmcpOwogICAgIFN0cmluZyBw
YXJzZVJlYWxtKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQ3VybC5jcHAKaW5kZXggMmZkY2NkYjNkNTc4ZWYyNTRiMTBhN2U4YjBlYzI4MTc0
YThjYTNlOS4uNDEwYTI3NmY0ZTA2Mzk3NTZjZTRjMGMzZjNjZjMwNWM1NjM2MDQyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAKQEAgLTM1LDcgKzM1LDEzIEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zZSwgdW5zaWduZWQg
cHJldmlvdXNGYWlsdXJlQ291bnQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBB
dXRoZW50aWNhdGlvbkNsaWVudCogY2xpZW50KQotICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VCYXNlKHByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUoY3VybFJlc3BvbnNlLCByZXNwb25zZSks
IENyZWRlbnRpYWwoKSwgcHJldmlvdXNGYWlsdXJlQ291bnQsIHJlc3BvbnNlLCBSZXNvdXJjZUVy
cm9yKCkpCisgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UocHJvdGVjdGlvblNwYWNl
Rm9yUGFzc3dvcmRCYXNlZChjdXJsUmVzcG9uc2UsIHJlc3BvbnNlKSwgQ3JlZGVudGlhbCgpLCBw
cmV2aW91c0ZhaWx1cmVDb3VudCwgcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSkKKyAgICAsIG1f
YXV0aGVudGljYXRpb25DbGllbnQoY2xpZW50KQoreworfQorCitBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJj
ZUVycm9yLCBBdXRoZW50aWNhdGlvbkNsaWVudCogY2xpZW50KQorICAgIDogQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VCYXNlKHByb3RlY3Rpb25TcGFjZUZvclNlcnZlclRydXN0KHVybCwgY2VydGlm
aWNhdGVJbmZvKSwgQ3JlZGVudGlhbCgpLCAwLCBSZXNvdXJjZVJlc3BvbnNlKCksIHJlc291cmNl
RXJyb3IpCiAgICAgLCBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50KGNsaWVudCkKIHsKIH0KQEAgLTUx
LDcgKzU3LDcgQEAgUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTo6cHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb20KICAgICByZXR1cm4gaXNGb3JQcm94
eSA/IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCA6IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7
CiB9CiAKLVByb3RlY3Rpb25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlv
blNwYWNlRnJvbUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitQcm90ZWN0aW9uU3BhY2UgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZUZvclBhc3N3b3JkQmFzZWQoY29uc3QgQ3VybFJl
c3BvbnNlJiBjdXJsUmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewogICAgIGlmICghcmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSAmJiAhcmVzcG9uc2UuaXNQcm94
eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFj
ZSgpOwpAQCAtNjIsNyArNjgsMTYgQEAgUHJvdGVjdGlvblNwYWNlIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGcm9tSGFuZGxlKGNvbnN0IEN1cmxSZXMKICAgICBhdXRv
IHNlcnZlclR5cGUgPSBwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSSh1cmwsIGlzUHJv
eHlBdXRoKTsKICAgICBhdXRvIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gYXV0aGVudGljYXRpb25T
Y2hlbWVGcm9tQ3VybEF1dGgoaXNQcm94eUF1dGggPyBjdXJsUmVzcG9uc2UuYXZhaWxhYmxlUHJv
eHlBdXRoIDogY3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoKTsKIAotICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBzdGF0aWNfY2FzdDxpbnQ+KHBv
cnQgPyAqcG9ydCA6IDApLCBzZXJ2ZXJUeXBlLCBwYXJzZVJlYWxtKHJlc3BvbnNlKSwgYXV0aGVu
dGljYXRpb25TY2hlbWUpOworICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50
b1N0cmluZygpLCBzdGF0aWNfY2FzdDxpbnQ+KHBvcnQudmFsdWVPcigwKSksIHNlcnZlclR5cGUs
IHBhcnNlUmVhbG0ocmVzcG9uc2UpLCBhdXRoZW50aWNhdGlvblNjaGVtZSk7Cit9CisKK1Byb3Rl
Y3Rpb25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRm9yU2Vy
dmVyVHJ1c3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQoreworICAgIGF1dG8gcG9ydCA9IGRldGVybWluZVByb3h5UG9ydCh1cmwpOworICAg
IGF1dG8gc2VydmVyVHlwZSA9IHByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKHVybCwg
ZmFsc2UpOworICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZDsKKworICAg
IHJldHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHBvcnQudmFsdWVPcigwKSksIHNlcnZlclR5cGUsIFN0cmluZygpLCBhdXRoZW50aWNh
dGlvblNjaGVtZSwgY2VydGlmaWNhdGVJbmZvKTsKIH0KIAogT3B0aW9uYWw8dWludDE2X3Q+IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpkZXRlcm1pbmVQcm94eVBvcnQoY29uc3QgVVJMJiB1cmwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmNwcAppbmRleCBjNWM0NTM1ZTg3ZWIxNzg4Yjg0ODRiNDc0ZjVlZDc5YjY0NzI1ZGU1Li44
MjdhMmMzYWNjY2QzZGM0YmViMGE4YTc2MGE0NTMxNDNlOTg4YmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTMy
NCw2ICszMjQsMTIgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVTU0xGb3JIb3N0KGNvbnN0IFN0
cmluZyYgaG9zdCkKICAgICAgICAgc2V0Q0FDZXJ0UGF0aChwYXRoLT51dGY4KCkuZGF0YSgpKTsK
IH0KIAordm9pZCBDdXJsSGFuZGxlOjpkaXNhYmxlU2VydmVyVHJ1c3RFdmFsdWF0aW9uKCkKK3sK
KyAgICBzZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOwor
ICAgIHNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdDo6TG9vc2VOYW1lQ2hl
Y2spOworfQorCiBDVVJMY29kZSBDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3Ns
Q3R4KQogewogICAgIGlmICghc3NsQ3R4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCBjNzlkZWMxZmFkZjdhODNkOTVjZTM2
OGJlNjcxMzlhZWEwMTVhMmNmLi44MGI4OTE1OGYzOWE0M2NhY2I1NzY4ZGU5MjljN2NjN2UxMmNk
MzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuaApAQCAtMjUzLDYgKzI1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SHR0
cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBsb25nIGF1dGhUeXBl
ID0gQ1VSTEFVVEhfQU5ZKTsKIAorICAgIHZvaWQgZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlv
bigpOwogICAgIHZvaWQgc2V0Q0FDZXJ0UGF0aChjb25zdCBjaGFyKik7CiAgICAgdm9pZCBzZXRT
c2xWZXJpZnlQZWVyKFZlcmlmeVBlZXIpOwogICAgIHZvaWQgc2V0U3NsVmVyaWZ5SG9zdChWZXJp
ZnlIb3N0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlcXVlc3QuY3BwCmluZGV4IGZmZTIzMzEzZTlhOWNiNGM5ZjYwNDYyM2IwNTc1NmIxMzdm
NGZjMWEuLjNhYWY4OTExODBiYWYzMGIwODY2MmNhNzAxMjFkMWI1ZTkxNzIwNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNw
cApAQCAtMjEzLDYgKzIxMyw5IEBAIENVUkwqIEN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVyKCkK
ICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVzZXJQYXNzKG1fdXNlciwgbV9wYXNz
d29yZCwgbV9hdXRoVHlwZSk7CiAgICAgfQogCisgICAgaWYgKG1fc2hvdWxkRGlzYWJsZVNlcnZl
clRydXN0RXZhbHVhdGlvbikKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5kaXNhYmxlU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKCk7CisKICAgICBtX2N1cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVu
Y3Rpb24oZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUt
PnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbihkaWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVl
c3QuaAppbmRleCA1M2FhMGI1NWY4YzBjNjk4ZmFlYjRmMWFlM2RkNjlhMWQ3MzMyNDEzLi44YWM0
OGU5NGQ4NDFmNjc0MzlkZjNjOTkzNGU4YTRmNzQ0M2IzZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIkN1cmxNdWx0aXBhcnRIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJD
dXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oIgogI2luY2x1ZGUgIkN1cmxSZXNwb25zZS5oIgot
I2luY2x1ZGUgIkN1cmxTU0xWZXJpZmllci5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkTWV0cmlj
cy5oIgogI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgpAQCAtNzUsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2xp
ZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBdXRoZW50aWNhdGlvblNjaGVtZShQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSB7IG1fc2hvdWxkRGlzYWJsZVNlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHRydWU7IH0KICAgICB2b2lkIHNldFN0YXJ0VGltZShjb25zdCBNb25v
dG9uaWNUaW1lJiBzdGFydFRpbWUpIHsgbV9yZXF1ZXN0U3RhcnRUaW1lID0gc3RhcnRUaW1lOyB9
CiAKICAgICB2b2lkIHN0YXJ0KCk7CkBAIC0xNzMsNiArMTczLDcgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV91c2VyOwogICAgIFN0cmluZyBtX3Bhc3N3b3JkOwogICAgIHVuc2lnbmVkIGxvbmcg
bV9hdXRoVHlwZSB7IENVUkxBVVRIX0FOWSB9OworICAgIGJvb2wgbV9zaG91bGREaXNhYmxlU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkU3VzcGVuZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2VuYWJsZU11bHRpcGFydCB7IGZhbHNlIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tD
dXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRh
c2tDdXJsLmNwcAppbmRleCA3NzU1ZWYzY2Y1ZjgxY2I4ZGVhOTM3MTdmZTFjNjhmOTQzNWFkZjVh
Li4zNmE2YjM5MjZjMWIyYTg2OGQ4MDdmMTQ3MzhlZDk2OGRiZDJjYzZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1
cmwuY3BwCkBAIC0xODksMTEgKzE4OSwxNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmN1
cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKICAgICBtX2NsaWVudC0+ZGlkQ29t
cGxldGVXaXRoRXJyb3IoeyB9LCBtX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJp
Y3MoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZEZhaWxXaXRoRXJy
b3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQordm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKICAgICBpZiAo
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAocmVzb3VyY2VFcnJvci5pc1NTTENlcnRWZXJpZmljYXRpb25FcnJvcigpKSB7CisgICAg
ICAgIHRyeVNlcnZlclRydXN0RXZhbHVhdGlvbihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShyZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LmNlcnRpZmljYXRlSW5mbygpLCBy
ZXNvdXJjZUVycm9yKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBtX2NsaWVudC0+
ZGlkQ29tcGxldGVXaXRoRXJyb3IocmVzb3VyY2VFcnJvcik7CiB9CiAKQEAgLTM5OCw2ICs0MDMs
MjMgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjp0cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmcKICAgICB9KTsKIH0KIAordm9pZCBOZXR3b3Jr
RGF0YVRhc2tDdXJsOjp0cnlTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmJiBjaGFsbGVuZ2UpCit7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2Uo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY2hhbGxlbmdlXShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKSB7CisgICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGxldGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChkaXNwb3NpdGlv
biA9PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsICYm
ICFjcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byByZXF1ZXN0Q3JlZGVu
dGlhbCA9IG1fY3VybFJlcXVlc3QgPyBDcmVkZW50aWFsKG1fY3VybFJlcXVlc3QtPnVzZXIoKSwg
bV9jdXJsUmVxdWVzdC0+cGFzc3dvcmQoKSwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkgOiBD
cmVkZW50aWFsKCk7CisgICAgICAgICAgICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCByZXF1ZXN0Q3JlZGVudGlhbCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgbV9jbGllbnQtPmRp
ZENvbXBsZXRlV2l0aEVycm9yKGNoYWxsZW5nZS5lcnJvcigpKTsKKyAgICB9KTsKK30KKwogdm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN0YXJ0V2l0aENyZWRlbnRpYWwoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
CiB7CiAgICAgQVNTRVJUKG1fY3VybFJlcXVlc3QpOwpAQCAtNDA4LDYgKzQzMCw4IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYgcHJvdGVjdGlvCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0
KFdURk1vdmUocHJldmlvdXNSZXF1ZXN0KSwgUmVxdWVzdFN0YXR1czo6UmV1c2VkUmVxdWVzdCk7
CiAgICAgbV9jdXJsUmVxdWVzdC0+c2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNw
YWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpOwogICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQ
YXNzKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIGlmIChw
cm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkKKyAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbigpOwogICAgIG1f
Y3VybFJlcXVlc3QtPnNldFN0YXJ0VGltZShtX3N0YXJ0VGltZSk7CiAgICAgbV9jdXJsUmVxdWVz
dC0+c3RhcnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtEYXRhVGFza0N1cmwuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgKaW5kZXggYTMyZjYxNjhjYTc0MjQ2ZTU2NTIyNjFm
MjBmODc4Y2FhNDViMmNhYi4uM2MzNTc2YjRiNmZkZDNiZjU1MmIwYjgyNDA1YjFkYTNiYzExNTQ0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtE
YXRhVGFza0N1cmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya0RhdGFUYXNrQ3VybC5oCkBAIC03OCw2ICs3OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0
cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYp
OwogICAgIHZvaWQgcmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSYsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKIAorICAgIHZvaWQgdHJ5U2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOwor
CiAgICAgdm9pZCBhcHBlbmRDb29raWVIZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgdm9pZCBoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OkN1cmxSZXNwb25zZSYpOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTM4MDM0YTQyMDFhN2NkMDY4Nzk3
N2U2YWMxZTBlMmY1ZTEzMDZkMS4uZDdlZGRhYjA4MGYzYmZiMzBmMGE1ZWMzODllZDA1Yjc3NGZj
OTc0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDE5LTAzLTI4ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29t
b3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBBZGQgU2VydmVyIFRydXN0IEV2YWx1YXRp
b24gU3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTY0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudGVkIE1pbmlCcm93c2VyIFVJIGZvciBhc2tpbmcgaWYgdXNlciB0cnVzdHMg
dGhlIHNlcnZlci4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwOgorICAg
ICAgICAoYXNrU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAgICAgICAgKGNyZWF0ZVBFTVN0cmlu
Zyk6CisgICAgICAgIChyZXBsYWNlU3RyaW5nKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4v
Q29tbW9uLmg6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliLnJjOgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmg6CisgICAg
ICAgICogTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwOgorICAgICAgICAo
V2ViS2l0QnJvd3NlcldpbmRvdzo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYktpdEJyb3dzZXJXaW5kb3c6OmNhblRydXN0U2VydmVyQ2VydGlmaWNhdGUp
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93Lmg6CisKIDIw
MTktMDMtMjcgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIyNDI2ODYpOiBwYWNrYWdlLXJvb3QgY3JlYXRlcyByb290cyB3aXRoIGJyb2tlbiBz
eW1saW5rcyBpbiBXZWJLaXQuZnJhbWV3b3JrL1hQQ1NlcnZpY2VzLwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcAppbmRleCAwZTBmNDY0NmM3YzQyYWEzMjg5ZjQyZjM3NGUyNDIyNTA4ODJmZTUwLi4z
ZWJmNGMwZWIwZTY2ZjRhZGM3ZDZhODU4MThlMjA5YTg4ODQ2N2JiIDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
Q29tbW9uLmNwcApAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgIkRpYWxvZ0hlbHBlci5oIgog
I2luY2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKICNpbmNsdWRlICJNaW5pQnJvd3Nl
clJlcGxhY2UuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNlQ3VybC5oPgorI2luY2x1ZGUgPFdlYktp
dC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPGRiZ2hlbHAuaD4KICNpbmNsdWRlIDxzaGxvYmou
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0yMzEsNiArMjM0LDM0IEBAIE9w
dGlvbmFsPENyZWRlbnRpYWw+IGFza0NyZWRlbnRpYWwoSFdORCBod25kLCBjb25zdCBzdGQ6Ondz
dHJpbmcmIHJlYWxtKQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKK2Jvb2wgYXNrU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKEhXTkQgaHduZCwgY29uc3Qgc3RkOjp3c3RyaW5nJiBwZW1zKQor
eworICAgIGNsYXNzIFNlcnZlclRydXN0RXZhbHVhdGlvbkRpYWxvZyA6IHB1YmxpYyBEaWFsb2cg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU2VydmVyVHJ1c3RFdmFsdWF0aW9uRGlhbG9nKGNvbnN0
IHN0ZDo6d3N0cmluZyYgcGVtcykKKyAgICAgICAgICAgIDogbV9wZW1zIHsgcGVtcyB9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNlbmRNZXNzYWdlKEdldERsZ0l0ZW0odGhpcy0+aERsZygpLCBJ
RENfU0VSVkVSX1RSVVNUX1RFWFQpLCBXTV9TRVRGT05ULCAoV1BBUkFNKUdldFN0b2NrT2JqZWN0
KEFOU0lfRklYRURfRk9OVCksIFRSVUUpOworICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIHN0ZDo6d3N0cmluZyBtX3BlbXM7CisKKyAgICAgICAgdm9pZCBzZXR1cCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNldFRleHQoSURDX1NFUlZFUl9UUlVTVF9URVhULCBtX3BlbXMp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvaygpIGZpbmFsCisgICAgICAgIHsKKworICAg
ICAgICB9CisgICAgfTsKKworICAgIFNlcnZlclRydXN0RXZhbHVhdGlvbkRpYWxvZyBkaWFsb2cg
eyBwZW1zIH07CisgICAgcmV0dXJuIGRpYWxvZy5ydW4oaEluc3QsIGh3bmQsIElERF9TRVJWRVJf
VFJVU1QpOworfQorCiBDb21tYW5kTGluZU9wdGlvbnMgcGFyc2VDb21tYW5kTGluZSgpCiB7CiAg
ICAgQ29tbWFuZExpbmVPcHRpb25zIG9wdGlvbnM7CkBAIC0yNTYsMyArMjg3LDM2IEBAIENvbW1h
bmRMaW5lT3B0aW9ucyBwYXJzZUNvbW1hbmRMaW5lKCkKIAogICAgIHJldHVybiBvcHRpb25zOwog
fQorCitzdGQ6OndzdHJpbmcgY3JlYXRlUEVNU3RyaW5nKFdLUHJvdGVjdGlvblNwYWNlUmVmIHBy
b3RlY3Rpb25TcGFjZSkKK3sKKyAgICBhdXRvIGNlcnRpZmljYXRlSW5mbyA9IFdLUHJvdGVjdGlv
blNwYWNlQ29weUNlcnRpZmljYXRlSW5mbyhwcm90ZWN0aW9uU3BhY2UpOworICAgIGF1dG8gY2hh
aW5TaXplID0gV0tDZXJ0aWZpY2F0ZUluZm9HZXRDZXJ0aWZpY2F0ZUNoYWluU2l6ZShjZXJ0aWZp
Y2F0ZUluZm8pOworCisgICAgc3RkOjp3c3RyaW5nIHBlbXM7CisKKyAgICBmb3IgKGF1dG8gaSA9
IDA7IGkgPCBjaGFpblNpemU7IGkrKykgeworICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRv
cHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0SW5kZXgoY2VydGlmaWNhdGVJ
bmZvLCBpKSk7CisgICAgICAgIGF1dG8gc2l6ZSA9IFdLRGF0YUdldFNpemUoY2VydGlmaWNhdGUu
Z2V0KCkpOworICAgICAgICBhdXRvIGRhdGEgPSBXS0RhdGFHZXRCeXRlcyhjZXJ0aWZpY2F0ZS5n
ZXQoKSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAg
ICAgICAgICBwZW1zLnB1c2hfYmFjayhkYXRhW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVw
bGFjZVN0cmluZyhwZW1zLCBMIlxuIiwgTCJcclxuIik7Cit9CisKK3N0ZDo6d3N0cmluZyByZXBs
YWNlU3RyaW5nKHN0ZDo6d3N0cmluZyBzcmMsIGNvbnN0IHN0ZDo6d3N0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IHN0ZDo6d3N0cmluZyYgbmV3VmFsdWUpCit7CisgICAgaWYgKHNyYy5lbXB0eSgpIHx8
IG9sZFZhbHVlLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBzcmM7CisKKyAgICBzaXplX3QgcG9z
ID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IHNyYy5maW5kKG9sZFZhbHVlLCBwb3MpKSAhPSBzcmMu
bnBvcykgeworICAgICAgICBzcmMucmVwbGFjZShwb3MsIG9sZFZhbHVlLmxlbmd0aCgpLCBuZXdW
YWx1ZSk7CisgICAgICAgIHBvcyArPSBuZXdWYWx1ZS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3JjOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5o
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5oCmluZGV4IGJlYmFlMzJjNzZjNDFiNTYz
YjQwMDI4NzgzYjMyOTkyNDlhMjZlZTMuLjY2OGE5YTQ4ODdkYzg3YjU4ZDg2N2M4YjE5NDI0ZWI4
MmFkYTVmZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaAorKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJNYWluV2luZG93LmgiCiAjaW5jbHVkZSAiV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdy5oIgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQyX0MuaD4KIAog
ZW51bSBjbGFzcyBCcm93c2VyV2luZG93VHlwZSB7CiAgICAgV2ViS2l0LApAQCAtNzAsNiArNzEs
MTAgQEAgdm9pZCBjcmVhdGVDcmFzaFJlcG9ydChFWENFUFRJT05fUE9JTlRFUlMqKTsKIE9wdGlv
bmFsPENyZWRlbnRpYWw+IGFza0NyZWRlbnRpYWwoSFdORCwgY29uc3Qgc3RkOjp3c3RyaW5nJiBy
ZWFsbSk7CiBib29sIGFza1Byb3h5U2V0dGluZ3MoSFdORCwgUHJveHlTZXR0aW5ncyYpOwogCiti
b29sIGFza1NlcnZlclRydXN0RXZhbHVhdGlvbihIV05ELCBjb25zdCBzdGQ6OndzdHJpbmcmIHBl
bXMpOworc3RkOjp3c3RyaW5nIGNyZWF0ZVBFTVN0cmluZyhXS1Byb3RlY3Rpb25TcGFjZVJlZik7
CitzdGQ6OndzdHJpbmcgcmVwbGFjZVN0cmluZyhzdGQ6OndzdHJpbmcgc3JjLCBjb25zdCBzdGQ6
OndzdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBzdGQ6OndzdHJpbmcmIG5ld1ZhbHVlKTsKKwogZXh0
ZXJuIEhJTlNUQU5DRSBoSW5zdDsKIGV4dGVybiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9uOwogZXh0
ZXJuIFNJWkUgc193aW5kb3dTaXplOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L01pbmlCcm93c2VyTGliLnJjIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGli
LnJjCmluZGV4IGZkMDM3Y2UwNGYyOTI1NmQ3NWFkNGUyN2ZiZDExYTQwODdmY2U2ZmQuLmY4ODc3
MWE2MWY5NDFhYzBmMjE0NDkyNjkwYWZmZGRjYjBjYTQyMTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYi5yYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4vTWluaUJyb3dzZXJMaWIucmMKQEAgLTI4MCw2ICsyODAsMTcgQEAgQkVHSU4KICAgICBMVEVY
VCAgICAgICAgICAgIkNvbW1hIHNlcGFyYXRlZCBob3N0bmFtZXMuIixJRENfU1RBVElDLDgwLDEw
MSwxOTQsOA0KIEVORA0KIA0KK0lERF9TRVJWRVJfVFJVU1QgRElBTE9HRVggMCwgMCwgMzE5LCAx
ODQNCitTVFlMRSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8IERTX0ZJWEVEU1lTIHwgV1Nf
UE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KK0NBUFRJT04gIlNlcnZlciBUcnVzdCBF
dmFsdWF0aW9uIFJlcXVlc3QiDQorRk9OVCA4LCAiTVMgU2hlbGwgRGxnIiwgNDAwLCAwLCAweDEN
CitCRUdJTg0KKyAgICBERUZQVVNIQlVUVE9OICAgIlllcyIsSURPSywxOTcsMTYzLDUwLDE0DQor
ICAgIFBVU0hCVVRUT04gICAgICAiTm8iLElEQ0FOQ0VMLDI2MiwxNjMsNTAsMTQNCisgICAgTFRF
WFQgICAgICAgICAgICJDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiIsSURDX1NUQVRJQyw3LDcsMjk0
LDE3DQorICAgIEVESVRURVhUICAgICAgICBJRENfU0VSVkVSX1RSVVNUX1RFWFQsNywyNCwzMDUs
MTMwLEVTX01VTFRJTElORSB8IEVTX1JFQURPTkxZIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwg
fCBOT1QgV1NfVEFCU1RPUA0KK0VORA0KKw0KIA0KICNpZmRlZiBBUFNUVURJT19JTlZPS0VEDQog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8NCkBAIC0zNTcsNiArMzY4LDE0IEBAIEJFR0lOCiAgICAgICAg
IFRPUE1BUkdJTiwgNw0KICAgICAgICAgQk9UVE9NTUFSR0lOLCAxNjkNCiAgICAgRU5EDQorDQor
ICAgIElERF9TRVJWRVJfVFJVU1QsIERJQUxPRw0KKyAgICBCRUdJTg0KKyAgICAgICAgTEVGVE1B
UkdJTiwgNw0KKyAgICAgICAgUklHSFRNQVJHSU4sIDMxMg0KKyAgICAgICAgVE9QTUFSR0lOLCA3
DQorICAgICAgICBCT1RUT01NQVJHSU4sIDE3Nw0KKyAgICBFTkQNCiBFTkQNCiAjZW5kaWYgICAg
Ly8gQVBTVFVESU9fSU5WT0tFRA0KIA0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJy
b3dzZXJMaWJSZXNvdXJjZS5oCmluZGV4IDU4OGU4MjI2MzkwYWJjYWU0MWI5YmE5YjgxYTY0M2Ux
NzMyNzY2YmMuLjE3OWZhZGE0OGI1NzQ4YWE3N2M5MWRiNzc2MDBhYTA5MzI2MThmZGEgMTAwNzU1
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmgKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliUmVzb3VyY2UuaApAQCAtNTcs
NiArNTcsNyBAQAogI2RlZmluZSBJRERfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgIDE3Ngog
I2RlZmluZSBJRE1fREVCVUdfSU5GT19MQVlFUiAgICAgICAgICAgIDE3NwogI2RlZmluZSBJRERf
UFJPWFkgICAgICAgICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBJRERfU0VSVkVSX1RSVVNU
ICAgICAgICAgICAgICAgIDE3OQogI2RlZmluZSBJRENfRU1QVFlfVVJMX0NBQ0hFICAgICAgICAg
ICAgIDEwMDAKICNkZWZpbmUgSURDX1JFVFVSTl9GUkVFX01FTU9SWSAgICAgICAgICAxMDAxCiAj
ZGVmaW5lIElEQ19FTVBUWV9XRUJDT1JFX0NBQ0hFICAgICAgICAgMTAwMgpAQCAtMTE4LDE5ICsx
MTksMjAgQEAKICNkZWZpbmUgSURDX1BST1hZX0NVU1RPTSAgICAgICAgICAgICAgICAxMDU5CiAj
ZGVmaW5lIElEQ19QUk9YWV9FWENMVURFICAgICAgICAgICAgICAgMTA2MAogI2RlZmluZSBJRENf
UFJPWFlfRElTQUJMRSAgICAgICAgICAgICAgIDEwNjEKKyNkZWZpbmUgSURDX1NFUlZFUl9UUlVT
VF9URVhUICAgICAgICAgICAxMDYyCiAjZGVmaW5lIElETV9ORVdfV0VCS0lUX1dJTkRPVyAgICAg
ICAgICAgMzI3NzYKICNkZWZpbmUgSURNX05FV19XRUJLSVRMRUdBQ1lfV0lORE9XICAgICAzMjc3
NwogI2RlZmluZSBJRE1fUFJPWFlfU0VUVElOR1MgICAgICAgICAgICAgIDMyNzc4CiAjZGVmaW5l
IElEQ19TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgLTEKIAogLy8gTmV4dCBkZWZhdWx0IHZh
bHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vCisvLyAKICNpZmRlZiBBUFNUVURJT19JTlZPS0VECiAj
aWZuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKICNkZWZpbmUgX0FQU19OT19NRkMgICAg
ICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAg
ICAgMTc5CisjZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTgwCiAjZGVm
aW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3NzkKLSNkZWZpbmUgX0FQU19O
RVhUX0NPTlRST0xfVkFMVUUgICAgICAgICAxMDYyCisjZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9M
X1ZBTFVFICAgICAgICAgMTA2MwogI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAg
ICAgIDExMAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9XZWJLaXRCcm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRC
cm93c2VyV2luZG93LmNwcAppbmRleCBhYTUyYWUzZmY3ODU0MDU5MWMzMDUwMDIyOWUyYmVhMjRh
MDUzNzZkLi40MmM5YTBlZTQ2ZTgwNjkzMzRlMzBiZjczMzcyOWM0YmZmMTlkZGM1IDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5jcHAKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwCkBAIC0yODYsMTkg
KzI4Niw0OCBAQCB2b2lkIFdlYktpdEJyb3dzZXJXaW5kb3c6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdQogICAgIGF1dG8mIHRoaXNXaW5kb3cg
PSB0b1dlYktpdEJyb3dzZXJXaW5kb3coY2xpZW50SW5mbyk7CiAgICAgYXV0byBwcm90ZWN0aW9u
U3BhY2UgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxs
ZW5nZSk7CiAgICAgYXV0byBkZWNpc2lvbkxpc3RlbmVyID0gV0tBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoY2hhbGxlbmdlKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiByZWFsbShXS1Byb3RlY3Rpb25TcGFjZUNvcHlSZWFsbShwcm90ZWN0aW9uU3Bh
Y2UpKTsKLSAgICBpZiAoYXV0byBjcmVkZW50aWFsID0gYXNrQ3JlZGVudGlhbCh0aGlzV2luZG93
Lmh3bmQoKSwgY3JlYXRlU3RyaW5nKHJlYWxtLmdldCgpKSkpIHsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gY3JlYXRlV0tTdHJpbmcoY3JlZGVudGlhbC0+dXNl
cm5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFzc3dvcmQgPSBjcmVh
dGVXS1N0cmluZyhjcmVkZW50aWFsLT5wYXNzd29yZCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
Q3JlZGVudGlhbFJlZj4gd2tDcmVkZW50aWFsKEFkb3B0V0ssIFdLQ3JlZGVudGlhbENyZWF0ZSh1
c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZv
clNlc3Npb24pKTsKLSAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VD
cmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIHdrQ3JlZGVudGlhbC5nZXQoKSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3Bh
Y2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOworCisgICAgaWYgKGF1
dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAgIGlmICh0aGlzV2lu
ZG93LmNhblRydXN0U2VydmVyQ2VydGlmaWNhdGUocHJvdGVjdGlvblNwYWNlKSkgeworICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gY3JlYXRlV0tTdHJpbmco
ImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKTsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwYXNzd29yZCA9IGNyZWF0ZVdLU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLQ3JlZGVudGlhbFJlZj4gd2tDcmVkZW50aWFsKEFkb3B0V0ssIFdLQ3JlZGVudGlhbENy
ZWF0ZSh1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0
ZW5jZUZvclNlc3Npb24pKTsKKyAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxp
c3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCB3a0NyZWRlbnRpYWwuZ2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlYWxtKFdLUHJvdGVjdGlvblNwYWNlQ29weVJlYWxt
KHByb3RlY3Rpb25TcGFjZSkpOworCisgICAgICAgIGlmIChhdXRvIGNyZWRlbnRpYWwgPSBhc2tD
cmVkZW50aWFsKHRoaXNXaW5kb3cuaHduZCgpLCBjcmVhdGVTdHJpbmcocmVhbG0uZ2V0KCkpKSkg
eworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gY3JlYXRl
V0tTdHJpbmcoY3JlZGVudGlhbC0+dXNlcm5hbWUpOworICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBhc3N3b3JkID0gY3JlYXRlV0tTdHJpbmcoY3JlZGVudGlhbC0+cGFzc3dv
cmQpOworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFsUmVmPiB3a0NyZWRlbnRp
YWwoQWRvcHRXSywgV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5n
ZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgICAgICAgICAg
V0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlz
dGVuZXIsIHdrQ3JlZGVudGlhbC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICB9CiAKICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRl
bnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgbnVsbHB0cik7CiB9CiAKK2Jvb2wgV2ViS2l0QnJvd3Nl
cldpbmRvdzo6Y2FuVHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZShXS1Byb3RlY3Rpb25TcGFjZVJlZiBw
cm90ZWN0aW9uU3BhY2UpCit7CisgICAgYXV0byBob3N0ID0gY3JlYXRlU3RyaW5nKGFkb3B0V0so
V0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAg
YXV0byBwZW0gPSBjcmVhdGVQRU1TdHJpbmcocHJvdGVjdGlvblNwYWNlKTsKKworICAgIGF1dG8g
aXQgPSBtX2FjY2VwdGVkU2VydmVyVHJ1c3RDZXJ0cy5maW5kKGhvc3QpOworICAgIGlmIChpdCAh
PSBtX2FjY2VwdGVkU2VydmVyVHJ1c3RDZXJ0cy5lbmQoKSAmJiBpdC0+c2Vjb25kID09IHBlbSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYXNrU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KGh3bmQoKSwgcGVtKSkgeworICAgICAgICBtX2FjY2VwdGVkU2VydmVyVHJ1c3RDZXJ0cy5lbXBs
YWNlKGhvc3QsIHBlbSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwogV0tQYWdlUmVmIFdlYktpdEJyb3dzZXJXaW5kb3c6OmNyZWF0ZU5ld1Bh
Z2UoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwg
V0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb24sIFdLV2luZG93RmVhdHVyZXNS
ZWYgd2luZG93RmVhdHVyZXMsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCiB7CiAgICAgYXV0byYg
bmV3V2luZG93ID0gTWFpbldpbmRvdzo6Y3JlYXRlKCkubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93LmgKaW5kZXggNDIzYzI3ZTdhMGI1YmNlOWEw
NjkwN2E3NzAzMGNlNzZkMzQ0NTA2NS4uYjc5Yjg0NTMwYmI4MDNlN2EzZWM5NmFiZmNkNjQ1MGZi
OTg5NmQyMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJX
aW5kb3cuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29tbW9uLmgiCiAjaW5jbHVkZSA8V2ViS2l0
L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdDJfQy5oPgorI2luY2x1ZGUg
PHVub3JkZXJlZF9tYXA+CiAKIGNsYXNzIFdlYktpdEJyb3dzZXJXaW5kb3cgOiBwdWJsaWMgQnJv
d3NlcldpbmRvdyB7CiBwdWJsaWM6CkBAIC02MSw2ICs2Miw4IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHVwZGF0ZVByb3h5U2V0dGluZ3MoKTsKIAorICAgIGJvb2wgY2FuVHJ1c3RTZXJ2ZXJDZXJ0
aWZpY2F0ZShXS1Byb3RlY3Rpb25TcGFjZVJlZik7CisKICAgICBzdGF0aWMgdm9pZCBkaWRGaW5p
c2hOYXZpZ2F0aW9uKFdLUGFnZVJlZiwgV0tOYXZpZ2F0aW9uUmVmLCBXS1R5cGVSZWYsIGNvbnN0
IHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDb21taXROYXZpZ2F0aW9uKFdLUGFnZVJlZiwg
V0tOYXZpZ2F0aW9uUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmLCBXS0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUmVmLCBjb25zdCB2b2lkKik7CkBAIC03MCw0ICs3Myw1IEBAIHByaXZh
dGU6CiAgICAgSFdORCBtX2hNYWluV25kIHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV91cmxCYXJX
bmQgeyBudWxscHRyIH07CiAgICAgUHJveHlTZXR0aW5ncyBtX3Byb3h5IHsgfTsKKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjp3c3RyaW5nLCBzdGQ6OndzdHJpbmc+IG1fYWNjZXB0ZWRTZXJ2
ZXJUcnVzdENlcnRzOwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2YWZjNjA5MTY0NGQxYzM0ZmJjNjhlZjIxZDVlNDUx
YjI5NzE3Yzk2Li5iMDFjNjRhZTFlZmVmNjZlYmEyNDRjN2M5Njc2YmI2YTQ0ZjdhODc2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDMtMjggIFRha2FzaGkgS29tb3JpICA8VGFrYXNoaS5L
b21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBTZXJ2ZXIgVHJ1c3QgRXZhbHVh
dGlvbiBTdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkxNjQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5LTAzLTI3ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVbnJl
dmlld2VkIHRlc3QgZ2FyZGVuaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDRhZjcwYWY0ODU1OGZlMDAyZGQ1YjE0Yjk3
YWY1Nzc4YjA3ODRjYWMuLjkyN2MzMTdkM2MyYzhmMjA1YTIxYjhmMmJjNDBlNjMyNTY5NjUzOWIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0
YXRpb25zCkBAIC0yMCw1ICsyMCwxMCBAQCBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nvb2tpZXMvdGhp
cmQtcGFydHktY29va2llLWJsb2NraW5nLXJlZGlyZWN0Lmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvc2VjdXJpdHkvY29va2llcy90aGlyZC1wYXJ0eS1jb29raWUtYmxvY2tpbmctdXNlci1hY3Rp
b24uaHRtbCBbIFNraXAgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9jb29raWVzL3RoaXJkLXBhcnR5
LWNvb2tpZS1ibG9ja2luZy14c2x0LnhtbCBbIFNraXAgXQogCisjIFNlcnZlciB0cnVzdCBldmFs
dWF0aW9uIG9ubHkgc3VwcG9ydGVkIGluIFdLMi4KK2h0dHAvdGVzdHMvc3NsL2lmcmFtZS11cGdy
YWRlLmh0dHBzLmh0bWwgWyBTa2lwIF0KK2h0dHAvdGVzdHMvc3NsL21peGVkQ29udGVudC9pbnNl
Y3VyZS13ZWJzb2NrZXQuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9zc2wvdXBncmFkZS1v
cmlnaW4tdXNhZ2UuaHRtbCBbIEZhaWx1cmUgXQorCiAjIFRoZXJlIGlzIG5vdCBOZXR3b3JrUHJv
Y2VzcyBpbiBXSzEsIHNvIGl0IGNhbid0IGNyYXNoLgogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9uZXR3b3JrLXByb2Nlc3MtY3Jhc2gtZXJyb3IuaHRtbCBbIFNraXAgXQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZmQwMDk4
YTg2MmFkYTkyNjc1MDJlZDA4NjI0OGM4NzVlNjQyNmFlNy4uZDUwYzgyMWQ4YjI5Yzc3NTQxMmU4
OWMwMDNiOWEwZjE4NTNhMTFjMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
Y2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zCkBAIC05NDksMTAgKzk0OSw2IEBAIGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29va2llcy90aGlyZC1wYXJ0eS1jb29raWUtYmxvY2tpbmctcmVkaXJlY3QuaHRtbCBbIFBh
c3MgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9jb29raWVzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9j
a2luZy11c2VyLWFjdGlvbi5odG1sIFsgUGFzcyBdCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nvb2tp
ZXMvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLXhzbHQueG1sIFsgUGFzcyBdCiAKLWh0dHAv
dGVzdHMvc3NsL2lmcmFtZS11cGdyYWRlLmh0dHBzLmh0bWwgWyBTa2lwIF0KLWh0dHAvdGVzdHMv
c3NsL21peGVkQ29udGVudC9pbnNlY3VyZS13ZWJzb2NrZXQuaHRtbCBbIEZhaWx1cmUgXQotaHR0
cC90ZXN0cy9zc2wvdXBncmFkZS1vcmlnaW4tdXNhZ2UuaHRtbCBbIEZhaWx1cmUgXQotCiBodHRw
L3Rlc3RzL3NzbC9tZWRpYS1zdHJlYW0gWyBTa2lwIF0KIAogWyBEZWJ1ZyBdIGh0dHAvdGVzdHMv
c3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbCBbIFNr
aXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366258</attachid>
            <date>2019-03-29 00:37:27 -0700</date>
            <delta_ts>2019-03-29 12:03:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191646-20190329163421.patch</filename>
            <type>text/plain</type>
            <size>28609</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE5MGI4ODljMWEzYTAy
NzlhNmNhNjUxNTBjNmE1ZjE3ZjRhNTAwYy4uMmRiOTk2NmI2OTU0ZWFiMTA3MjlkNjgyZTRjMjg2
MzdiNzIwYjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE5LTAzLTI5ICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBB
ZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3NzbC9pZnJhbWUt
dXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NzbC9taXhlZENv
bnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMv
c3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3Bh
Y2VGb3JQYXNzd29yZEJhc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGb3JTZXJ2ZXJUcnVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVz
dDo6ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbik6CisKIDIwMTktMDMtMjcgIEp1c3RpbiBG
YW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViIEdQVV0gU3RhbmRhcmRp
emUgV2ViIEdQVSBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjcmVhdGlvbiBsb2dpYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCAwMTg3OGU4YWRlYjU2MzZlMTI2YTY3ZWVmNzEwNDNiNjk3OTZlN2Y4Li43Mjdi
MGViZGRiZTkwMDg2NGZjYjFiNDI0MGQyYWE4MDE0ZTZlYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDE5LTAzLTI5ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnku
Y29tPgorCisgICAgICAgIFtDdXJsXSBBZGQgU2VydmVyIFRydXN0IEV2YWx1YXRpb24gU3VwcG9y
dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rz
OiBodHRwL3Rlc3RzL3NzbC9pZnJhbWUtdXBncmFkZS5odHRwcy5odG1sCisgICAgICAgICAgICAg
ICBodHRwL3Rlc3RzL3NzbC9taXhlZENvbnRlbnQvaW5zZWN1cmUtd2Vic29ja2V0Lmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMvc3NsL3VwZ3JhZGUtb3JpZ2luLXVzYWdlLmh0bWwKKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0N1cmw6OmN1cmxEaWRGYWlsV2l0aEVycm9y
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6dHJ5U2VydmVyVHJ1c3RF
dmFsdWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFy
dFdpdGhDcmVkZW50aWFsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtE
YXRhVGFza0N1cmwuaDoKKwogMjAxOS0wMy0yNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgW0FSS2l0XSBCbGFjayB2aWV3IHdoZW4gb3BlbmluZyBhIDNEIG1vZGVs
IHVzZHogZmlsZSBpbiBuZXcgdGFiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4IDBj
MWMwMzFjYThjOTQxYmM5NGQ0MmZiMzU3MjM3NGI2ZGY4NzZlMDcuLmM2MGYxYjQwZTJiMTM0MjEx
MTJmNTgwZmEwM2Q1MTBjYWY0Y2Q4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBA
IC00NSwxMSArNDUsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IEN1cmxSZXNwb25zZSYsIHVuc2lnbmVkLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgQXV0aGVudGljYXRpb25DbGllbnQqID0gbnVsbHB0cik7CisgICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgVVJMJiwgY29uc3QgQ2VydGlmaWNhdGVJbmZvJiwgY29uc3QgUmVz
b3VyY2VFcnJvciYsIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiA9IG51bGxwdHIpOworCiAgICAgQXV0
aGVudGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIFByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGUgcHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkoY29uc3Qg
VVJMJiwgYm9vbCBpc0ZvclByb3h5KTsKLSAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNw
YWNlRnJvbUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgUHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZUZvclBhc3N3b3JkQmFzZWQo
Y29uc3QgQ3VybFJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIFByb3Rl
Y3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2VGb3JTZXJ2ZXJUcnVzdChjb25zdCBVUkwmLCBjb25z
dCBDZXJ0aWZpY2F0ZUluZm8mKTsKICAgICBPcHRpb25hbDx1aW50MTZfdD4gZGV0ZXJtaW5lUHJv
eHlQb3J0KGNvbnN0IFVSTCYpOwogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUN1cmxBdXRoKGxvbmcpOwogICAgIFN0cmluZyBw
YXJzZVJlYWxtKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQ3VybC5jcHAKaW5kZXggMmZkY2NkYjNkNTc4ZWYyNTRiMTBhN2U4YjBlYzI4MTc0
YThjYTNlOS4uNDEwYTI3NmY0ZTA2Mzk3NTZjZTRjMGMzZjNjZjMwNWM1NjM2MDQyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAKQEAgLTM1LDcgKzM1LDEzIEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zZSwgdW5zaWduZWQg
cHJldmlvdXNGYWlsdXJlQ291bnQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBB
dXRoZW50aWNhdGlvbkNsaWVudCogY2xpZW50KQotICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VCYXNlKHByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUoY3VybFJlc3BvbnNlLCByZXNwb25zZSks
IENyZWRlbnRpYWwoKSwgcHJldmlvdXNGYWlsdXJlQ291bnQsIHJlc3BvbnNlLCBSZXNvdXJjZUVy
cm9yKCkpCisgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UocHJvdGVjdGlvblNwYWNl
Rm9yUGFzc3dvcmRCYXNlZChjdXJsUmVzcG9uc2UsIHJlc3BvbnNlKSwgQ3JlZGVudGlhbCgpLCBw
cmV2aW91c0ZhaWx1cmVDb3VudCwgcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSkKKyAgICAsIG1f
YXV0aGVudGljYXRpb25DbGllbnQoY2xpZW50KQoreworfQorCitBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJj
ZUVycm9yLCBBdXRoZW50aWNhdGlvbkNsaWVudCogY2xpZW50KQorICAgIDogQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VCYXNlKHByb3RlY3Rpb25TcGFjZUZvclNlcnZlclRydXN0KHVybCwgY2VydGlm
aWNhdGVJbmZvKSwgQ3JlZGVudGlhbCgpLCAwLCBSZXNvdXJjZVJlc3BvbnNlKCksIHJlc291cmNl
RXJyb3IpCiAgICAgLCBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50KGNsaWVudCkKIHsKIH0KQEAgLTUx
LDcgKzU3LDcgQEAgUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTo6cHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb20KICAgICByZXR1cm4gaXNGb3JQcm94
eSA/IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCA6IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7
CiB9CiAKLVByb3RlY3Rpb25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlv
blNwYWNlRnJvbUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitQcm90ZWN0aW9uU3BhY2UgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZUZvclBhc3N3b3JkQmFzZWQoY29uc3QgQ3VybFJl
c3BvbnNlJiBjdXJsUmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewogICAgIGlmICghcmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSAmJiAhcmVzcG9uc2UuaXNQcm94
eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFj
ZSgpOwpAQCAtNjIsNyArNjgsMTYgQEAgUHJvdGVjdGlvblNwYWNlIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGcm9tSGFuZGxlKGNvbnN0IEN1cmxSZXMKICAgICBhdXRv
IHNlcnZlclR5cGUgPSBwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSSh1cmwsIGlzUHJv
eHlBdXRoKTsKICAgICBhdXRvIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gYXV0aGVudGljYXRpb25T
Y2hlbWVGcm9tQ3VybEF1dGgoaXNQcm94eUF1dGggPyBjdXJsUmVzcG9uc2UuYXZhaWxhYmxlUHJv
eHlBdXRoIDogY3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoKTsKIAotICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBzdGF0aWNfY2FzdDxpbnQ+KHBv
cnQgPyAqcG9ydCA6IDApLCBzZXJ2ZXJUeXBlLCBwYXJzZVJlYWxtKHJlc3BvbnNlKSwgYXV0aGVu
dGljYXRpb25TY2hlbWUpOworICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50
b1N0cmluZygpLCBzdGF0aWNfY2FzdDxpbnQ+KHBvcnQudmFsdWVPcigwKSksIHNlcnZlclR5cGUs
IHBhcnNlUmVhbG0ocmVzcG9uc2UpLCBhdXRoZW50aWNhdGlvblNjaGVtZSk7Cit9CisKK1Byb3Rl
Y3Rpb25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRm9yU2Vy
dmVyVHJ1c3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQoreworICAgIGF1dG8gcG9ydCA9IGRldGVybWluZVByb3h5UG9ydCh1cmwpOworICAg
IGF1dG8gc2VydmVyVHlwZSA9IHByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKHVybCwg
ZmFsc2UpOworICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZDsKKworICAg
IHJldHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHBvcnQudmFsdWVPcigwKSksIHNlcnZlclR5cGUsIFN0cmluZygpLCBhdXRoZW50aWNh
dGlvblNjaGVtZSwgY2VydGlmaWNhdGVJbmZvKTsKIH0KIAogT3B0aW9uYWw8dWludDE2X3Q+IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpkZXRlcm1pbmVQcm94eVBvcnQoY29uc3QgVVJMJiB1cmwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmNwcAppbmRleCBjNWM0NTM1ZTg3ZWIxNzg4Yjg0ODRiNDc0ZjVlZDc5YjY0NzI1ZGU1Li44
MjdhMmMzYWNjY2QzZGM0YmViMGE4YTc2MGE0NTMxNDNlOTg4YmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTMy
NCw2ICszMjQsMTIgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVTU0xGb3JIb3N0KGNvbnN0IFN0
cmluZyYgaG9zdCkKICAgICAgICAgc2V0Q0FDZXJ0UGF0aChwYXRoLT51dGY4KCkuZGF0YSgpKTsK
IH0KIAordm9pZCBDdXJsSGFuZGxlOjpkaXNhYmxlU2VydmVyVHJ1c3RFdmFsdWF0aW9uKCkKK3sK
KyAgICBzZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOwor
ICAgIHNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdDo6TG9vc2VOYW1lQ2hl
Y2spOworfQorCiBDVVJMY29kZSBDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3Ns
Q3R4KQogewogICAgIGlmICghc3NsQ3R4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCBjNzlkZWMxZmFkZjdhODNkOTVjZTM2
OGJlNjcxMzlhZWEwMTVhMmNmLi44MGI4OTE1OGYzOWE0M2NhY2I1NzY4ZGU5MjljN2NjN2UxMmNk
MzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuaApAQCAtMjUzLDYgKzI1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SHR0
cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBsb25nIGF1dGhUeXBl
ID0gQ1VSTEFVVEhfQU5ZKTsKIAorICAgIHZvaWQgZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlv
bigpOwogICAgIHZvaWQgc2V0Q0FDZXJ0UGF0aChjb25zdCBjaGFyKik7CiAgICAgdm9pZCBzZXRT
c2xWZXJpZnlQZWVyKFZlcmlmeVBlZXIpOwogICAgIHZvaWQgc2V0U3NsVmVyaWZ5SG9zdChWZXJp
ZnlIb3N0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlcXVlc3QuY3BwCmluZGV4IGZmZTIzMzEzZTlhOWNiNGM5ZjYwNDYyM2IwNTc1NmIxMzdm
NGZjMWEuLjNhYWY4OTExODBiYWYzMGIwODY2MmNhNzAxMjFkMWI1ZTkxNzIwNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNw
cApAQCAtMjEzLDYgKzIxMyw5IEBAIENVUkwqIEN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVyKCkK
ICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVzZXJQYXNzKG1fdXNlciwgbV9wYXNz
d29yZCwgbV9hdXRoVHlwZSk7CiAgICAgfQogCisgICAgaWYgKG1fc2hvdWxkRGlzYWJsZVNlcnZl
clRydXN0RXZhbHVhdGlvbikKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5kaXNhYmxlU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKCk7CisKICAgICBtX2N1cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVu
Y3Rpb24oZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUt
PnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbihkaWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVl
c3QuaAppbmRleCA1M2FhMGI1NWY4YzBjNjk4ZmFlYjRmMWFlM2RkNjlhMWQ3MzMyNDEzLi44YWM0
OGU5NGQ4NDFmNjc0MzlkZjNjOTkzNGU4YTRmNzQ0M2IzZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIkN1cmxNdWx0aXBhcnRIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJD
dXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oIgogI2luY2x1ZGUgIkN1cmxSZXNwb25zZS5oIgot
I2luY2x1ZGUgIkN1cmxTU0xWZXJpZmllci5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkTWV0cmlj
cy5oIgogI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgpAQCAtNzUsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2xp
ZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBdXRoZW50aWNhdGlvblNjaGVtZShQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGRpc2FibGVTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSB7IG1fc2hvdWxkRGlzYWJsZVNlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHRydWU7IH0KICAgICB2b2lkIHNldFN0YXJ0VGltZShjb25zdCBNb25v
dG9uaWNUaW1lJiBzdGFydFRpbWUpIHsgbV9yZXF1ZXN0U3RhcnRUaW1lID0gc3RhcnRUaW1lOyB9
CiAKICAgICB2b2lkIHN0YXJ0KCk7CkBAIC0xNzMsNiArMTczLDcgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV91c2VyOwogICAgIFN0cmluZyBtX3Bhc3N3b3JkOwogICAgIHVuc2lnbmVkIGxvbmcg
bV9hdXRoVHlwZSB7IENVUkxBVVRIX0FOWSB9OworICAgIGJvb2wgbV9zaG91bGREaXNhYmxlU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkU3VzcGVuZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2VuYWJsZU11bHRpcGFydCB7IGZhbHNlIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tD
dXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRh
c2tDdXJsLmNwcAppbmRleCA3NzU1ZWYzY2Y1ZjgxY2I4ZGVhOTM3MTdmZTFjNjhmOTQzNWFkZjVh
Li4zNmE2YjM5MjZjMWIyYTg2OGQ4MDdmMTQ3MzhlZDk2OGRiZDJjYzZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1
cmwuY3BwCkBAIC0xODksMTEgKzE4OSwxNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0N1cmw6OmN1
cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKICAgICBtX2NsaWVudC0+ZGlkQ29t
cGxldGVXaXRoRXJyb3IoeyB9LCBtX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJp
Y3MoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrQ3VybDo6Y3VybERpZEZhaWxXaXRoRXJy
b3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQordm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKICAgICBpZiAo
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAocmVzb3VyY2VFcnJvci5pc1NTTENlcnRWZXJpZmljYXRpb25FcnJvcigpKSB7CisgICAg
ICAgIHRyeVNlcnZlclRydXN0RXZhbHVhdGlvbihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShyZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LmNlcnRpZmljYXRlSW5mbygpLCBy
ZXNvdXJjZUVycm9yKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBtX2NsaWVudC0+
ZGlkQ29tcGxldGVXaXRoRXJyb3IocmVzb3VyY2VFcnJvcik7CiB9CiAKQEAgLTM5OCw2ICs0MDMs
MjMgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjp0cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmcKICAgICB9KTsKIH0KIAordm9pZCBOZXR3b3Jr
RGF0YVRhc2tDdXJsOjp0cnlTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmJiBjaGFsbGVuZ2UpCit7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2Uo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY2hhbGxlbmdlXShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKSB7CisgICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGxldGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChkaXNwb3NpdGlv
biA9PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsICYm
ICFjcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byByZXF1ZXN0Q3JlZGVu
dGlhbCA9IG1fY3VybFJlcXVlc3QgPyBDcmVkZW50aWFsKG1fY3VybFJlcXVlc3QtPnVzZXIoKSwg
bV9jdXJsUmVxdWVzdC0+cGFzc3dvcmQoKSwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkgOiBD
cmVkZW50aWFsKCk7CisgICAgICAgICAgICByZXN0YXJ0V2l0aENyZWRlbnRpYWwoY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCByZXF1ZXN0Q3JlZGVudGlhbCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgbV9jbGllbnQtPmRp
ZENvbXBsZXRlV2l0aEVycm9yKGNoYWxsZW5nZS5lcnJvcigpKTsKKyAgICB9KTsKK30KKwogdm9p
ZCBOZXR3b3JrRGF0YVRhc2tDdXJsOjpyZXN0YXJ0V2l0aENyZWRlbnRpYWwoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
CiB7CiAgICAgQVNTRVJUKG1fY3VybFJlcXVlc3QpOwpAQCAtNDA4LDYgKzQzMCw4IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrQ3VybDo6cmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYgcHJvdGVjdGlvCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0
KFdURk1vdmUocHJldmlvdXNSZXF1ZXN0KSwgUmVxdWVzdFN0YXR1czo6UmV1c2VkUmVxdWVzdCk7
CiAgICAgbV9jdXJsUmVxdWVzdC0+c2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNw
YWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpOwogICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQ
YXNzKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIGlmIChw
cm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkKKyAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+ZGlzYWJsZVNlcnZlclRydXN0RXZhbHVhdGlvbigpOwogICAgIG1f
Y3VybFJlcXVlc3QtPnNldFN0YXJ0VGltZShtX3N0YXJ0VGltZSk7CiAgICAgbV9jdXJsUmVxdWVz
dC0+c3RhcnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtEYXRhVGFza0N1cmwuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y3VybC9OZXR3b3JrRGF0YVRhc2tDdXJsLmgKaW5kZXggYTMyZjYxNjhjYTc0MjQ2ZTU2NTIyNjFm
MjBmODc4Y2FhNDViMmNhYi4uM2MzNTc2YjRiNmZkZDNiZjU1MmIwYjgyNDA1YjFkYTNiYzExNTQ0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtE
YXRhVGFza0N1cmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya0RhdGFUYXNrQ3VybC5oCkBAIC03OCw2ICs3OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0
cnlQcm94eUF1dGhlbnRpY2F0aW9uKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYp
OwogICAgIHZvaWQgcmVzdGFydFdpdGhDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSYsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKIAorICAgIHZvaWQgdHJ5U2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOwor
CiAgICAgdm9pZCBhcHBlbmRDb29raWVIZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgdm9pZCBoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OkN1cmxSZXNwb25zZSYpOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTM4MDM0YTQyMDFhN2NkMDY4Nzk3
N2U2YWMxZTBlMmY1ZTEzMDZkMS4uYjFjZGJkOGFiMzZmZjM1NjExNWNlYTUxNDBiZDczOGM3MWJh
OWQ5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDE5LTAzLTI5ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29t
b3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBBZGQgU2VydmVyIFRydXN0IEV2YWx1YXRp
b24gU3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTY0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudGVkIE1pbmlCcm93c2VyIFVJIGZvciBhc2tpbmcgaWYgdXNlciB0cnVzdHMg
dGhlIHNlcnZlci4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwOgorICAg
ICAgICAoYXNrU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAgICAgICAgKHJlcGxhY2VTdHJpbmcp
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uaDoKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vTWluaUJyb3dzZXJMaWIucmM6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01p
bmlCcm93c2VyTGliUmVzb3VyY2UuaDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV2ViS2l0
QnJvd3NlcldpbmRvdy5jcHA6CisgICAgICAgIChjcmVhdGVQRU1TdHJpbmcpOgorICAgICAgICAo
V2ViS2l0QnJvd3NlcldpbmRvdzo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToK
KyAgICAgICAgKFdlYktpdEJyb3dzZXJXaW5kb3c6OmNhblRydXN0U2VydmVyQ2VydGlmaWNhdGUp
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93Lmg6CisKIDIw
MTktMDMtMjcgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIyNDI2ODYpOiBwYWNrYWdlLXJvb3QgY3JlYXRlcyByb290cyB3aXRoIGJyb2tlbiBz
eW1saW5rcyBpbiBXZWJLaXQuZnJhbWV3b3JrL1hQQ1NlcnZpY2VzLwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcAppbmRleCAwZTBmNDY0NmM3YzQyYWEzMjg5ZjQyZjM3NGUyNDIyNTA4ODJmZTUwLi5h
ODk3M2Y0MTQwZjQ2ZjAwNzEwZDdiMjA0ODgzMmJhOTJjZTc0Mjk3IDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
Q29tbW9uLmNwcApAQCAtMjMxLDYgKzIzMSwzNCBAQCBPcHRpb25hbDxDcmVkZW50aWFsPiBhc2tD
cmVkZW50aWFsKEhXTkQgaHduZCwgY29uc3Qgc3RkOjp3c3RyaW5nJiByZWFsbSkKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCitib29sIGFza1NlcnZlclRydXN0RXZhbHVhdGlvbihIV05E
IGh3bmQsIGNvbnN0IHN0ZDo6d3N0cmluZyYgcGVtcykKK3sKKyAgICBjbGFzcyBTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25EaWFsb2cgOiBwdWJsaWMgRGlhbG9nIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFNlcnZlclRydXN0RXZhbHVhdGlvbkRpYWxvZyhjb25zdCBzdGQ6OndzdHJpbmcmIHBlbXMpCisg
ICAgICAgICAgICA6IG1fcGVtcyB7IHBlbXMgfQorICAgICAgICB7CisgICAgICAgICAgICBTZW5k
TWVzc2FnZShHZXREbGdJdGVtKHRoaXMtPmhEbGcoKSwgSURDX1NFUlZFUl9UUlVTVF9URVhUKSwg
V01fU0VURk9OVCwgKFdQQVJBTSlHZXRTdG9ja09iamVjdChBTlNJX0ZJWEVEX0ZPTlQpLCBUUlVF
KTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBzdGQ6OndzdHJpbmcgbV9w
ZW1zOworCisgICAgICAgIHZvaWQgc2V0dXAoKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRU
ZXh0KElEQ19TRVJWRVJfVFJVU1RfVEVYVCwgbV9wZW1zKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgb2soKSBmaW5hbAorICAgICAgICB7CisKKyAgICAgICAgfQorICAgIH07CisKKyAgICBT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25EaWFsb2cgZGlhbG9nIHsgcGVtcyB9OworICAgIHJldHVybiBk
aWFsb2cucnVuKGhJbnN0LCBod25kLCBJRERfU0VSVkVSX1RSVVNUKTsKK30KKwogQ29tbWFuZExp
bmVPcHRpb25zIHBhcnNlQ29tbWFuZExpbmUoKQogewogICAgIENvbW1hbmRMaW5lT3B0aW9ucyBv
cHRpb25zOwpAQCAtMjU2LDMgKzI4NCwxNyBAQCBDb21tYW5kTGluZU9wdGlvbnMgcGFyc2VDb21t
YW5kTGluZSgpCiAKICAgICByZXR1cm4gb3B0aW9uczsKIH0KKworc3RkOjp3c3RyaW5nIHJlcGxh
Y2VTdHJpbmcoc3RkOjp3c3RyaW5nIHNyYywgY29uc3Qgc3RkOjp3c3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3Qgc3RkOjp3c3RyaW5nJiBuZXdWYWx1ZSkKK3sKKyAgICBpZiAoc3JjLmVtcHR5KCkgfHwg
b2xkVmFsdWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNyYzsKKworICAgIHNpemVfdCBwb3Mg
PSAwOworICAgIHdoaWxlICgocG9zID0gc3JjLmZpbmQob2xkVmFsdWUsIHBvcykpICE9IHNyYy5u
cG9zKSB7CisgICAgICAgIHNyYy5yZXBsYWNlKHBvcywgb2xkVmFsdWUubGVuZ3RoKCksIG5ld1Zh
bHVlKTsKKyAgICAgICAgcG9zICs9IG5ld1ZhbHVlLmxlbmd0aCgpOworICAgIH0KKworICAgIHJl
dHVybiBzcmM7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmgg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmgKaW5kZXggYmViYWUzMmM3NmM0MWI1NjNi
NDAwMjg3ODNiMzI5OTI0OWEyNmVlMy4uOGIwMGNlNDUxYjgzZDYwMTNhYzQxYjc3N2E4NzVkNjJk
ZGRlOTE3YiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5oCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaApAQCAtNzAsNiArNzAsOSBAQCB2b2lkIGNy
ZWF0ZUNyYXNoUmVwb3J0KEVYQ0VQVElPTl9QT0lOVEVSUyopOwogT3B0aW9uYWw8Q3JlZGVudGlh
bD4gYXNrQ3JlZGVudGlhbChIV05ELCBjb25zdCBzdGQ6OndzdHJpbmcmIHJlYWxtKTsKIGJvb2wg
YXNrUHJveHlTZXR0aW5ncyhIV05ELCBQcm94eVNldHRpbmdzJik7CiAKK2Jvb2wgYXNrU2VydmVy
VHJ1c3RFdmFsdWF0aW9uKEhXTkQsIGNvbnN0IHN0ZDo6d3N0cmluZyYgcGVtcyk7CitzdGQ6Ondz
dHJpbmcgcmVwbGFjZVN0cmluZyhzdGQ6OndzdHJpbmcgc3JjLCBjb25zdCBzdGQ6OndzdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBzdGQ6OndzdHJpbmcmIG5ld1ZhbHVlKTsKKwogZXh0ZXJuIEhJTlNU
QU5DRSBoSW5zdDsKIGV4dGVybiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9uOwogZXh0ZXJuIFNJWkUg
c193aW5kb3dTaXplOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93
c2VyTGliLnJjIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliLnJjCmluZGV4
IGZkMDM3Y2UwNGYyOTI1NmQ3NWFkNGUyN2ZiZDExYTQwODdmY2U2ZmQuLmY4ODc3MWE2MWY5NDFh
YzBmMjE0NDkyNjkwYWZmZGRjYjBjYTQyMTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9NaW5pQnJvd3NlckxpYi5yYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJy
b3dzZXJMaWIucmMKQEAgLTI4MCw2ICsyODAsMTcgQEAgQkVHSU4KICAgICBMVEVYVCAgICAgICAg
ICAgIkNvbW1hIHNlcGFyYXRlZCBob3N0bmFtZXMuIixJRENfU1RBVElDLDgwLDEwMSwxOTQsOA0K
IEVORA0KIA0KK0lERF9TRVJWRVJfVFJVU1QgRElBTE9HRVggMCwgMCwgMzE5LCAxODQNCitTVFlM
RSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8IERTX0ZJWEVEU1lTIHwgV1NfUE9QVVAgfCBX
U19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KK0NBUFRJT04gIlNlcnZlciBUcnVzdCBFdmFsdWF0aW9u
IFJlcXVlc3QiDQorRk9OVCA4LCAiTVMgU2hlbGwgRGxnIiwgNDAwLCAwLCAweDENCitCRUdJTg0K
KyAgICBERUZQVVNIQlVUVE9OICAgIlllcyIsSURPSywxOTcsMTYzLDUwLDE0DQorICAgIFBVU0hC
VVRUT04gICAgICAiTm8iLElEQ0FOQ0VMLDI2MiwxNjMsNTAsMTQNCisgICAgTFRFWFQgICAgICAg
ICAgICJDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiIsSURDX1NUQVRJQyw3LDcsMjk0LDE3DQorICAg
IEVESVRURVhUICAgICAgICBJRENfU0VSVkVSX1RSVVNUX1RFWFQsNywyNCwzMDUsMTMwLEVTX01V
TFRJTElORSB8IEVTX1JFQURPTkxZIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBOT1QgV1Nf
VEFCU1RPUA0KK0VORA0KKw0KIA0KICNpZmRlZiBBUFNUVURJT19JTlZPS0VEDQogLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8NCkBAIC0zNTcsNiArMzY4LDE0IEBAIEJFR0lOCiAgICAgICAgIFRPUE1BUkdJ
TiwgNw0KICAgICAgICAgQk9UVE9NTUFSR0lOLCAxNjkNCiAgICAgRU5EDQorDQorICAgIElERF9T
RVJWRVJfVFJVU1QsIERJQUxPRw0KKyAgICBCRUdJTg0KKyAgICAgICAgTEVGVE1BUkdJTiwgNw0K
KyAgICAgICAgUklHSFRNQVJHSU4sIDMxMg0KKyAgICAgICAgVE9QTUFSR0lOLCA3DQorICAgICAg
ICBCT1RUT01NQVJHSU4sIDE3Nw0KKyAgICBFTkQNCiBFTkQNCiAjZW5kaWYgICAgLy8gQVBTVFVE
SU9fSU5WT0tFRA0KIA0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJv
d3NlckxpYlJlc291cmNlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJMaWJS
ZXNvdXJjZS5oCmluZGV4IDU4OGU4MjI2MzkwYWJjYWU0MWI5YmE5YjgxYTY0M2UxNzMyNzY2YmMu
LjE3OWZhZGE0OGI1NzQ4YWE3N2M5MWRiNzc2MDBhYTA5MzI2MThmZGEgMTAwNzU1Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlckxpYlJlc291cmNlLmgKKysrIGIvVG9vbHMv
TWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyTGliUmVzb3VyY2UuaApAQCAtNTcsNiArNTcsNyBA
QAogI2RlZmluZSBJRERfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgIDE3NgogI2RlZmluZSBJ
RE1fREVCVUdfSU5GT19MQVlFUiAgICAgICAgICAgIDE3NwogI2RlZmluZSBJRERfUFJPWFkgICAg
ICAgICAgICAgICAgICAgICAgIDE3OAorI2RlZmluZSBJRERfU0VSVkVSX1RSVVNUICAgICAgICAg
ICAgICAgIDE3OQogI2RlZmluZSBJRENfRU1QVFlfVVJMX0NBQ0hFICAgICAgICAgICAgIDEwMDAK
ICNkZWZpbmUgSURDX1JFVFVSTl9GUkVFX01FTU9SWSAgICAgICAgICAxMDAxCiAjZGVmaW5lIElE
Q19FTVBUWV9XRUJDT1JFX0NBQ0hFICAgICAgICAgMTAwMgpAQCAtMTE4LDE5ICsxMTksMjAgQEAK
ICNkZWZpbmUgSURDX1BST1hZX0NVU1RPTSAgICAgICAgICAgICAgICAxMDU5CiAjZGVmaW5lIElE
Q19QUk9YWV9FWENMVURFICAgICAgICAgICAgICAgMTA2MAogI2RlZmluZSBJRENfUFJPWFlfRElT
QUJMRSAgICAgICAgICAgICAgIDEwNjEKKyNkZWZpbmUgSURDX1NFUlZFUl9UUlVTVF9URVhUICAg
ICAgICAgICAxMDYyCiAjZGVmaW5lIElETV9ORVdfV0VCS0lUX1dJTkRPVyAgICAgICAgICAgMzI3
NzYKICNkZWZpbmUgSURNX05FV19XRUJLSVRMRUdBQ1lfV0lORE9XICAgICAzMjc3NwogI2RlZmlu
ZSBJRE1fUFJPWFlfU0VUVElOR1MgICAgICAgICAgICAgIDMyNzc4CiAjZGVmaW5lIElEQ19TVEFU
SUMgICAgICAgICAgICAgICAgICAgICAgLTEKIAogLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3Ig
bmV3IG9iamVjdHMKLS8vCisvLyAKICNpZmRlZiBBUFNUVURJT19JTlZPS0VECiAjaWZuZGVmIEFQ
U1RVRElPX1JFQURPTkxZX1NZTUJPTFMKICNkZWZpbmUgX0FQU19OT19NRkMgICAgICAgICAgICAg
ICAgICAgICAxCi0jZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTc5Cisj
ZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTgwCiAjZGVmaW5lIF9BUFNf
TkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3NzkKLSNkZWZpbmUgX0FQU19ORVhUX0NPTlRS
T0xfVkFMVUUgICAgICAgICAxMDYyCisjZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAg
ICAgICAgMTA2MwogI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDExMAog
I2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRC
cm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2lu
ZG93LmNwcAppbmRleCBhYTUyYWUzZmY3ODU0MDU5MWMzMDUwMDIyOWUyYmVhMjRhMDUzNzZkLi4w
ODE5Y2ZhMzlmNmFjOTQ2YjY5OTIzNDcwNTgzZTE4ZDdiYjQzZjRjIDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5jcHAKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwCkBAIC0yOSw5ICsyOSwxMSBAQAog
I2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgPFdlYktpdC9XS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3Rl
bmVyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5oPgogI2luY2x1
ZGUgPFdlYktpdC9XS0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tJbnNwZWN0b3Iu
aD4KICNpbmNsdWRlIDxXZWJLaXQvV0tQcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJL
aXQvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURh
dGFTdG9yZVJlZkN1cmwuaD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTU4LDYgKzYwLDI1IEBA
IHN0ZDo6c3RyaW5nIGNyZWF0ZVVURjhTdHJpbmcoY29uc3Qgd2NoYXJfdCogc3JjLCBzaXplX3Qg
c3JjTGVuZ3RoKQogICAgIHJldHVybiB7IGJ1ZmZlci5kYXRhKCksIGFjdHVhbExlbmd0aCB9Owog
fQogCitzdGQ6OndzdHJpbmcgY3JlYXRlUEVNU3RyaW5nKFdLUHJvdGVjdGlvblNwYWNlUmVmIHBy
b3RlY3Rpb25TcGFjZSkKK3sKKyAgICBhdXRvIGNlcnRpZmljYXRlSW5mbyA9IFdLUHJvdGVjdGlv
blNwYWNlQ29weUNlcnRpZmljYXRlSW5mbyhwcm90ZWN0aW9uU3BhY2UpOworICAgIGF1dG8gY2hh
aW5TaXplID0gV0tDZXJ0aWZpY2F0ZUluZm9HZXRDZXJ0aWZpY2F0ZUNoYWluU2l6ZShjZXJ0aWZp
Y2F0ZUluZm8pOworCisgICAgc3RkOjp3c3RyaW5nIHBlbXM7CisKKyAgICBmb3IgKGF1dG8gaSA9
IDA7IGkgPCBjaGFpblNpemU7IGkrKykgeworICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYWRv
cHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0SW5kZXgoY2VydGlmaWNhdGVJ
bmZvLCBpKSk7CisgICAgICAgIGF1dG8gc2l6ZSA9IFdLRGF0YUdldFNpemUoY2VydGlmaWNhdGUu
Z2V0KCkpOworICAgICAgICBhdXRvIGRhdGEgPSBXS0RhdGFHZXRCeXRlcyhjZXJ0aWZpY2F0ZS5n
ZXQoKSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAg
ICAgICAgICBwZW1zLnB1c2hfYmFjayhkYXRhW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVw
bGFjZVN0cmluZyhwZW1zLCBMIlxuIiwgTCJcclxuIik7Cit9CisKIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBjcmVhdGVXS1N0cmluZyhfYnN0cl90IHN0cikKIHsKICAgICBhdXRvIHV0ZjggPSBj
cmVhdGVVVEY4U3RyaW5nKHN0ciwgc3RyLmxlbmd0aCgpKTsKQEAgLTI4NiwxOSArMzA3LDQ4IEBA
IHZvaWQgV2ViS2l0QnJvd3NlcldpbmRvdzo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1CiAgICAgYXV0byYgdGhpc1dpbmRvdyA9IHRvV2ViS2l0
QnJvd3NlcldpbmRvdyhjbGllbnRJbmZvKTsKICAgICBhdXRvIHByb3RlY3Rpb25TcGFjZSA9IFdL
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VHZXRQcm90ZWN0aW9uU3BhY2UoY2hhbGxlbmdlKTsKICAg
ICBhdXRvIGRlY2lzaW9uTGlzdGVuZXIgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0RGVj
aXNpb25MaXN0ZW5lcihjaGFsbGVuZ2UpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHJlYWxtKFdLUHJvdGVjdGlvblNwYWNlQ29weVJlYWxtKHByb3RlY3Rpb25TcGFjZSkpOwotICAg
IGlmIChhdXRvIGNyZWRlbnRpYWwgPSBhc2tDcmVkZW50aWFsKHRoaXNXaW5kb3cuaHduZCgpLCBj
cmVhdGVTdHJpbmcocmVhbG0uZ2V0KCkpKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXNlcm5hbWUgPSBjcmVhdGVXS1N0cmluZyhjcmVkZW50aWFsLT51c2VybmFtZSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXNzd29yZCA9IGNyZWF0ZVdLU3RyaW5n
KGNyZWRlbnRpYWwtPnBhc3N3b3JkKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFs
UmVmPiB3a0NyZWRlbnRpYWwoQWRvcHRXSywgV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdl
dCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikp
OwotICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwo
ZGVjaXNpb25MaXN0ZW5lciwgd2tDcmVkZW50aWFsLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gYXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhl
bnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisKKyAgICBpZiAoYXV0aGVudGljYXRp
b25TY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJU
cnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgaWYgKHRoaXNXaW5kb3cuY2FuVHJ1
c3RTZXJ2ZXJDZXJ0aWZpY2F0ZShwcm90ZWN0aW9uU3BhY2UpKSB7CisgICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlcm5hbWUgPSBjcmVhdGVXS1N0cmluZygiYWNjZXB0IHNl
cnZlciB0cnVzdCIpOworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhc3N3
b3JkID0gY3JlYXRlV0tTdHJpbmcoIiIpOworICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tDcmVk
ZW50aWFsUmVmPiB3a0NyZWRlbnRpYWwoQWRvcHRXSywgV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJu
YW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vz
c2lvbikpOworICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VD
cmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIHdrQ3JlZGVudGlhbC5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcmVhbG0oV0tQcm90ZWN0aW9uU3BhY2VDb3B5UmVhbG0ocHJvdGVjdGlv
blNwYWNlKSk7CisKKyAgICAgICAgaWYgKGF1dG8gY3JlZGVudGlhbCA9IGFza0NyZWRlbnRpYWwo
dGhpc1dpbmRvdy5od25kKCksIGNyZWF0ZVN0cmluZyhyZWFsbS5nZXQoKSkpKSB7CisgICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlcm5hbWUgPSBjcmVhdGVXS1N0cmluZyhj
cmVkZW50aWFsLT51c2VybmFtZSk7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGFzc3dvcmQgPSBjcmVhdGVXS1N0cmluZyhjcmVkZW50aWFsLT5wYXNzd29yZCk7CisgICAg
ICAgICAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IHdrQ3JlZGVudGlhbChBZG9wdFdL
LCBXS0NyZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tD
cmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgICAgICAgICBXS0F1dGhlbnRp
Y2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgd2tD
cmVkZW50aWFsLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNp
c2lvbkxpc3RlbmVyLCBudWxscHRyKTsKIH0KIAorYm9vbCBXZWJLaXRCcm93c2VyV2luZG93Ojpj
YW5UcnVzdFNlcnZlckNlcnRpZmljYXRlKFdLUHJvdGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25T
cGFjZSkKK3sKKyAgICBhdXRvIGhvc3QgPSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS1Byb3RlY3Rp
b25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIHBlbSA9
IGNyZWF0ZVBFTVN0cmluZyhwcm90ZWN0aW9uU3BhY2UpOworCisgICAgYXV0byBpdCA9IG1fYWNj
ZXB0ZWRTZXJ2ZXJUcnVzdENlcnRzLmZpbmQoaG9zdCk7CisgICAgaWYgKGl0ICE9IG1fYWNjZXB0
ZWRTZXJ2ZXJUcnVzdENlcnRzLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gcGVtKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChhc2tTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oaHduZCgpLCBw
ZW0pKSB7CisgICAgICAgIG1fYWNjZXB0ZWRTZXJ2ZXJUcnVzdENlcnRzLmVtcGxhY2UoaG9zdCwg
cGVtKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBXS1BhZ2VSZWYgV2ViS2l0QnJvd3NlcldpbmRvdzo6Y3JlYXRlTmV3UGFnZShXS1BhZ2VS
ZWYgcGFnZSwgV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBXS05hdmlnYXRp
b25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvbiwgV0tXaW5kb3dGZWF0dXJlc1JlZiB3aW5kb3dG
ZWF0dXJlcywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKIHsKICAgICBhdXRvJiBuZXdXaW5kb3cg
PSBNYWluV2luZG93OjpjcmVhdGUoKS5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dlYktpdEJyb3dzZXJXaW5kb3cuaAppbmRleCA0MjNjMjdlN2EwYjViY2U5YTA2OTA3YTc3MDMw
Y2U3NmQzNDQ1MDY1Li5iNzliODQ1MzBiYjgwM2U3YTNlYzk2YWJmY2Q2NDUwZmI5ODk2ZDIwIDEw
MDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5oCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93LmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDb21tb24uaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Ml9DLmg+CisjaW5jbHVkZSA8dW5vcmRlcmVk
X21hcD4KIAogY2xhc3MgV2ViS2l0QnJvd3NlcldpbmRvdyA6IHB1YmxpYyBCcm93c2VyV2luZG93
IHsKIHB1YmxpYzoKQEAgLTYxLDYgKzYyLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRl
UHJveHlTZXR0aW5ncygpOwogCisgICAgYm9vbCBjYW5UcnVzdFNlcnZlckNlcnRpZmljYXRlKFdL
UHJvdGVjdGlvblNwYWNlUmVmKTsKKwogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaE5hdmlnYXRp
b24oV0tQYWdlUmVmLCBXS05hdmlnYXRpb25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopOwog
ICAgIHN0YXRpYyB2b2lkIGRpZENvbW1pdE5hdmlnYXRpb24oV0tQYWdlUmVmLCBXS05hdmlnYXRp
b25SZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYsIFdLQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VSZWYsIGNvbnN0IHZvaWQqKTsKQEAgLTcwLDQgKzczLDUgQEAgcHJpdmF0ZToKICAgICBI
V05EIG1faE1haW5XbmQgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3VybEJhclduZCB7IG51bGxw
dHIgfTsKICAgICBQcm94eVNldHRpbmdzIG1fcHJveHkgeyB9OworICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OndzdHJpbmcsIHN0ZDo6d3N0cmluZz4gbV9hY2NlcHRlZFNlcnZlclRydXN0Q2Vy
dHM7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDZhZmM2MDkxNjQ0ZDFjMzRmYmM2OGVmMjFkNWU0NTFiMjk3MTdjOTYu
LjE1YWRmNGVlNzYxZDc4ZjU4ZjExNmFmOGZmNmIyNmMyYTJjYTYyMTAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxOS0wMy0yOSAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KKworICAgICAgICBbQ3VybF0gQWRkIFNlcnZlciBUcnVzdCBFdmFsdWF0aW9uIFN1cHBv
cnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE2
NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTktMDMtMjcgIEFsaWNpYSBCb3lhIEdh
cmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVucmV2aWV3ZWQgdGVz
dCBnYXJkZW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdr
MS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggNGFmNzBhZjQ4NTU4ZmUwMDJkZDViMTRiOTdhZjU3NzhiMDc4
NGNhYy4uOTI3YzMxN2QzYzJjOGYyMDVhMjFiOGYyYmM0MGU2MzI1Njk2NTM5YiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTIwLDUgKzIwLDEwIEBAIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29va2llcy90aGlyZC1wYXJ0eS1j
b29raWUtYmxvY2tpbmctcmVkaXJlY3QuaHRtbCBbIFNraXAgXQogaHR0cC90ZXN0cy9zZWN1cml0
eS9jb29raWVzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy11c2VyLWFjdGlvbi5odG1sIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nvb2tpZXMvdGhpcmQtcGFydHktY29va2llLWJs
b2NraW5nLXhzbHQueG1sIFsgU2tpcCBdCiAKKyMgU2VydmVyIHRydXN0IGV2YWx1YXRpb24gb25s
eSBzdXBwb3J0ZWQgaW4gV0syLgoraHR0cC90ZXN0cy9zc2wvaWZyYW1lLXVwZ3JhZGUuaHR0cHMu
aHRtbCBbIFNraXAgXQoraHR0cC90ZXN0cy9zc2wvbWl4ZWRDb250ZW50L2luc2VjdXJlLXdlYnNv
Y2tldC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL3NzbC91cGdyYWRlLW9yaWdpbi11c2Fn
ZS5odG1sIFsgRmFpbHVyZSBdCisKICMgVGhlcmUgaXMgbm90IE5ldHdvcmtQcm9jZXNzIGluIFdL
MSwgc28gaXQgY2FuJ3QgY3Jhc2guCiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL25l
dHdvcmstcHJvY2Vzcy1jcmFzaC1lcnJvci5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBmZDAwOThhODYyYWRhOTI2
NzUwMmVkMDg2MjQ4Yzg3NWU2NDI2YWU3Li5kNTBjODIxZDhiMjljNzc1NDEyZTg5YzAwM2I5YTBm
MTg1M2ExMWMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTk0OSwxMCArOTQ5LDYgQEAgaHR0cC90ZXN0cy9zZWN1cml0eS9jb29raWVz
L3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1yZWRpcmVjdC5odG1sIFsgUGFzcyBdCiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2Nvb2tpZXMvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLXVzZXIt
YWN0aW9uLmh0bWwgWyBQYXNzIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29va2llcy90aGlyZC1w
YXJ0eS1jb29raWUtYmxvY2tpbmcteHNsdC54bWwgWyBQYXNzIF0KIAotaHR0cC90ZXN0cy9zc2wv
aWZyYW1lLXVwZ3JhZGUuaHR0cHMuaHRtbCBbIFNraXAgXQotaHR0cC90ZXN0cy9zc2wvbWl4ZWRD
b250ZW50L2luc2VjdXJlLXdlYnNvY2tldC5odG1sIFsgRmFpbHVyZSBdCi1odHRwL3Rlc3RzL3Nz
bC91cGdyYWRlLW9yaWdpbi11c2FnZS5odG1sIFsgRmFpbHVyZSBdCi0KIGh0dHAvdGVzdHMvc3Ns
L21lZGlhLXN0cmVhbSBbIFNraXAgXQogCiBbIERlYnVnIF0gaHR0cC90ZXN0cy9zdG9yYWdlL2Nh
bGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5odG1sIFsgU2tpcCBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>