<?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>234959</bug_id>
          
          <creation_ts>2022-01-07 08:11:58 -0800</creation_ts>
          <short_desc>Make separate invalidation rulesets for negated selectors (inside :not())</short_desc>
          <delta_ts>2022-01-07 11:40:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>darin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1828903</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 08:11:58 -0800</bug_when>
    <thetext>With this information we can reduce invalidation traversal by half.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828910</commentid>
    <comment_count>1</comment_count>
      <attachid>448594</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 08:29:12 -0800</bug_when>
    <thetext>Created attachment 448594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828912</commentid>
    <comment_count>2</comment_count>
      <attachid>448596</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 08:33:13 -0800</bug_when>
    <thetext>Created attachment 448596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828921</commentid>
    <comment_count>3</comment_count>
      <attachid>448601</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 08:43:53 -0800</bug_when>
    <thetext>Created attachment 448601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828949</commentid>
    <comment_count>4</comment_count>
      <attachid>448601</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-07 09:52:03 -0800</bug_when>
    <thetext>Comment on attachment 448601
Patch

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

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:37
&gt; +enum class ClassChangeType { Add, Remove };

Consider &quot;: bool&quot;?

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:41
&gt; +    AtomStringImpl* className;
&gt; +    ClassChangeType type;

Consider providing default values rather than leaving these scalars uninitialized?

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:118
&gt; +    auto invalidateBeforeChange = [](ClassChangeType classChangeType, IsNegation isNegation) {

I think calling the local just &quot;type&quot; makes it slightly easier to read.

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:121
&gt; +        if (classChangeType == ClassChangeType::Remove)
&gt; +            return isNegation == IsNegation::No;
&gt; +        return isNegation == IsNegation::Yes;

I’d wish for a simpler way to write this; I kind of feel like it’s a boolean maze right now. But I can’t think of anything obviously better.

&gt; Source/WebCore/style/StyleScopeRuleSets.h:49
&gt; +    Vector&lt;const CSSSelector*&gt; invalidationSelectors { };

Do we really need the &quot;{ }&quot; here? A workaround for a compiler bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828950</commentid>
    <comment_count>5</comment_count>
      <attachid>448601</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-01-07 09:54:46 -0800</bug_when>
    <thetext>Comment on attachment 448601
Patch

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

&gt; Source/WebCore/style/StyleScopeRuleSets.h:48
&gt; +    IsNegation isNegation;
&gt; +    RefPtr&lt;RuleSet&gt; ruleSet;

There will be some padding here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828951</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 09:58:22 -0800</bug_when>
    <thetext>&gt; Do we really need the &quot;{ }&quot; here? A workaround for a compiler bug?

Yeah, in the EWS compiler version. We talked about this earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828964</commentid>
    <comment_count>7</comment_count>
      <attachid>448608</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-07 10:33:01 -0800</bug_when>
    <thetext>Created attachment 448608
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829011</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-07 11:39:54 -0800</bug_when>
    <thetext>Committed r287772 (245832@main): &lt;https://commits.webkit.org/245832@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448608.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829012</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-07 11:40:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/87264291&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448594</attachid>
            <date>2022-01-07 08:29:12 -0800</date>
            <delta_ts>2022-01-07 08:48:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234959-20220107182910.patch</filename>
            <type>text/plain</type>
            <size>22958</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmZmZDU5Y2UzNzY0MzVh
OWFjODIzYjY3NjVhOGUwNTlhMDc1MWEyYi4uYTg1ZDVmMDZiY2I1Y2MyNjVjNmJjOTBlMTNlY2Jk
Njg3NjM4MTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIyLTAxLTA3ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlcGFyYXRlIGlu
dmFsaWRhdGlvbiBydWxlc2V0cyBmb3IgbmVnYXRlZCBzZWxlY3RvcnMgKGluc2lkZSA6bm90KCkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHNvIHVz
ZSB0aGlzIGluZm9ybWF0aW9uIHRvIHJlZHVjZSB0cmF2ZXJzYWwgb24gY2xhc3MgY2hhbmdlcy4g
T3RoZXIgbXV0YXRpb25zIHdpbGwgZm9sbG93LgorCisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFz
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjb21wdXRlQ2xhc3NDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Y29tcHV0ZUlu
dmFsaWRhdGlvbik6CisKKyAgICAgICAgSWYgd2UgYXJlIGFkZGluZyBhIGNsYXNzIHdlIG9ubHkg
bmVlZCB0byBpbnZhbGlkYXRlIGFmdGVyIHRoZSBtdXRhdGlvbiBmb3IgcmVndWxhciBzZWxlY3Rv
cnMKKyAgICAgICAgYXMgdGhlIHN0YXRlIGNhbiBvbmx5IGNoYW5nZSBieSBoYXZpbmcgdGhlIHNl
bGVjdG9yIHN0YXJ0IG1hdGNoaW5nLgorCisgICAgICAgIEZvciBuZWdhdGVkIHNlbGVjdG9ycyB3
ZSBvbmx5IG5lZWQgdG8gaW52YWxpZGF0ZSBiZWZvcmUgdGhlIG11dGF0aW9uIHNpbmNlIHRoZSBz
dGF0ZSBjYW4gb25seSBjaGFuZ2UKKyAgICAgICAgYnkgaGF2aW5nIHRoZSBzZWxlY3RvciBzdG9w
IG1hdGNoaW5nLgorCisgICAgICAgIFRoZXNlIGFyZSByZXZlcnNlZCB3aGVuIHJlbW92aW5nIGEg
Y2xhc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZUJlZm9yZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVBZnRlckNoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZUNsYXNzQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlV2l0
aFJ1bGVTZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
OjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246On5DbGFzc0NoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAg
ICogc3R5bGUvUnVsZUZlYXR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVG
ZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1
cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlRmVhdHVyZVNldDo6cmVjdXJz
aXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IpOgorCisgICAgICAgIENvbXB1dGUgdGhl
IG5lZ2F0aW9uIHN0YXRlLiA6bm90KGZvbykgaXMgbmVnYXRlZCwgOm5vdCg6bm90KGZvbykpIGlz
bid0LgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RG
ZWF0dXJlcyk6CisgICAgICAgICogc3R5bGUvUnVsZUZlYXR1cmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcjo6UnVsZUZlYXR1
cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZW5zdXJlSW52
YWxpZGF0aW9uUnVsZVNldHMpOgorCisgICAgICAgIE1ha2Ugc2VwYXJhdGUgcnVsZXNldC4KKwor
ICAgICAgICAqIHN0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oOgorCiAyMDIyLTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0
IHRoZSBzY3JvbGxpbmcgdGhyZWFkIGFsd2F5cyBjb21taXRzIGxheWVyIHBvc2l0aW9uIGNoYW5n
ZXMgdG8gcmVkdWNlIHNjcm9sbGluZyBzdHV0dGVycyAodjIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKaW5kZXggMjljOGZiMTBhZGJmMjNm
YjRiMzhjNGVlNzhlZmY5MDM5ZDhjY2JkMS4uMzcwYTA0ZDA1ZjZiNzAxNWYxZjE4MDg5ZTQ5MGRh
N2QxM2IxMDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmNwcApAQCAtMzQsMjYgKzM0LDMzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgU3R5bGUgewogCi11c2luZyBDbGFzc0NoYW5nZVZlY3RvciA9IFZlY3RvcjxBdG9t
U3RyaW5nSW1wbCosIDQ+OworZW51bSBjbGFzcyBDbGFzc0NoYW5nZVR5cGUgeyBBZGQsIFJlbW92
ZSB9OwogCi1zdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3IgY29sbGVjdENsYXNzZXMoY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgY2xhc3NlcykKK3N0cnVjdCBDbGFzc0NoYW5nZSB7CisgICAgQXRvbVN0
cmluZ0ltcGwqIGNsYXNzTmFtZTsKKyAgICBDbGFzc0NoYW5nZVR5cGUgdHlwZTsKK307CisKK3Vz
aW5nIENsYXNzQ2hhbmdlVmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0PjsKKworc3RhdGlj
IENsYXNzQ2hhbmdlVmVjdG9yIGNvbGxlY3RDbGFzc2VzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IGNsYXNzZXMsIENsYXNzQ2hhbmdlVHlwZSBjbGFzc0NoYW5nZVR5cGUpCiB7CiAgICAgQ2xhc3ND
aGFuZ2VWZWN0b3IgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoY2xhc3Nlcy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc2VzLnNpemUoKTsgKytp
KQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNsYXNzZXNbaV0uaW1wbCgpKTsKKyAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IGNsYXNzZXNbaV0uaW1wbCgpLCBjbGFzc0No
YW5nZVR5cGUgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIENsYXNzQ2hhbmdl
VmVjdG9yIGNvbXB1dGVDbGFzc0NoYW5nZShjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFz
c2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQorc3RhdGljIENsYXNzQ2hh
bmdlVmVjdG9yIGNvbXB1dGVDbGFzc0NoYW5nZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xk
Q2xhc3NlcywgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgbmV3Q2xhc3NlcykKIHsKICAgICB1bnNp
Z25lZCBvbGRTaXplID0gb2xkQ2xhc3Nlcy5zaXplKCk7CiAgICAgdW5zaWduZWQgbmV3U2l6ZSA9
IG5ld0NsYXNzZXMuc2l6ZSgpOwogCiAgICAgaWYgKCFvbGRTaXplKQotICAgICAgICByZXR1cm4g
Y29sbGVjdENsYXNzZXMobmV3Q2xhc3Nlcyk7CisgICAgICAgIHJldHVybiBjb2xsZWN0Q2xhc3Nl
cyhuZXdDbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGU6OkFkZCk7CiAgICAgaWYgKCFuZXdTaXplKQot
ICAgICAgICByZXR1cm4gY29sbGVjdENsYXNzZXMob2xkQ2xhc3Nlcyk7CisgICAgICAgIHJldHVy
biBjb2xsZWN0Q2xhc3NlcyhvbGRDbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGU6OlJlbW92ZSk7CiAK
ICAgICBDbGFzc0NoYW5nZVZlY3RvciBjaGFuZ2VkQ2xhc3NlczsKIApAQCAtNzAsMTMgKzc3LDEz
IEBAIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3NDaGFuZ2UoY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywKICAgICAgICAgfQogICAgICAgICBpZiAoZm91bmRG
cm9tQm90aCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5h
cHBlbmQobmV3Q2xhc3Nlc1tpXS5pbXBsKCkpOworICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5hcHBl
bmQoeyBuZXdDbGFzc2VzW2ldLmltcGwoKSwgQ2xhc3NDaGFuZ2VUeXBlOjpBZGQgfSk7CiAgICAg
fQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRTaXplOyArK2kpIHsKICAgICAgICAg
Ly8gSWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzIGhhcyBiZWVu
IHJlbW92ZWQuCiAgICAgICAgIGlmIChyZW1haW5pbmdDbGFzc0JpdHMucXVpY2tHZXQoaSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKG9sZENs
YXNzZXNbaV0uaW1wbCgpKTsKKyAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKHsgb2xkQ2xh
c3Nlc1tpXS5pbXBsKCksIENsYXNzQ2hhbmdlVHlwZTo6UmVtb3ZlIH0pOwogICAgIH0KIAogICAg
IHJldHVybiBjaGFuZ2VkQ2xhc3NlczsKQEAgLTg0LDE2ICs5MSwxNiBAQCBzdGF0aWMgQ2xhc3ND
aGFuZ2VWZWN0b3IgY29tcHV0ZUNsYXNzQ2hhbmdlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9s
ZENsYXNzZXMsCiAKIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1dGVJbnZhbGlk
YXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywgY29uc3QgU3BhY2VTcGxp
dFN0cmluZyYgbmV3Q2xhc3NlcykKIHsKLSAgICBhdXRvIGNoYW5nZWRDbGFzc2VzID0gY29tcHV0
ZUNsYXNzQ2hhbmdlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOworICAgIGF1dG8gY2xhc3NDaGFu
Z2VzID0gY29tcHV0ZUNsYXNzQ2hhbmdlcyhvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKTsKIAogICAg
IGJvb2wgc2hvdWxkSW52YWxpZGF0ZUN1cnJlbnQgPSBmYWxzZTsKICAgICBib29sIG1heUFmZmVj
dFN0eWxlSW5TaGFkb3dUcmVlID0gZmFsc2U7CiAKICAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyht
X2VsZW1lbnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heUFm
ZmVjdFNoYWRvd1RyZWUpIHsKLSAgICAgICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjaGFu
Z2VkQ2xhc3NlcykgewotICAgICAgICAgICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUgJiYgZmVh
dHVyZXMuY2xhc3NSdWxlcy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQorICAgICAgICBmb3IgKGF1
dG8mIGNsYXNzQ2hhbmdlIDogY2xhc3NDaGFuZ2VzKSB7CisgICAgICAgICAgICBpZiAobWF5QWZm
ZWN0U2hhZG93VHJlZSAmJiBmZWF0dXJlcy5jbGFzc1J1bGVzLmNvbnRhaW5zKGNsYXNzQ2hhbmdl
LmNsYXNzTmFtZSkpCiAgICAgICAgICAgICAgICAgbWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUg
PSB0cnVlOwotICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmNsYXNzZXNBZmZlY3RpbmdIb3N0LmNv
bnRhaW5zKGNoYW5nZWRDbGFzcykpCisgICAgICAgICAgICBpZiAoZmVhdHVyZXMuY2xhc3Nlc0Fm
ZmVjdGluZ0hvc3QuY29udGFpbnMoY2xhc3NDaGFuZ2UuY2xhc3NOYW1lKSkKICAgICAgICAgICAg
ICAgICBzaG91bGRJbnZhbGlkYXRlQ3VycmVudCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9KTsK
QEAgLTEwOCwxNyArMTE1LDMyIEBAIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1
dGVJbnZhbGlkYXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhCiAKICAgICBhdXRv
JiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKIAotICAg
IGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGludmFsaWRhdGlvblJ1bGVTZXRzID0gcnVsZVNldHMuY2xhc3NJbnZhbGlkYXRpb25S
dWxlU2V0cyhjaGFuZ2VkQ2xhc3MpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGludmFsaWRh
dGlvblJ1bGVTZXQgOiAqaW52YWxpZGF0aW9uUnVsZVNldHMpCi0gICAgICAgICAgICAgICAgSW52
YWxpZGF0b3I6OmFkZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMobV9tYXRjaEVsZW1lbnRSdWxlU2V0
cywgaW52YWxpZGF0aW9uUnVsZVNldCk7CisgICAgYXV0byBpbnZhbGlkYXRlQmVmb3JlQ2hhbmdl
ID0gW10oQ2xhc3NDaGFuZ2VUeXBlIGNsYXNzQ2hhbmdlVHlwZSwgSXNOZWdhdGlvbiBpc05lZ2F0
aW9uKSB7CisgICAgICAgIGlmIChjbGFzc0NoYW5nZVR5cGUgPT0gQ2xhc3NDaGFuZ2VUeXBlOjpS
ZW1vdmUpCisgICAgICAgICAgICByZXR1cm4gaXNOZWdhdGlvbiA9PSBJc05lZ2F0aW9uOjpObzsK
KyAgICAgICAgcmV0dXJuIGlzTmVnYXRpb24gPT0gSXNOZWdhdGlvbjo6WWVzOworICAgIH07CisK
KyAgICBmb3IgKGF1dG8mIGNsYXNzQ2hhbmdlIDogY2xhc3NDaGFuZ2VzKSB7CisgICAgICAgIGlm
IChhdXRvKiBpbnZhbGlkYXRpb25SdWxlU2V0cyA9IHJ1bGVTZXRzLmNsYXNzSW52YWxpZGF0aW9u
UnVsZVNldHMoY2xhc3NDaGFuZ2UuY2xhc3NOYW1lKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
JiBpbnZhbGlkYXRpb25SdWxlU2V0IDogKmludmFsaWRhdGlvblJ1bGVTZXRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGludmFsaWRhdGVCZWZvcmVDaGFuZ2UoY2xhc3NDaGFuZ2UudHlwZSwgaW52
YWxpZGF0aW9uUnVsZVNldC5pc05lZ2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgSW52YWxp
ZGF0b3I6OmFkZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMobV9iZWZvcmVDaGFuZ2VSdWxlU2V0cywg
aW52YWxpZGF0aW9uUnVsZVNldCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBJbnZhbGlkYXRvcjo6YWRkVG9NYXRjaEVsZW1lbnRSdWxlU2V0cyhtX2FmdGVyQ2hh
bmdlUnVsZVNldHMsIGludmFsaWRhdGlvblJ1bGVTZXQpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRl
U3R5bGVXaXRoUnVsZVNldHMoKQordm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxp
ZGF0ZUJlZm9yZUNoYW5nZSgpCit7CisgICAgSW52YWxpZGF0b3I6OmludmFsaWRhdGVXaXRoTWF0
Y2hFbGVtZW50UnVsZVNldHMobV9lbGVtZW50LCBtX2JlZm9yZUNoYW5nZVJ1bGVTZXRzKTsKK30K
Kwordm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZUFmdGVyQ2hhbmdlKCkK
IHsKLSAgICBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVdpdGhNYXRjaEVsZW1lbnRSdWxlU2V0cyht
X2VsZW1lbnQsIG1fbWF0Y2hFbGVtZW50UnVsZVNldHMpOworICAgIEludmFsaWRhdG9yOjppbnZh
bGlkYXRlV2l0aE1hdGNoRWxlbWVudFJ1bGVTZXRzKG1fZWxlbWVudCwgbV9hZnRlckNoYW5nZVJ1
bGVTZXRzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3ND
aGFuZ2VJbnZhbGlkYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmgKaW5kZXggNzY5MGJiMDY3ZTZhMDM5YmZmNDBmZmFkMzA4N2Q4MDc5OTkzMWFl
MC4uY2FlMDVlNWQyNGYxOGRkYTZhOTU0NzhmYWZlNDI3ZmNmNzQ0OWVhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oCkBAIC00MiwxMiArNDIs
MTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZUludmFsaWRhdGlvbihj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBuZXdDbGFzc2VzKTsKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZVdpdGhSdWxlU2V0cygpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZUJlZm9yZUNoYW5nZSgpOworICAgIHZvaWQgaW52YWxpZGF0ZUFm
dGVyQ2hhbmdlKCk7CiAKICAgICBjb25zdCBib29sIG1faXNFbmFibGVkOwogICAgIEVsZW1lbnQm
IG1fZWxlbWVudDsKIAotICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRSdWxlU2V0cyBtX21h
dGNoRWxlbWVudFJ1bGVTZXRzOworICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRSdWxlU2V0
cyBtX2JlZm9yZUNoYW5nZVJ1bGVTZXRzOworICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRS
dWxlU2V0cyBtX2FmdGVyQ2hhbmdlUnVsZVNldHM7CiB9OwogCiBpbmxpbmUgQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb246OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IG5ld0NsYXNzZXMpCkBAIC01OCwxNCArNjAsMTQgQEAgaW5saW5lIENsYXNzQ2hhbmdlSW52YWxp
ZGF0aW9uOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbihFbGVtZW50JiBlbGVtZW50LCBjb25zdAog
ICAgIGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICBjb21wdXRlSW52YWxp
ZGF0aW9uKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOwotICAgIGludmFsaWRhdGVTdHlsZVdpdGhS
dWxlU2V0cygpOworICAgIGludmFsaWRhdGVCZWZvcmVDaGFuZ2UoKTsKIH0KIAogaW5saW5lIENs
YXNzQ2hhbmdlSW52YWxpZGF0aW9uOjp+Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24oKQogewogICAg
IGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnZhbGlkYXRlU3R5bGVX
aXRoUnVsZVNldHMoKTsKKyAgICBpbnZhbGlkYXRlQWZ0ZXJDaGFuZ2UoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuY3BwCmluZGV4IDdkN2RjN2FkOWMzZGRjZDdiZmZlYTNm
NDM3M2Y1NjdkOTNjNjZkOWMuLjEyZTBlZDQxMTFkMGUwZDYyODYyZTg3YTBlZjNmYzc3NTI3MmIw
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5jcHAKQEAgLTg0LDkgKzg0LDE2IEBA
IFJ1bGVBbmRTZWxlY3Rvcjo6UnVsZUFuZFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSkKIH0KIAogCi1SdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUoY29uc3QgUnVsZURhdGEmIHJ1bGVE
YXRhLCBNYXRjaEVsZW1lbnQgbWF0Y2hFbGVtZW50KQorUnVsZUZlYXR1cmU6OlJ1bGVGZWF0dXJl
KGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgSXNO
ZWdhdGlvbiBpc05lZ2F0aW9uKQogICAgIDogUnVsZUFuZFNlbGVjdG9yKHJ1bGVEYXRhKQogICAg
ICwgbWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCkKKyAgICAsIGlzTmVnYXRpb24oaXNOZWdhdGlv
bikKK3sKK30KKworUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0
dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBkYXRhLCBNYXRjaEVs
ZW1lbnQgbWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uIGlzTmVnYXRpb24sIGNvbnN0IENTU1NlbGVj
dG9yKiBpbnZhbGlkYXRpb25TZWxlY3RvcikKKyAgICA6IFJ1bGVGZWF0dXJlKGRhdGEsIG1hdGNo
RWxlbWVudCwgaXNOZWdhdGlvbikKKyAgICAsIGludmFsaWRhdGlvblNlbGVjdG9yKGludmFsaWRh
dGlvblNlbGVjdG9yKQogewogfQogCkBAIC0yMDAsNyArMjA3LDcgQEAgc3RhdGljIE1hdGNoRWxl
bWVudCBjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQoTWF0Y2hFbGVtZW50IG1hdGNoRWxl
bWVudCwgY28KICAgICByZXR1cm4gbWF0Y2hFbGVtZW50OwogfTsKIAotdm9pZCBSdWxlRmVhdHVy
ZVNldDo6cmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0b3JGZWF0
dXJlcyYgc2VsZWN0b3JGZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3ImIGZpcnN0U2VsZWN0b3Is
IE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQpCit2b2lkIFJ1bGVGZWF0dXJlU2V0OjpyZWN1cnNp
dmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiBzZWxlY3Rv
ckZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RTZWxlY3RvciwgTWF0Y2hFbGVtZW50
IG1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbiBpc05lZ2F0aW9uKQogewogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9ICZmaXJzdFNlbGVjdG9yOwogICAgIGRvIHsKQEAgLTIwOSwxOCAr
MjE2LDE4IEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVz
RnJvbVNlbGVjdG9yKFNlbGVjdG9yRmVhdHVyZXMmIHNlCiAgICAgICAgICAgICBpZiAobWF0Y2hF
bGVtZW50ID09IE1hdGNoRWxlbWVudDo6UGFyZW50IHx8IG1hdGNoRWxlbWVudCA9PSBNYXRjaEVs
ZW1lbnQ6OkFuY2VzdG9yKQogICAgICAgICAgICAgICAgIGlkc01hdGNoaW5nQW5jZXN0b3JzSW5S
dWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNIYXNQ
c2V1ZG9DbGFzc01hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNl
bGVjdG9yRmVhdHVyZXMuaWRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzZWxlY3Rvci0+dmFsdWUo
KSwgbWF0Y2hFbGVtZW50KSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5pZHMu
YXBwZW5kKHsgc2VsZWN0b3ItPnZhbHVlKCksIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsK
ICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xh
c3MpCi0gICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmNsYXNzZXMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKHNlbGVjdG9yLT52YWx1ZSgpLCBtYXRjaEVsZW1lbnQpKTsKKyAgICAgICAgICAgIHNl
bGVjdG9yRmVhdHVyZXMuY2xhc3Nlcy5hcHBlbmQoeyBzZWxlY3Rvci0+dmFsdWUoKSwgbWF0Y2hF
bGVtZW50LCBpc05lZ2F0aW9uIH0pOwogICAgICAgICBlbHNlIGlmIChzZWxlY3Rvci0+bWF0Y2go
KSA9PSBDU1NTZWxlY3Rvcjo6VGFnKSB7CiAgICAgICAgICAgICBpZiAoaXNIYXNQc2V1ZG9DbGFz
c01hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVh
dHVyZXMudGFncy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3ItPnRhZ0xvd2VyY2FzZUxv
Y2FsTmFtZSgpLCBtYXRjaEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RvckZlYXR1
cmVzLnRhZ3MuYXBwZW5kKHsgc2VsZWN0b3ItPnRhZ0xvd2VyY2FzZUxvY2FsTmFtZSgpLCBtYXRj
aEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPmlz
QXR0cmlidXRlU2VsZWN0b3IoKSkgewogICAgICAgICAgICAgYXV0byYgY2Fub25pY2FsTG9jYWxO
YW1lID0gc2VsZWN0b3ItPmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpOwogICAgICAgICAg
ICAgYXV0byYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpOwog
ICAgICAgICAgICAgYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVsZXMuYWRkKGNhbm9u
aWNhbExvY2FsTmFtZSk7CiAgICAgICAgICAgICBhdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlcy5h
ZGQobG9jYWxOYW1lKTsKLSAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3IsIG1hdGNoRWxlbWVudCkpOworICAgICAgICAg
ICAgc2VsZWN0b3JGZWF0dXJlcy5hdHRyaWJ1dGVzLmFwcGVuZCh7IHNlbGVjdG9yLCBtYXRjaEVs
ZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPm1hdGNo
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRGaXJzdExpbmU6CkBAIC0yMzQsMTggKzI0MSwyMiBAQCB2b2lk
IFJ1bGVGZWF0dXJlU2V0OjpyZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihT
ZWxlY3RvckZlYXR1cmVzJiBzZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHNl
bGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgewogICAgICAgICAg
ICAgaWYgKCFpc0xvZ2ljYWxDb21iaW5hdGlvblBzZXVkb0NsYXNzKHNlbGVjdG9yLT5wc2V1ZG9D
bGFzc1R5cGUoKSkpCi0gICAgICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFz
c2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzZWxlY3RvciwgbWF0Y2hFbGVtZW50KSk7CisgICAg
ICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFzc2VzLmFwcGVuZCh7IHNlbGVj
dG9yLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIXNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1Np
YmxpbmdTZWxlY3RvcigpKQogICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5oYXNTaWJsaW5n
U2VsZWN0b3IgPSB0cnVlOwogCiAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNl
bGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAgICAgICAgYXV0
byBzdWJTZWxlY3RvcklzTmVnYXRpb24gPSBpc05lZ2F0aW9uOworICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBzZWxlY3Rvci0+
cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90KQorICAgICAg
ICAgICAgICAgIHN1YlNlbGVjdG9ySXNOZWdhdGlvbiA9IGlzTmVnYXRpb24gPT0gSXNOZWdhdGlv
bjo6Tm8gPyBJc05lZ2F0aW9uOjpZZXMgOiBJc05lZ2F0aW9uOjpObzsKKwogICAgICAgICAgICAg
Zm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0
KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJT
ZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBhdXRvIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
ID0gY29tcHV0ZVN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCwgKnNlbGVjdG9y
LCAqc3ViU2VsZWN0b3IpOwogICAgICAgICAgICAgICAgIGlmICghc2VsZWN0b3JGZWF0dXJlcy5o
YXNTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihzZWxlY3RvckZlYXR1cmVzLCAqc3ViU2VsZWN0b3IsIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
KTsKKyAgICAgICAgICAgICAgICByZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihzZWxlY3RvckZlYXR1cmVzLCAqc3ViU2VsZWN0b3IsIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
LCBzdWJTZWxlY3RvcklzTmVnYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTMwNiwxMCArMzE3LDEwIEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJlcyhj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAKICAgICBhdXRvIGFkZFRvTWFwID0gWyZdKGF1dG8m
IG1hcCwgYXV0byYgZW50cmllcywgYXV0byBob3N0QWZmZWN0aW5nTmFtZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKLSAgICAgICAgICAgIGF1dG8mIFtuYW1lLCBt
YXRjaEVsZW1lbnRdID0gZW50cnk7CisgICAgICAgICAgICBhdXRvJiBbbmFtZSwgbWF0Y2hFbGVt
ZW50LCBpc05lZ2F0aW9uXSA9IGVudHJ5OwogICAgICAgICAgICAgbWFwLmVuc3VyZShuYW1lLCBb
XSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UnVsZUZlYXR1cmVWZWN0b3I+
KCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7IHJ1bGVEYXRhLCBt
YXRjaEVsZW1lbnQgfSk7CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7
IHJ1bGVEYXRhLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAKICAgICAgICAgICAgIHNl
dFVzZXNNYXRjaEVsZW1lbnQobWF0Y2hFbGVtZW50KTsKIApAQCAtMzI0LDIzICszMzUsMjEgQEAg
dm9pZCBSdWxlRmVhdHVyZVNldDo6Y29sbGVjdEZlYXR1cmVzKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSkKICAgICBhZGRUb01hcChpZFJ1bGVzLCBzZWxlY3RvckZlYXR1cmVzLmlkcywgbnVsbHB0
cik7CiAgICAgYWRkVG9NYXAoY2xhc3NSdWxlcywgc2VsZWN0b3JGZWF0dXJlcy5jbGFzc2VzLCAm
Y2xhc3Nlc0FmZmVjdGluZ0hvc3QpOwogCi0gICAgZm9yIChhdXRvJiBzZWxlY3RvckFuZE1hdGNo
IDogc2VsZWN0b3JGZWF0dXJlcy5hdHRyaWJ1dGVzKSB7Ci0gICAgICAgIGF1dG8qIHNlbGVjdG9y
ID0gc2VsZWN0b3JBbmRNYXRjaC5maXJzdDsKLSAgICAgICAgYXV0byBtYXRjaEVsZW1lbnQgPSBz
ZWxlY3RvckFuZE1hdGNoLnNlY29uZDsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2VsZWN0b3JG
ZWF0dXJlcy5hdHRyaWJ1dGVzKSB7CisgICAgICAgIGF1dG8gW3NlbGVjdG9yLCBtYXRjaEVsZW1l
bnQsIGlzTmVnYXRpb25dID0gZW50cnk7CiAgICAgICAgIGF0dHJpYnV0ZVJ1bGVzLmVuc3VyZShz
ZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSwgW10gewogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJl
V2l0aEludmFsaWRhdGlvblNlbGVjdG9yPj4oKTsKLSAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50LCBzZWxlY3RvciB9KTsKKyAgICAgICAg
fSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50LCBpc05l
Z2F0aW9uLCBzZWxlY3RvciB9KTsKICAgICAgICAgaWYgKG1hdGNoRWxlbWVudCA9PSBNYXRjaEVs
ZW1lbnQ6Okhvc3QpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzQWZmZWN0aW5nSG9zdC5hZGQoc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkp
OwogICAgICAgICBzZXRVc2VzTWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCk7CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBzZWxlY3RvckFuZE1hdGNoIDogc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9D
bGFzc2VzKSB7Ci0gICAgICAgIGF1dG8qIHNlbGVjdG9yID0gc2VsZWN0b3JBbmRNYXRjaC5maXJz
dDsKLSAgICAgICAgYXV0byBtYXRjaEVsZW1lbnQgPSBzZWxlY3RvckFuZE1hdGNoLnNlY29uZDsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFzc2VzKSB7
CisgICAgICAgIGF1dG8gW3NlbGVjdG9yLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb25dID0gZW50
cnk7CiAgICAgICAgIHBzZXVkb0NsYXNzUnVsZXMuZW5zdXJlKG1ha2VQc2V1ZG9DbGFzc0ludmFs
aWRhdGlvbktleSgqc2VsZWN0b3IpLCBbXSB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOwotICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFw
cGVuZCh7IHJ1bGVEYXRhLCBtYXRjaEVsZW1lbnQgfSk7CisgICAgICAgIH0pLml0ZXJhdG9yLT52
YWx1ZS0+YXBwZW5kKHsgcnVsZURhdGEsIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsKIAog
ICAgICAgICBpZiAobWF0Y2hFbGVtZW50ID09IE1hdGNoRWxlbWVudDo6SG9zdCkKICAgICAgICAg
ICAgIHBzZXVkb0NsYXNzZXNBZmZlY3RpbmdIb3N0LmFkZChzZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmgKaW5kZXggN2ZkN2VkZjIyZDkzNDNl
YjZkMmExMGFiYWViMmJlYzg5MTkzNmQ1OC4uZDg0MDZmODhkNDYyZTU2NGRjYTQxMzE2N2EzNDg0
OTNjZDA1ZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5oCkBAIC01NSw2ICs1NSw4
IEBAIGVudW0gY2xhc3MgTWF0Y2hFbGVtZW50IDogdWludDhfdCB7CiB9OwogY29uc3RleHByIHVu
c2lnbmVkIG1hdGNoRWxlbWVudENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1hdGNoRWxl
bWVudDo6SG9zdCkgKyAxOwogCitlbnVtIGNsYXNzIElzTmVnYXRpb24gOiBib29sIHsgTm8sIFll
cyB9OworCiAvLyBGb3IgTVNWQy4KICNwcmFnbWEgcGFjayhwdXNoLCA0KQogc3RydWN0IFJ1bGVB
bmRTZWxlY3RvciB7CkBAIC02NiwxNyArNjgsMTUgQEAgc3RydWN0IFJ1bGVBbmRTZWxlY3RvciB7
CiB9OwogCiBzdHJ1Y3QgUnVsZUZlYXR1cmUgOiBwdWJsaWMgUnVsZUFuZFNlbGVjdG9yIHsKLSAg
ICBSdWxlRmVhdHVyZShjb25zdCBSdWxlRGF0YSYsIE1hdGNoRWxlbWVudCk7CisgICAgUnVsZUZl
YXR1cmUoY29uc3QgUnVsZURhdGEmLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24pOwogCiAgICAg
TWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudDsKKyAgICBJc05lZ2F0aW9uIGlzTmVnYXRpb247IC8v
IFdoZXRoZXIgdGhlIHNlbGVjdG9yIGlzIGluIGEgKG5vbi1wYWlyZWQpIDpub3QoKSBjb250ZXh0
LgogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJ1bGVGZWF0dXJlKSA8PSAxNiwgIlJ1bGVGZWF0
dXJlIGlzIGEgZnJxdWVudGx5IGFsb2NhdGVkIG9iamVjdC4gS2VlcCBpdCBzbWFsbC4iKTsKIAog
c3RydWN0IFJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yIDogcHVibGljIFJ1bGVG
ZWF0dXJlIHsKLSAgICBSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYgZGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0
b3IqIGludmFsaWRhdGlvblNlbGVjdG9yID0gbnVsbHB0cikKLSAgICAgICAgOiBSdWxlRmVhdHVy
ZShkYXRhLCBtYXRjaEVsZW1lbnQpCi0gICAgICAgICwgaW52YWxpZGF0aW9uU2VsZWN0b3IoaW52
YWxpZGF0aW9uU2VsZWN0b3IpCi0gICAgeyB9CisgICAgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0
aW9uU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24sIGNv
bnN0IENTU1NlbGVjdG9yKiBpbnZhbGlkYXRpb25TZWxlY3Rvcik7CiAKICAgICBjb25zdCBDU1NT
ZWxlY3RvciogaW52YWxpZGF0aW9uU2VsZWN0b3IgeyBudWxscHRyIH07CiB9OwpAQCAtMTI0LDEz
ICsxMjQsMTMgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU2VsZWN0b3JGZWF0dXJlcyB7CiAgICAg
ICAgIGJvb2wgaGFzU2libGluZ1NlbGVjdG9yIHsgZmFsc2UgfTsKIAotICAgICAgICBWZWN0b3I8
c3RkOjpwYWlyPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudD4sIDMyPiB0YWdzOwotICAgICAgICBW
ZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudD4sIDMyPiBpZHM7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgTWF0Y2hFbGVtZW50PiwgMzI+IGNsYXNz
ZXM7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgQ1NTU2VsZWN0b3IqLCBNYXRjaEVs
ZW1lbnQ+LCAzMj4gYXR0cmlidXRlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBD
U1NTZWxlY3RvciosIE1hdGNoRWxlbWVudD4sIDMyPiBwc2V1ZG9DbGFzc2VzOworICAgICAgICBW
ZWN0b3I8c3RkOjp0dXBsZTxBdG9tU3RyaW5nLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24+LCAz
Mj4gdGFnczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRvbVN0cmluZywgTWF0Y2hFbGVt
ZW50LCBJc05lZ2F0aW9uPiwgMzI+IGlkczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRv
bVN0cmluZywgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uPiwgMzI+IGNsYXNzZXM7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnR1cGxlPGNvbnN0IENTU1NlbGVjdG9yKiwgTWF0Y2hFbGVtZW50LCBJc05l
Z2F0aW9uPiwgMzI+IGF0dHJpYnV0ZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnR1cGxlPGNvbnN0
IENTU1NlbGVjdG9yKiwgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uPiwgMzI+IHBzZXVkb0NsYXNz
ZXM7CiAgICAgfTsKLSAgICB2b2lkIHJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVzRnJvbVNlbGVj
dG9yKFNlbGVjdG9yRmVhdHVyZXMmLCBjb25zdCBDU1NTZWxlY3RvciYsIE1hdGNoRWxlbWVudCA9
IE1hdGNoRWxlbWVudDo6U3ViamVjdCk7CisgICAgdm9pZCByZWN1cnNpdmVseUNvbGxlY3RGZWF0
dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiwgY29uc3QgQ1NTU2VsZWN0b3ImLCBN
YXRjaEVsZW1lbnQgPSBNYXRjaEVsZW1lbnQ6OlN1YmplY3QsIElzTmVnYXRpb24gPSAgSXNOZWdh
dGlvbjo6Tm8pOwogfTsKIAogYm9vbCBpc0hhc1BzZXVkb0NsYXNzTWF0Y2hFbGVtZW50KE1hdGNo
RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVs
ZVNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcApp
bmRleCA2NDFkZjQzNTBkOGVhMmU0ODVlZTYwMDhhODQ0NTI3YTY4YmZiMjEzLi42YjRmYzMwNTNj
ZGQxNTAzMjU2NTg2ODY5NzA5NDJkMmI0M2QzYjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTI0MCwzNyArMjQwLDMyIEBAIHN0YXRpYyBWZWN0
b3I8SW52YWxpZGF0aW9uUnVsZVNldD4qIGVuc3VyZUludmFsaWRhdGlvblJ1bGVTZXRzKGNvbnN0
IEtleVR5cGUmIGtlCiAgICAgICAgIGlmICghZmVhdHVyZXMpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBzdGQ6OmFycmF5PFJlZlB0cjxSdWxlU2V0PiwgbWF0Y2hFbGVt
ZW50Q291bnQ+IG1hdGNoRWxlbWVudEFycmF5OwotICAgICAgICBzdGQ6OmFycmF5PFZlY3Rvcjxj
b25zdCBDU1NTZWxlY3Rvcio+LCBtYXRjaEVsZW1lbnRDb3VudD4gaW52YWxpZGF0aW9uU2VsZWN0
b3JBcnJheTsKKyAgICAgICAgSGFzaE1hcDxzdGQ6OnR1cGxlPHVpbnQ4X3QsIGJvb2wsIGJvb2w+
LCBJbnZhbGlkYXRpb25SdWxlU2V0PiBpbnZhbGlkYXRpb25SdWxlU2V0TWFwOworCiAgICAgICAg
IGZvciAoYXV0byYgZmVhdHVyZSA6ICpmZWF0dXJlcykgewotICAgICAgICAgICAgYXV0byBhcnJh
eUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZlYXR1cmUubWF0Y2hFbGVtZW50KTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5SW5kZXggPCBtYXRjaEVsZW1lbnRBcnJheS5z
aXplKCkpOworICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6OnR1cGxlIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oZmVhdHVyZS5tYXRjaEVsZW1lbnQpLCBzdGF0aWNfY2FzdDxib29sPihmZWF0dXJl
LmlzTmVnYXRpb24pLCB0cnVlIH07CisKKyAgICAgICAgICAgIGF1dG8mIGludmFsaWRhdGlvblJ1
bGVTZXQgPSBpbnZhbGlkYXRpb25SdWxlU2V0TWFwLmVuc3VyZShrZXksIFsmXSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEludmFsaWRhdGlvblJ1bGVTZXQgeworICAgICAgICAgICAgICAgICAg
ICBmZWF0dXJlLm1hdGNoRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5pc05l
Z2F0aW9uLAorICAgICAgICAgICAgICAgICAgICBSdWxlU2V0OjpjcmVhdGUoKQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICAgICAgICAg
IGF1dG8mIHJ1bGVTZXQgPSBtYXRjaEVsZW1lbnRBcnJheVthcnJheUluZGV4XTsKLSAgICAgICAg
ICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgICAgICAgICBydWxlU2V0ID0gUnVsZVNldDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBydWxlU2V0LT5hZGRSdWxlKCpmZWF0dXJlLnN0eWxlUnVsZSwg
ZmVhdHVyZS5zZWxlY3RvckluZGV4LCBmZWF0dXJlLnNlbGVjdG9yTGlzdEluZGV4KTsKKyAgICAg
ICAgICAgIGludmFsaWRhdGlvblJ1bGVTZXQucnVsZVNldC0+YWRkUnVsZSgqZmVhdHVyZS5zdHls
ZVJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVhdHVyZS5zZWxlY3Rvckxpc3RJbmRleCk7
CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBSdWxlRmVh
dHVyZVZlY3RvclR5cGU6OlZhbHVlVHlwZSwgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2Vs
ZWN0b3I+Ojp2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmludmFsaWRhdGlv
blNlbGVjdG9yKQotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5
W2FycmF5SW5kZXhdLmFwcGVuZChmZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0aW9uUnVsZVNldC5pbnZhbGlkYXRpb25TZWxlY3RvcnMu
YXBwZW5kKGZlYXR1cmUuaW52YWxpZGF0aW9uU2VsZWN0b3IpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgcnVsZVNldENvdW50ID0gMDsKLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBpdGVtIDogbWF0Y2hFbGVtZW50QXJyYXkpIHsKLSAgICAgICAgICAgIGlm
IChpdGVtKQotICAgICAgICAgICAgICAgICsrcnVsZVNldENvdW50OwotICAgICAgICB9Ci0KICAg
ICAgICAgYXV0byBpbnZhbGlkYXRpb25SdWxlU2V0cyA9IG1ha2VVbmlxdWU8VmVjdG9yPEludmFs
aWRhdGlvblJ1bGVTZXQ+PigpOwotICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+cmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShydWxlU2V0Q291bnQpOworICAgICAgICBpbnZhbGlkYXRpb25SdWxl
U2V0cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnZhbGlkYXRpb25SdWxlU2V0TWFwLnNpemUo
KSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBpbnZhbGlkYXRpb25SdWxlU2V0IDogaW52YWxpZGF0
aW9uUnVsZVNldE1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgIGludmFsaWRhdGlvblJ1bGVTZXRz
LT51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbnZhbGlkYXRpb25SdWxlU2V0KSk7CiAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoRWxlbWVudEFycmF5LnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hFbGVtZW50QXJyYXlbaV0pIHsKLSAgICAgICAgICAg
ICAgICBtYXRjaEVsZW1lbnRBcnJheVtpXS0+c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgICAg
ICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+dW5jaGVja2VkQXBwZW5kKHsgc3RhdGljX2Nhc3Q8TWF0
Y2hFbGVtZW50PihpKSwgbWF0Y2hFbGVtZW50QXJyYXlbaV0ucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5W2ldKSB9KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQogICAgICAgICByZXR1cm4gaW52YWxpZGF0aW9uUnVsZVNldHM7CiAgICAgfSkuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTY29wZVJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVs
ZVNldHMuaAppbmRleCA2ZTg1Nzc1ZmVkNGQ1YmE3NTE0Mjg4NjIxN2JjM2IxNGNlYWJmNGJkLi42
OGI1Zjg5MThiOTBlMTI0NWYyNGNkZTJiMmE2ODRmOTcwZGQ1YzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaApAQCAtNDQsMTAgKzQ0LDkgQEAgY2xhc3MgUmVz
b2x2ZXI7CiAKIHN0cnVjdCBJbnZhbGlkYXRpb25SdWxlU2V0IHsKICAgICBNYXRjaEVsZW1lbnQg
bWF0Y2hFbGVtZW50OwotICAgIFJlZjxSdWxlU2V0PiBydWxlU2V0OworICAgIElzTmVnYXRpb24g
aXNOZWdhdGlvbjsKKyAgICBSZWZQdHI8UnVsZVNldD4gcnVsZVNldDsKICAgICBWZWN0b3I8Y29u
c3QgQ1NTU2VsZWN0b3IqPiBpbnZhbGlkYXRpb25TZWxlY3RvcnM7Ci0KLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIH07CiAKIGNsYXNzIFNjb3BlUnVsZVNldHMgewo=
</data>
<flag name="commit-queue"
          id="474502"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448596</attachid>
            <date>2022-01-07 08:33:13 -0800</date>
            <delta_ts>2022-01-07 08:43:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234959-20220107183312.patch</filename>
            <type>text/plain</type>
            <size>23017</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmZmZDU5Y2UzNzY0MzVh
OWFjODIzYjY3NjVhOGUwNTlhMDc1MWEyYi4uYTg1ZDVmMDZiY2I1Y2MyNjVjNmJjOTBlMTNlY2Jk
Njg3NjM4MTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIyLTAxLTA3ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlcGFyYXRlIGlu
dmFsaWRhdGlvbiBydWxlc2V0cyBmb3IgbmVnYXRlZCBzZWxlY3RvcnMgKGluc2lkZSA6bm90KCkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHNvIHVz
ZSB0aGlzIGluZm9ybWF0aW9uIHRvIHJlZHVjZSB0cmF2ZXJzYWwgb24gY2xhc3MgY2hhbmdlcy4g
T3RoZXIgbXV0YXRpb25zIHdpbGwgZm9sbG93LgorCisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFz
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjb21wdXRlQ2xhc3NDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Y29tcHV0ZUlu
dmFsaWRhdGlvbik6CisKKyAgICAgICAgSWYgd2UgYXJlIGFkZGluZyBhIGNsYXNzIHdlIG9ubHkg
bmVlZCB0byBpbnZhbGlkYXRlIGFmdGVyIHRoZSBtdXRhdGlvbiBmb3IgcmVndWxhciBzZWxlY3Rv
cnMKKyAgICAgICAgYXMgdGhlIHN0YXRlIGNhbiBvbmx5IGNoYW5nZSBieSBoYXZpbmcgdGhlIHNl
bGVjdG9yIHN0YXJ0IG1hdGNoaW5nLgorCisgICAgICAgIEZvciBuZWdhdGVkIHNlbGVjdG9ycyB3
ZSBvbmx5IG5lZWQgdG8gaW52YWxpZGF0ZSBiZWZvcmUgdGhlIG11dGF0aW9uIHNpbmNlIHRoZSBz
dGF0ZSBjYW4gb25seSBjaGFuZ2UKKyAgICAgICAgYnkgaGF2aW5nIHRoZSBzZWxlY3RvciBzdG9w
IG1hdGNoaW5nLgorCisgICAgICAgIFRoZXNlIGFyZSByZXZlcnNlZCB3aGVuIHJlbW92aW5nIGEg
Y2xhc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZUJlZm9yZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVBZnRlckNoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZUNsYXNzQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlV2l0
aFJ1bGVTZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
OjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246On5DbGFzc0NoYW5nZUludmFsaWRhdGlvbik6CisgICAgICAg
ICogc3R5bGUvUnVsZUZlYXR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVG
ZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1
cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlRmVhdHVyZVNldDo6cmVjdXJz
aXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IpOgorCisgICAgICAgIENvbXB1dGUgdGhl
IG5lZ2F0aW9uIHN0YXRlLiA6bm90KGZvbykgaXMgbmVnYXRlZCwgOm5vdCg6bm90KGZvbykpIGlz
bid0LgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RG
ZWF0dXJlcyk6CisgICAgICAgICogc3R5bGUvUnVsZUZlYXR1cmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcjo6UnVsZUZlYXR1
cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZW5zdXJlSW52
YWxpZGF0aW9uUnVsZVNldHMpOgorCisgICAgICAgIE1ha2Ugc2VwYXJhdGUgcnVsZXNldC4KKwor
ICAgICAgICAqIHN0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oOgorCiAyMDIyLTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0
IHRoZSBzY3JvbGxpbmcgdGhyZWFkIGFsd2F5cyBjb21taXRzIGxheWVyIHBvc2l0aW9uIGNoYW5n
ZXMgdG8gcmVkdWNlIHNjcm9sbGluZyBzdHV0dGVycyAodjIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKaW5kZXggMjljOGZiMTBhZGJmMjNm
YjRiMzhjNGVlNzhlZmY5MDM5ZDhjY2JkMS4uMzcwYTA0ZDA1ZjZiNzAxNWYxZjE4MDg5ZTQ5MGRh
N2QxM2IxMDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmNwcApAQCAtMzQsMjYgKzM0LDMzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgU3R5bGUgewogCi11c2luZyBDbGFzc0NoYW5nZVZlY3RvciA9IFZlY3RvcjxBdG9t
U3RyaW5nSW1wbCosIDQ+OworZW51bSBjbGFzcyBDbGFzc0NoYW5nZVR5cGUgeyBBZGQsIFJlbW92
ZSB9OwogCi1zdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3IgY29sbGVjdENsYXNzZXMoY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgY2xhc3NlcykKK3N0cnVjdCBDbGFzc0NoYW5nZSB7CisgICAgQXRvbVN0
cmluZ0ltcGwqIGNsYXNzTmFtZTsKKyAgICBDbGFzc0NoYW5nZVR5cGUgdHlwZTsKK307CisKK3Vz
aW5nIENsYXNzQ2hhbmdlVmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0PjsKKworc3RhdGlj
IENsYXNzQ2hhbmdlVmVjdG9yIGNvbGxlY3RDbGFzc2VzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IGNsYXNzZXMsIENsYXNzQ2hhbmdlVHlwZSBjbGFzc0NoYW5nZVR5cGUpCiB7CiAgICAgQ2xhc3ND
aGFuZ2VWZWN0b3IgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoY2xhc3Nlcy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc2VzLnNpemUoKTsgKytp
KQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNsYXNzZXNbaV0uaW1wbCgpKTsKKyAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IGNsYXNzZXNbaV0uaW1wbCgpLCBjbGFzc0No
YW5nZVR5cGUgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIENsYXNzQ2hhbmdl
VmVjdG9yIGNvbXB1dGVDbGFzc0NoYW5nZShjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFz
c2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQorc3RhdGljIENsYXNzQ2hh
bmdlVmVjdG9yIGNvbXB1dGVDbGFzc0NoYW5nZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xk
Q2xhc3NlcywgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgbmV3Q2xhc3NlcykKIHsKICAgICB1bnNp
Z25lZCBvbGRTaXplID0gb2xkQ2xhc3Nlcy5zaXplKCk7CiAgICAgdW5zaWduZWQgbmV3U2l6ZSA9
IG5ld0NsYXNzZXMuc2l6ZSgpOwogCiAgICAgaWYgKCFvbGRTaXplKQotICAgICAgICByZXR1cm4g
Y29sbGVjdENsYXNzZXMobmV3Q2xhc3Nlcyk7CisgICAgICAgIHJldHVybiBjb2xsZWN0Q2xhc3Nl
cyhuZXdDbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGU6OkFkZCk7CiAgICAgaWYgKCFuZXdTaXplKQot
ICAgICAgICByZXR1cm4gY29sbGVjdENsYXNzZXMob2xkQ2xhc3Nlcyk7CisgICAgICAgIHJldHVy
biBjb2xsZWN0Q2xhc3NlcyhvbGRDbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGU6OlJlbW92ZSk7CiAK
ICAgICBDbGFzc0NoYW5nZVZlY3RvciBjaGFuZ2VkQ2xhc3NlczsKIApAQCAtNzAsMTMgKzc3LDEz
IEBAIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3NDaGFuZ2UoY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywKICAgICAgICAgfQogICAgICAgICBpZiAoZm91bmRG
cm9tQm90aCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5h
cHBlbmQobmV3Q2xhc3Nlc1tpXS5pbXBsKCkpOworICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5hcHBl
bmQoeyBuZXdDbGFzc2VzW2ldLmltcGwoKSwgQ2xhc3NDaGFuZ2VUeXBlOjpBZGQgfSk7CiAgICAg
fQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRTaXplOyArK2kpIHsKICAgICAgICAg
Ly8gSWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzIGhhcyBiZWVu
IHJlbW92ZWQuCiAgICAgICAgIGlmIChyZW1haW5pbmdDbGFzc0JpdHMucXVpY2tHZXQoaSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKG9sZENs
YXNzZXNbaV0uaW1wbCgpKTsKKyAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKHsgb2xkQ2xh
c3Nlc1tpXS5pbXBsKCksIENsYXNzQ2hhbmdlVHlwZTo6UmVtb3ZlIH0pOwogICAgIH0KIAogICAg
IHJldHVybiBjaGFuZ2VkQ2xhc3NlczsKQEAgLTg0LDE2ICs5MSwxNiBAQCBzdGF0aWMgQ2xhc3ND
aGFuZ2VWZWN0b3IgY29tcHV0ZUNsYXNzQ2hhbmdlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9s
ZENsYXNzZXMsCiAKIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1dGVJbnZhbGlk
YXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywgY29uc3QgU3BhY2VTcGxp
dFN0cmluZyYgbmV3Q2xhc3NlcykKIHsKLSAgICBhdXRvIGNoYW5nZWRDbGFzc2VzID0gY29tcHV0
ZUNsYXNzQ2hhbmdlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOworICAgIGF1dG8gY2xhc3NDaGFu
Z2VzID0gY29tcHV0ZUNsYXNzQ2hhbmdlcyhvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKTsKIAogICAg
IGJvb2wgc2hvdWxkSW52YWxpZGF0ZUN1cnJlbnQgPSBmYWxzZTsKICAgICBib29sIG1heUFmZmVj
dFN0eWxlSW5TaGFkb3dUcmVlID0gZmFsc2U7CiAKICAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyht
X2VsZW1lbnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heUFm
ZmVjdFNoYWRvd1RyZWUpIHsKLSAgICAgICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjaGFu
Z2VkQ2xhc3NlcykgewotICAgICAgICAgICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUgJiYgZmVh
dHVyZXMuY2xhc3NSdWxlcy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQorICAgICAgICBmb3IgKGF1
dG8mIGNsYXNzQ2hhbmdlIDogY2xhc3NDaGFuZ2VzKSB7CisgICAgICAgICAgICBpZiAobWF5QWZm
ZWN0U2hhZG93VHJlZSAmJiBmZWF0dXJlcy5jbGFzc1J1bGVzLmNvbnRhaW5zKGNsYXNzQ2hhbmdl
LmNsYXNzTmFtZSkpCiAgICAgICAgICAgICAgICAgbWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUg
PSB0cnVlOwotICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmNsYXNzZXNBZmZlY3RpbmdIb3N0LmNv
bnRhaW5zKGNoYW5nZWRDbGFzcykpCisgICAgICAgICAgICBpZiAoZmVhdHVyZXMuY2xhc3Nlc0Fm
ZmVjdGluZ0hvc3QuY29udGFpbnMoY2xhc3NDaGFuZ2UuY2xhc3NOYW1lKSkKICAgICAgICAgICAg
ICAgICBzaG91bGRJbnZhbGlkYXRlQ3VycmVudCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9KTsK
QEAgLTEwOCwxNyArMTE1LDMyIEBAIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1
dGVJbnZhbGlkYXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhCiAKICAgICBhdXRv
JiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKIAotICAg
IGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGludmFsaWRhdGlvblJ1bGVTZXRzID0gcnVsZVNldHMuY2xhc3NJbnZhbGlkYXRpb25S
dWxlU2V0cyhjaGFuZ2VkQ2xhc3MpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGludmFsaWRh
dGlvblJ1bGVTZXQgOiAqaW52YWxpZGF0aW9uUnVsZVNldHMpCi0gICAgICAgICAgICAgICAgSW52
YWxpZGF0b3I6OmFkZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMobV9tYXRjaEVsZW1lbnRSdWxlU2V0
cywgaW52YWxpZGF0aW9uUnVsZVNldCk7CisgICAgYXV0byBpbnZhbGlkYXRlQmVmb3JlQ2hhbmdl
ID0gW10oQ2xhc3NDaGFuZ2VUeXBlIGNsYXNzQ2hhbmdlVHlwZSwgSXNOZWdhdGlvbiBpc05lZ2F0
aW9uKSB7CisgICAgICAgIGlmIChjbGFzc0NoYW5nZVR5cGUgPT0gQ2xhc3NDaGFuZ2VUeXBlOjpS
ZW1vdmUpCisgICAgICAgICAgICByZXR1cm4gaXNOZWdhdGlvbiA9PSBJc05lZ2F0aW9uOjpObzsK
KyAgICAgICAgcmV0dXJuIGlzTmVnYXRpb24gPT0gSXNOZWdhdGlvbjo6WWVzOworICAgIH07CisK
KyAgICBmb3IgKGF1dG8mIGNsYXNzQ2hhbmdlIDogY2xhc3NDaGFuZ2VzKSB7CisgICAgICAgIGlm
IChhdXRvKiBpbnZhbGlkYXRpb25SdWxlU2V0cyA9IHJ1bGVTZXRzLmNsYXNzSW52YWxpZGF0aW9u
UnVsZVNldHMoY2xhc3NDaGFuZ2UuY2xhc3NOYW1lKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
JiBpbnZhbGlkYXRpb25SdWxlU2V0IDogKmludmFsaWRhdGlvblJ1bGVTZXRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGludmFsaWRhdGVCZWZvcmVDaGFuZ2UoY2xhc3NDaGFuZ2UudHlwZSwgaW52
YWxpZGF0aW9uUnVsZVNldC5pc05lZ2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgSW52YWxp
ZGF0b3I6OmFkZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMobV9iZWZvcmVDaGFuZ2VSdWxlU2V0cywg
aW52YWxpZGF0aW9uUnVsZVNldCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBJbnZhbGlkYXRvcjo6YWRkVG9NYXRjaEVsZW1lbnRSdWxlU2V0cyhtX2FmdGVyQ2hh
bmdlUnVsZVNldHMsIGludmFsaWRhdGlvblJ1bGVTZXQpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRl
U3R5bGVXaXRoUnVsZVNldHMoKQordm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxp
ZGF0ZUJlZm9yZUNoYW5nZSgpCit7CisgICAgSW52YWxpZGF0b3I6OmludmFsaWRhdGVXaXRoTWF0
Y2hFbGVtZW50UnVsZVNldHMobV9lbGVtZW50LCBtX2JlZm9yZUNoYW5nZVJ1bGVTZXRzKTsKK30K
Kwordm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZUFmdGVyQ2hhbmdlKCkK
IHsKLSAgICBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVdpdGhNYXRjaEVsZW1lbnRSdWxlU2V0cyht
X2VsZW1lbnQsIG1fbWF0Y2hFbGVtZW50UnVsZVNldHMpOworICAgIEludmFsaWRhdG9yOjppbnZh
bGlkYXRlV2l0aE1hdGNoRWxlbWVudFJ1bGVTZXRzKG1fZWxlbWVudCwgbV9hZnRlckNoYW5nZVJ1
bGVTZXRzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3ND
aGFuZ2VJbnZhbGlkYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmgKaW5kZXggNzY5MGJiMDY3ZTZhMDM5YmZmNDBmZmFkMzA4N2Q4MDc5OTkzMWFl
MC4uY2FlMDVlNWQyNGYxOGRkYTZhOTU0NzhmYWZlNDI3ZmNmNzQ0OWVhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oCkBAIC00MiwxMiArNDIs
MTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZUludmFsaWRhdGlvbihj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBuZXdDbGFzc2VzKTsKLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZVdpdGhSdWxlU2V0cygpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZUJlZm9yZUNoYW5nZSgpOworICAgIHZvaWQgaW52YWxpZGF0ZUFm
dGVyQ2hhbmdlKCk7CiAKICAgICBjb25zdCBib29sIG1faXNFbmFibGVkOwogICAgIEVsZW1lbnQm
IG1fZWxlbWVudDsKIAotICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRSdWxlU2V0cyBtX21h
dGNoRWxlbWVudFJ1bGVTZXRzOworICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRSdWxlU2V0
cyBtX2JlZm9yZUNoYW5nZVJ1bGVTZXRzOworICAgIEludmFsaWRhdG9yOjpNYXRjaEVsZW1lbnRS
dWxlU2V0cyBtX2FmdGVyQ2hhbmdlUnVsZVNldHM7CiB9OwogCiBpbmxpbmUgQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb246OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IG5ld0NsYXNzZXMpCkBAIC01OCwxNCArNjAsMTQgQEAgaW5saW5lIENsYXNzQ2hhbmdlSW52YWxp
ZGF0aW9uOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbihFbGVtZW50JiBlbGVtZW50LCBjb25zdAog
ICAgIGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICBjb21wdXRlSW52YWxp
ZGF0aW9uKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOwotICAgIGludmFsaWRhdGVTdHlsZVdpdGhS
dWxlU2V0cygpOworICAgIGludmFsaWRhdGVCZWZvcmVDaGFuZ2UoKTsKIH0KIAogaW5saW5lIENs
YXNzQ2hhbmdlSW52YWxpZGF0aW9uOjp+Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24oKQogewogICAg
IGlmICghbV9pc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnZhbGlkYXRlU3R5bGVX
aXRoUnVsZVNldHMoKTsKKyAgICBpbnZhbGlkYXRlQWZ0ZXJDaGFuZ2UoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuY3BwCmluZGV4IDdkN2RjN2FkOWMzZGRjZDdiZmZlYTNm
NDM3M2Y1NjdkOTNjNjZkOWMuLjEyZTBlZDQxMTFkMGUwZDYyODYyZTg3YTBlZjNmYzc3NTI3MmIw
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5jcHAKQEAgLTg0LDkgKzg0LDE2IEBA
IFJ1bGVBbmRTZWxlY3Rvcjo6UnVsZUFuZFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSkKIH0KIAogCi1SdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUoY29uc3QgUnVsZURhdGEmIHJ1bGVE
YXRhLCBNYXRjaEVsZW1lbnQgbWF0Y2hFbGVtZW50KQorUnVsZUZlYXR1cmU6OlJ1bGVGZWF0dXJl
KGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgSXNO
ZWdhdGlvbiBpc05lZ2F0aW9uKQogICAgIDogUnVsZUFuZFNlbGVjdG9yKHJ1bGVEYXRhKQogICAg
ICwgbWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCkKKyAgICAsIGlzTmVnYXRpb24oaXNOZWdhdGlv
bikKK3sKK30KKworUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0
dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBkYXRhLCBNYXRjaEVs
ZW1lbnQgbWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uIGlzTmVnYXRpb24sIGNvbnN0IENTU1NlbGVj
dG9yKiBpbnZhbGlkYXRpb25TZWxlY3RvcikKKyAgICA6IFJ1bGVGZWF0dXJlKGRhdGEsIG1hdGNo
RWxlbWVudCwgaXNOZWdhdGlvbikKKyAgICAsIGludmFsaWRhdGlvblNlbGVjdG9yKGludmFsaWRh
dGlvblNlbGVjdG9yKQogewogfQogCkBAIC0yMDAsNyArMjA3LDcgQEAgc3RhdGljIE1hdGNoRWxl
bWVudCBjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQoTWF0Y2hFbGVtZW50IG1hdGNoRWxl
bWVudCwgY28KICAgICByZXR1cm4gbWF0Y2hFbGVtZW50OwogfTsKIAotdm9pZCBSdWxlRmVhdHVy
ZVNldDo6cmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0b3JGZWF0
dXJlcyYgc2VsZWN0b3JGZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3ImIGZpcnN0U2VsZWN0b3Is
IE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQpCit2b2lkIFJ1bGVGZWF0dXJlU2V0OjpyZWN1cnNp
dmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiBzZWxlY3Rv
ckZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3RvciYgZmlyc3RTZWxlY3RvciwgTWF0Y2hFbGVtZW50
IG1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbiBpc05lZ2F0aW9uKQogewogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9ICZmaXJzdFNlbGVjdG9yOwogICAgIGRvIHsKQEAgLTIwOSwxOCAr
MjE2LDE4IEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVz
RnJvbVNlbGVjdG9yKFNlbGVjdG9yRmVhdHVyZXMmIHNlCiAgICAgICAgICAgICBpZiAobWF0Y2hF
bGVtZW50ID09IE1hdGNoRWxlbWVudDo6UGFyZW50IHx8IG1hdGNoRWxlbWVudCA9PSBNYXRjaEVs
ZW1lbnQ6OkFuY2VzdG9yKQogICAgICAgICAgICAgICAgIGlkc01hdGNoaW5nQW5jZXN0b3JzSW5S
dWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNIYXNQ
c2V1ZG9DbGFzc01hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNl
bGVjdG9yRmVhdHVyZXMuaWRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzZWxlY3Rvci0+dmFsdWUo
KSwgbWF0Y2hFbGVtZW50KSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5pZHMu
YXBwZW5kKHsgc2VsZWN0b3ItPnZhbHVlKCksIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsK
ICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xh
c3MpCi0gICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmNsYXNzZXMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKHNlbGVjdG9yLT52YWx1ZSgpLCBtYXRjaEVsZW1lbnQpKTsKKyAgICAgICAgICAgIHNl
bGVjdG9yRmVhdHVyZXMuY2xhc3Nlcy5hcHBlbmQoeyBzZWxlY3Rvci0+dmFsdWUoKSwgbWF0Y2hF
bGVtZW50LCBpc05lZ2F0aW9uIH0pOwogICAgICAgICBlbHNlIGlmIChzZWxlY3Rvci0+bWF0Y2go
KSA9PSBDU1NTZWxlY3Rvcjo6VGFnKSB7CiAgICAgICAgICAgICBpZiAoaXNIYXNQc2V1ZG9DbGFz
c01hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVh
dHVyZXMudGFncy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3ItPnRhZ0xvd2VyY2FzZUxv
Y2FsTmFtZSgpLCBtYXRjaEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RvckZlYXR1
cmVzLnRhZ3MuYXBwZW5kKHsgc2VsZWN0b3ItPnRhZ0xvd2VyY2FzZUxvY2FsTmFtZSgpLCBtYXRj
aEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPmlz
QXR0cmlidXRlU2VsZWN0b3IoKSkgewogICAgICAgICAgICAgYXV0byYgY2Fub25pY2FsTG9jYWxO
YW1lID0gc2VsZWN0b3ItPmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpOwogICAgICAgICAg
ICAgYXV0byYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpOwog
ICAgICAgICAgICAgYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVsZXMuYWRkKGNhbm9u
aWNhbExvY2FsTmFtZSk7CiAgICAgICAgICAgICBhdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlcy5h
ZGQobG9jYWxOYW1lKTsKLSAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3IsIG1hdGNoRWxlbWVudCkpOworICAgICAgICAg
ICAgc2VsZWN0b3JGZWF0dXJlcy5hdHRyaWJ1dGVzLmFwcGVuZCh7IHNlbGVjdG9yLCBtYXRjaEVs
ZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPm1hdGNo
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRGaXJzdExpbmU6CkBAIC0yMzQsMTggKzI0MSwyMiBAQCB2b2lk
IFJ1bGVGZWF0dXJlU2V0OjpyZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihT
ZWxlY3RvckZlYXR1cmVzJiBzZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHNl
bGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgewogICAgICAgICAg
ICAgaWYgKCFpc0xvZ2ljYWxDb21iaW5hdGlvblBzZXVkb0NsYXNzKHNlbGVjdG9yLT5wc2V1ZG9D
bGFzc1R5cGUoKSkpCi0gICAgICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFz
c2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzZWxlY3RvciwgbWF0Y2hFbGVtZW50KSk7CisgICAg
ICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFzc2VzLmFwcGVuZCh7IHNlbGVj
dG9yLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIXNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1Np
YmxpbmdTZWxlY3RvcigpKQogICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5oYXNTaWJsaW5n
U2VsZWN0b3IgPSB0cnVlOwogCiAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNl
bGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgeworICAgICAgICAgICAgYXV0
byBzdWJTZWxlY3RvcklzTmVnYXRpb24gPSBpc05lZ2F0aW9uOworICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBzZWxlY3Rvci0+
cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90KQorICAgICAg
ICAgICAgICAgIHN1YlNlbGVjdG9ySXNOZWdhdGlvbiA9IGlzTmVnYXRpb24gPT0gSXNOZWdhdGlv
bjo6Tm8gPyBJc05lZ2F0aW9uOjpZZXMgOiBJc05lZ2F0aW9uOjpObzsKKwogICAgICAgICAgICAg
Zm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0
KCk7IHN1YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJT
ZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBhdXRvIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
ID0gY29tcHV0ZVN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCwgKnNlbGVjdG9y
LCAqc3ViU2VsZWN0b3IpOwogICAgICAgICAgICAgICAgIGlmICghc2VsZWN0b3JGZWF0dXJlcy5o
YXNTaWJsaW5nU2VsZWN0b3IgJiYgc2VsZWN0b3ItPmlzU2libGluZ1NlbGVjdG9yKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihzZWxlY3RvckZlYXR1cmVzLCAqc3ViU2VsZWN0b3IsIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
KTsKKyAgICAgICAgICAgICAgICByZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3Rv
cihzZWxlY3RvckZlYXR1cmVzLCAqc3ViU2VsZWN0b3IsIHN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50
LCBzdWJTZWxlY3RvcklzTmVnYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTMwNiwxMCArMzE3LDEwIEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJlcyhj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAKICAgICBhdXRvIGFkZFRvTWFwID0gWyZdKGF1dG8m
IG1hcCwgYXV0byYgZW50cmllcywgYXV0byBob3N0QWZmZWN0aW5nTmFtZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKLSAgICAgICAgICAgIGF1dG8mIFtuYW1lLCBt
YXRjaEVsZW1lbnRdID0gZW50cnk7CisgICAgICAgICAgICBhdXRvJiBbbmFtZSwgbWF0Y2hFbGVt
ZW50LCBpc05lZ2F0aW9uXSA9IGVudHJ5OwogICAgICAgICAgICAgbWFwLmVuc3VyZShuYW1lLCBb
XSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UnVsZUZlYXR1cmVWZWN0b3I+
KCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7IHJ1bGVEYXRhLCBt
YXRjaEVsZW1lbnQgfSk7CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7
IHJ1bGVEYXRhLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAKICAgICAgICAgICAgIHNl
dFVzZXNNYXRjaEVsZW1lbnQobWF0Y2hFbGVtZW50KTsKIApAQCAtMzI0LDIzICszMzUsMjEgQEAg
dm9pZCBSdWxlRmVhdHVyZVNldDo6Y29sbGVjdEZlYXR1cmVzKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSkKICAgICBhZGRUb01hcChpZFJ1bGVzLCBzZWxlY3RvckZlYXR1cmVzLmlkcywgbnVsbHB0
cik7CiAgICAgYWRkVG9NYXAoY2xhc3NSdWxlcywgc2VsZWN0b3JGZWF0dXJlcy5jbGFzc2VzLCAm
Y2xhc3Nlc0FmZmVjdGluZ0hvc3QpOwogCi0gICAgZm9yIChhdXRvJiBzZWxlY3RvckFuZE1hdGNo
IDogc2VsZWN0b3JGZWF0dXJlcy5hdHRyaWJ1dGVzKSB7Ci0gICAgICAgIGF1dG8qIHNlbGVjdG9y
ID0gc2VsZWN0b3JBbmRNYXRjaC5maXJzdDsKLSAgICAgICAgYXV0byBtYXRjaEVsZW1lbnQgPSBz
ZWxlY3RvckFuZE1hdGNoLnNlY29uZDsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2VsZWN0b3JG
ZWF0dXJlcy5hdHRyaWJ1dGVzKSB7CisgICAgICAgIGF1dG8gW3NlbGVjdG9yLCBtYXRjaEVsZW1l
bnQsIGlzTmVnYXRpb25dID0gZW50cnk7CiAgICAgICAgIGF0dHJpYnV0ZVJ1bGVzLmVuc3VyZShz
ZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSwgW10gewogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJl
V2l0aEludmFsaWRhdGlvblNlbGVjdG9yPj4oKTsKLSAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50LCBzZWxlY3RvciB9KTsKKyAgICAgICAg
fSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50LCBpc05l
Z2F0aW9uLCBzZWxlY3RvciB9KTsKICAgICAgICAgaWYgKG1hdGNoRWxlbWVudCA9PSBNYXRjaEVs
ZW1lbnQ6Okhvc3QpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzQWZmZWN0aW5nSG9zdC5hZGQoc2Vs
ZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkp
OwogICAgICAgICBzZXRVc2VzTWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCk7CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBzZWxlY3RvckFuZE1hdGNoIDogc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9D
bGFzc2VzKSB7Ci0gICAgICAgIGF1dG8qIHNlbGVjdG9yID0gc2VsZWN0b3JBbmRNYXRjaC5maXJz
dDsKLSAgICAgICAgYXV0byBtYXRjaEVsZW1lbnQgPSBzZWxlY3RvckFuZE1hdGNoLnNlY29uZDsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2VsZWN0b3JGZWF0dXJlcy5wc2V1ZG9DbGFzc2VzKSB7
CisgICAgICAgIGF1dG8gW3NlbGVjdG9yLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb25dID0gZW50
cnk7CiAgICAgICAgIHBzZXVkb0NsYXNzUnVsZXMuZW5zdXJlKG1ha2VQc2V1ZG9DbGFzc0ludmFs
aWRhdGlvbktleSgqc2VsZWN0b3IpLCBbXSB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOwotICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFw
cGVuZCh7IHJ1bGVEYXRhLCBtYXRjaEVsZW1lbnQgfSk7CisgICAgICAgIH0pLml0ZXJhdG9yLT52
YWx1ZS0+YXBwZW5kKHsgcnVsZURhdGEsIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsKIAog
ICAgICAgICBpZiAobWF0Y2hFbGVtZW50ID09IE1hdGNoRWxlbWVudDo6SG9zdCkKICAgICAgICAg
ICAgIHBzZXVkb0NsYXNzZXNBZmZlY3RpbmdIb3N0LmFkZChzZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmgKaW5kZXggN2ZkN2VkZjIyZDkzNDNl
YjZkMmExMGFiYWViMmJlYzg5MTkzNmQ1OC4uZDg0MDZmODhkNDYyZTU2NGRjYTQxMzE2N2EzNDg0
OTNjZDA1ZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5oCkBAIC01NSw2ICs1NSw4
IEBAIGVudW0gY2xhc3MgTWF0Y2hFbGVtZW50IDogdWludDhfdCB7CiB9OwogY29uc3RleHByIHVu
c2lnbmVkIG1hdGNoRWxlbWVudENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1hdGNoRWxl
bWVudDo6SG9zdCkgKyAxOwogCitlbnVtIGNsYXNzIElzTmVnYXRpb24gOiBib29sIHsgTm8sIFll
cyB9OworCiAvLyBGb3IgTVNWQy4KICNwcmFnbWEgcGFjayhwdXNoLCA0KQogc3RydWN0IFJ1bGVB
bmRTZWxlY3RvciB7CkBAIC02NiwxNyArNjgsMTUgQEAgc3RydWN0IFJ1bGVBbmRTZWxlY3RvciB7
CiB9OwogCiBzdHJ1Y3QgUnVsZUZlYXR1cmUgOiBwdWJsaWMgUnVsZUFuZFNlbGVjdG9yIHsKLSAg
ICBSdWxlRmVhdHVyZShjb25zdCBSdWxlRGF0YSYsIE1hdGNoRWxlbWVudCk7CisgICAgUnVsZUZl
YXR1cmUoY29uc3QgUnVsZURhdGEmLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24pOwogCiAgICAg
TWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudDsKKyAgICBJc05lZ2F0aW9uIGlzTmVnYXRpb247IC8v
IFdoZXRoZXIgdGhlIHNlbGVjdG9yIGlzIGluIGEgKG5vbi1wYWlyZWQpIDpub3QoKSBjb250ZXh0
LgogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJ1bGVGZWF0dXJlKSA8PSAxNiwgIlJ1bGVGZWF0
dXJlIGlzIGEgZnJxdWVudGx5IGFsb2NhdGVkIG9iamVjdC4gS2VlcCBpdCBzbWFsbC4iKTsKIAog
c3RydWN0IFJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yIDogcHVibGljIFJ1bGVG
ZWF0dXJlIHsKLSAgICBSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYgZGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0
b3IqIGludmFsaWRhdGlvblNlbGVjdG9yID0gbnVsbHB0cikKLSAgICAgICAgOiBSdWxlRmVhdHVy
ZShkYXRhLCBtYXRjaEVsZW1lbnQpCi0gICAgICAgICwgaW52YWxpZGF0aW9uU2VsZWN0b3IoaW52
YWxpZGF0aW9uU2VsZWN0b3IpCi0gICAgeyB9CisgICAgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0
aW9uU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24sIGNv
bnN0IENTU1NlbGVjdG9yKiBpbnZhbGlkYXRpb25TZWxlY3Rvcik7CiAKICAgICBjb25zdCBDU1NT
ZWxlY3RvciogaW52YWxpZGF0aW9uU2VsZWN0b3IgeyBudWxscHRyIH07CiB9OwpAQCAtMTI0LDEz
ICsxMjQsMTMgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU2VsZWN0b3JGZWF0dXJlcyB7CiAgICAg
ICAgIGJvb2wgaGFzU2libGluZ1NlbGVjdG9yIHsgZmFsc2UgfTsKIAotICAgICAgICBWZWN0b3I8
c3RkOjpwYWlyPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudD4sIDMyPiB0YWdzOwotICAgICAgICBW
ZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudD4sIDMyPiBpZHM7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgTWF0Y2hFbGVtZW50PiwgMzI+IGNsYXNz
ZXM7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgQ1NTU2VsZWN0b3IqLCBNYXRjaEVs
ZW1lbnQ+LCAzMj4gYXR0cmlidXRlczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBD
U1NTZWxlY3RvciosIE1hdGNoRWxlbWVudD4sIDMyPiBwc2V1ZG9DbGFzc2VzOworICAgICAgICBW
ZWN0b3I8c3RkOjp0dXBsZTxBdG9tU3RyaW5nLCBNYXRjaEVsZW1lbnQsIElzTmVnYXRpb24+LCAz
Mj4gdGFnczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRvbVN0cmluZywgTWF0Y2hFbGVt
ZW50LCBJc05lZ2F0aW9uPiwgMzI+IGlkczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRv
bVN0cmluZywgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uPiwgMzI+IGNsYXNzZXM7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnR1cGxlPGNvbnN0IENTU1NlbGVjdG9yKiwgTWF0Y2hFbGVtZW50LCBJc05l
Z2F0aW9uPiwgMzI+IGF0dHJpYnV0ZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnR1cGxlPGNvbnN0
IENTU1NlbGVjdG9yKiwgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uPiwgMzI+IHBzZXVkb0NsYXNz
ZXM7CiAgICAgfTsKLSAgICB2b2lkIHJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVzRnJvbVNlbGVj
dG9yKFNlbGVjdG9yRmVhdHVyZXMmLCBjb25zdCBDU1NTZWxlY3RvciYsIE1hdGNoRWxlbWVudCA9
IE1hdGNoRWxlbWVudDo6U3ViamVjdCk7CisgICAgdm9pZCByZWN1cnNpdmVseUNvbGxlY3RGZWF0
dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiwgY29uc3QgQ1NTU2VsZWN0b3ImLCBN
YXRjaEVsZW1lbnQgPSBNYXRjaEVsZW1lbnQ6OlN1YmplY3QsIElzTmVnYXRpb24gPSAgSXNOZWdh
dGlvbjo6Tm8pOwogfTsKIAogYm9vbCBpc0hhc1BzZXVkb0NsYXNzTWF0Y2hFbGVtZW50KE1hdGNo
RWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVs
ZVNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcApp
bmRleCA2NDFkZjQzNTBkOGVhMmU0ODVlZTYwMDhhODQ0NTI3YTY4YmZiMjEzLi42YjRmYzMwNTNj
ZGQxNTAzMjU2NTg2ODY5NzA5NDJkMmI0M2QzYjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTI0MCwzNyArMjQwLDMyIEBAIHN0YXRpYyBWZWN0
b3I8SW52YWxpZGF0aW9uUnVsZVNldD4qIGVuc3VyZUludmFsaWRhdGlvblJ1bGVTZXRzKGNvbnN0
IEtleVR5cGUmIGtlCiAgICAgICAgIGlmICghZmVhdHVyZXMpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBzdGQ6OmFycmF5PFJlZlB0cjxSdWxlU2V0PiwgbWF0Y2hFbGVt
ZW50Q291bnQ+IG1hdGNoRWxlbWVudEFycmF5OwotICAgICAgICBzdGQ6OmFycmF5PFZlY3Rvcjxj
b25zdCBDU1NTZWxlY3Rvcio+LCBtYXRjaEVsZW1lbnRDb3VudD4gaW52YWxpZGF0aW9uU2VsZWN0
b3JBcnJheTsKKyAgICAgICAgSGFzaE1hcDxzdGQ6OnR1cGxlPHVpbnQ4X3QsIGJvb2wsIGJvb2w+
LCBJbnZhbGlkYXRpb25SdWxlU2V0PiBpbnZhbGlkYXRpb25SdWxlU2V0TWFwOworCiAgICAgICAg
IGZvciAoYXV0byYgZmVhdHVyZSA6ICpmZWF0dXJlcykgewotICAgICAgICAgICAgYXV0byBhcnJh
eUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZlYXR1cmUubWF0Y2hFbGVtZW50KTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5SW5kZXggPCBtYXRjaEVsZW1lbnRBcnJheS5z
aXplKCkpOworICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6OnR1cGxlIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oZmVhdHVyZS5tYXRjaEVsZW1lbnQpLCBzdGF0aWNfY2FzdDxib29sPihmZWF0dXJl
LmlzTmVnYXRpb24pLCB0cnVlIH07CisKKyAgICAgICAgICAgIGF1dG8mIGludmFsaWRhdGlvblJ1
bGVTZXQgPSBpbnZhbGlkYXRpb25SdWxlU2V0TWFwLmVuc3VyZShrZXksIFsmXSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEludmFsaWRhdGlvblJ1bGVTZXQgeworICAgICAgICAgICAgICAgICAg
ICBmZWF0dXJlLm1hdGNoRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5pc05l
Z2F0aW9uLAorICAgICAgICAgICAgICAgICAgICBSdWxlU2V0OjpjcmVhdGUoKQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICAgICAgICAg
IGF1dG8mIHJ1bGVTZXQgPSBtYXRjaEVsZW1lbnRBcnJheVthcnJheUluZGV4XTsKLSAgICAgICAg
ICAgIGlmICghcnVsZVNldCkKLSAgICAgICAgICAgICAgICBydWxlU2V0ID0gUnVsZVNldDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBydWxlU2V0LT5hZGRSdWxlKCpmZWF0dXJlLnN0eWxlUnVsZSwg
ZmVhdHVyZS5zZWxlY3RvckluZGV4LCBmZWF0dXJlLnNlbGVjdG9yTGlzdEluZGV4KTsKKyAgICAg
ICAgICAgIGludmFsaWRhdGlvblJ1bGVTZXQucnVsZVNldC0+YWRkUnVsZSgqZmVhdHVyZS5zdHls
ZVJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVhdHVyZS5zZWxlY3Rvckxpc3RJbmRleCk7
CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBSdWxlRmVh
dHVyZVZlY3RvclR5cGU6OlZhbHVlVHlwZSwgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2Vs
ZWN0b3I+Ojp2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmludmFsaWRhdGlv
blNlbGVjdG9yKQotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5
W2FycmF5SW5kZXhdLmFwcGVuZChmZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0aW9uUnVsZVNldC5pbnZhbGlkYXRpb25TZWxlY3RvcnMu
YXBwZW5kKGZlYXR1cmUuaW52YWxpZGF0aW9uU2VsZWN0b3IpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgcnVsZVNldENvdW50ID0gMDsKLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBpdGVtIDogbWF0Y2hFbGVtZW50QXJyYXkpIHsKLSAgICAgICAgICAgIGlm
IChpdGVtKQotICAgICAgICAgICAgICAgICsrcnVsZVNldENvdW50OwotICAgICAgICB9Ci0KICAg
ICAgICAgYXV0byBpbnZhbGlkYXRpb25SdWxlU2V0cyA9IG1ha2VVbmlxdWU8VmVjdG9yPEludmFs
aWRhdGlvblJ1bGVTZXQ+PigpOwotICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+cmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShydWxlU2V0Q291bnQpOworICAgICAgICBpbnZhbGlkYXRpb25SdWxl
U2V0cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnZhbGlkYXRpb25SdWxlU2V0TWFwLnNpemUo
KSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBpbnZhbGlkYXRpb25SdWxlU2V0IDogaW52YWxpZGF0
aW9uUnVsZVNldE1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgIGludmFsaWRhdGlvblJ1bGVTZXRz
LT51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbnZhbGlkYXRpb25SdWxlU2V0KSk7CiAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoRWxlbWVudEFycmF5LnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hFbGVtZW50QXJyYXlbaV0pIHsKLSAgICAgICAgICAg
ICAgICBtYXRjaEVsZW1lbnRBcnJheVtpXS0+c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgICAg
ICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+dW5jaGVja2VkQXBwZW5kKHsgc3RhdGljX2Nhc3Q8TWF0
Y2hFbGVtZW50PihpKSwgbWF0Y2hFbGVtZW50QXJyYXlbaV0ucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5W2ldKSB9KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQogICAgICAgICByZXR1cm4gaW52YWxpZGF0aW9uUnVsZVNldHM7CiAgICAgfSkuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTY29wZVJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVs
ZVNldHMuaAppbmRleCA2ZTg1Nzc1ZmVkNGQ1YmE3NTE0Mjg4NjIxN2JjM2IxNGNlYWJmNGJkLi45
NTg2YzM4YTg0ZDU5MGM1OTkxNzViMTkyNWY3ZDkyMDhlMzg0MTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaApAQCAtNDQsMTAgKzQ0LDkgQEAgY2xhc3MgUmVz
b2x2ZXI7CiAKIHN0cnVjdCBJbnZhbGlkYXRpb25SdWxlU2V0IHsKICAgICBNYXRjaEVsZW1lbnQg
bWF0Y2hFbGVtZW50OwotICAgIFJlZjxSdWxlU2V0PiBydWxlU2V0OwotICAgIFZlY3Rvcjxjb25z
dCBDU1NTZWxlY3Rvcio+IGludmFsaWRhdGlvblNlbGVjdG9yczsKLQotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIElzTmVnYXRpb24gaXNOZWdhdGlvbjsKKyAgICBSZWZQdHI8UnVs
ZVNldD4gcnVsZVNldDsKKyAgICBWZWN0b3I8Y29uc3QgQ1NTU2VsZWN0b3IqPiBpbnZhbGlkYXRp
b25TZWxlY3RvcnMgeyB9OwogfTsKIAogY2xhc3MgU2NvcGVSdWxlU2V0cyB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448601</attachid>
            <date>2022-01-07 08:43:53 -0800</date>
            <delta_ts>2022-01-07 10:32:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234959-20220107184352.patch</filename>
            <type>text/plain</type>
            <size>22994</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmZmZDU5Y2UzNzY0MzVh
OWFjODIzYjY3NjVhOGUwNTlhMDc1MWEyYi4uY2VmZTM0OTUyOWY1NmI1MjM2ODYzOGZkYmFhODNh
NWYwZmE5NzM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTA3ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlcGFyYXRlIGlu
dmFsaWRhdGlvbiBydWxlc2V0cyBmb3IgbmVnYXRlZCBzZWxlY3RvcnMgKGluc2lkZSA6bm90KCkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhp
cyBpbmZvcm1hdGlvbiB0byByZWR1Y2UgdHJhdmVyc2FsIG9uIGNsYXNzIGNoYW5nZXMuIE90aGVy
IG11dGF0aW9ucyB3aWxsIGZvbGxvdy4KKworICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjb2xsZWN0Q2xhc3Nlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZUNsYXNzQ2hhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1dGVJbnZhbGlk
YXRpb24pOgorCisgICAgICAgIEFkZGluZyBhIGNsYXNzIGNhbiBvbmx5IG1ha2UgYSByZWd1bGFy
IHNlbGVjdG9yIChub3QgaW5zaWRlIDpub3QoKSkgc3RhcnQgbWF0Y2hpbmcuCisgICAgICAgIEFk
ZGluZyBhIGNsYXNzIGNhbiBvbmx5IG1ha2UgYSBuZWdhdGVkIHNlbGVjdG9yIChpbnNpZGUgOm5v
dCgpKSBzdG9wIG1hdGNoaW5nLgorICAgICAgICBXZSBvbmx5IG5lZWQgdG8gaW52YWxpZGF0ZSBm
b3IgdGhlIGZpcnN0IGNhc2UgYWZ0ZXIgdGhlIG11dGF0aW9uIGhhcyBoYXBwZW5lZCBhbmQgZm9y
IHRoZSBzZWNvbmQKKyAgICAgICAgY2FzZSBiZWZvcmUgaXQgaGFwcGVucy4KKworICAgICAgICBU
aGVzZSBhcmUgcmV2ZXJzZWQgd2hlbiByZW1vdmluZyBhIGNsYXNzLgorCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVCZWZvcmVDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpp
bnZhbGlkYXRlQWZ0ZXJDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbXB1dGVD
bGFzc0NoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFu
Z2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZVdpdGhSdWxlU2V0cyk6IERlbGV0ZWQuCisg
ICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjp+
Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24pOgorICAgICAgICAqIHN0eWxlL1J1bGVGZWF0dXJlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVj
dG9yOjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVzRnJv
bVNlbGVjdG9yKToKKworICAgICAgICBDb21wdXRlIHRoZSBuZWdhdGlvbiBzdGF0ZS4gOm5vdChm
b28pIGlzIG5lZ2F0ZWQsIDpub3QoOm5vdChmb28pKSBpc24ndC4KKworICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAqIHN0
eWxlL1J1bGVGZWF0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1cmVX
aXRoSW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVj
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmVuc3VyZUludmFsaWRhdGlvblJ1bGVTZXRzKToKKwor
ICAgICAgICBNYWtlIHNlcGFyYXRlIHJ1bGVzZXQuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNj
b3BlUnVsZVNldHMuaDoKKwogMjAyMi0wMS0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgdGhhdCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBh
bHdheXMgY29tbWl0cyBsYXllciBwb3NpdGlvbiBjaGFuZ2VzIHRvIHJlZHVjZSBzY3JvbGxpbmcg
c3R1dHRlcnMgKHYyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZh
bGlkYXRpb24uY3BwCmluZGV4IDI5YzhmYjEwYWRiZjIzZmI0YjM4YzRlZTc4ZWZmOTAzOWQ4Y2Ni
ZDEuLjM3MGEwNGQwNWY2YjcwMTVmMWYxODA4OWU0OTBkYTdkMTNiMTA3OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKQEAgLTM0LDI2
ICszNCwzMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotdXNp
bmcgQ2xhc3NDaGFuZ2VWZWN0b3IgPSBWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCA0PjsKK2VudW0g
Y2xhc3MgQ2xhc3NDaGFuZ2VUeXBlIHsgQWRkLCBSZW1vdmUgfTsKIAotc3RhdGljIENsYXNzQ2hh
bmdlVmVjdG9yIGNvbGxlY3RDbGFzc2VzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzZXMp
CitzdHJ1Y3QgQ2xhc3NDaGFuZ2UgeworICAgIEF0b21TdHJpbmdJbXBsKiBjbGFzc05hbWU7Cisg
ICAgQ2xhc3NDaGFuZ2VUeXBlIHR5cGU7Cit9OworCit1c2luZyBDbGFzc0NoYW5nZVZlY3RvciA9
IFZlY3RvcjxDbGFzc0NoYW5nZSwgND47CisKK3N0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb2xs
ZWN0Q2xhc3Nlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc2VzLCBDbGFzc0NoYW5nZVR5
cGUgY2xhc3NDaGFuZ2VUeXBlKQogewogICAgIENsYXNzQ2hhbmdlVmVjdG9yIHJlc3VsdDsKICAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGNsYXNzZXMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2xhc3Nlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjbGFzc2VzW2ldLmltcGwoKSk7CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoeyBjbGFzc2VzW2ldLmltcGwoKSwgY2xhc3NDaGFuZ2VUeXBlIH0pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3NDaGFu
Z2UoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywgY29uc3QgU3BhY2VTcGxpdFN0
cmluZyYgbmV3Q2xhc3NlcykKK3N0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3ND
aGFuZ2VzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3Bs
aXRTdHJpbmcmIG5ld0NsYXNzZXMpCiB7CiAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG9sZENsYXNz
ZXMuc2l6ZSgpOwogICAgIHVuc2lnbmVkIG5ld1NpemUgPSBuZXdDbGFzc2VzLnNpemUoKTsKIAog
ICAgIGlmICghb2xkU2l6ZSkKLSAgICAgICAgcmV0dXJuIGNvbGxlY3RDbGFzc2VzKG5ld0NsYXNz
ZXMpOworICAgICAgICByZXR1cm4gY29sbGVjdENsYXNzZXMobmV3Q2xhc3NlcywgQ2xhc3NDaGFu
Z2VUeXBlOjpBZGQpOwogICAgIGlmICghbmV3U2l6ZSkKLSAgICAgICAgcmV0dXJuIGNvbGxlY3RD
bGFzc2VzKG9sZENsYXNzZXMpOworICAgICAgICByZXR1cm4gY29sbGVjdENsYXNzZXMob2xkQ2xh
c3NlcywgQ2xhc3NDaGFuZ2VUeXBlOjpSZW1vdmUpOwogCiAgICAgQ2xhc3NDaGFuZ2VWZWN0b3Ig
Y2hhbmdlZENsYXNzZXM7CiAKQEAgLTcwLDEzICs3NywxMyBAQCBzdGF0aWMgQ2xhc3NDaGFuZ2VW
ZWN0b3IgY29tcHV0ZUNsYXNzQ2hhbmdlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNz
ZXMsCiAgICAgICAgIH0KICAgICAgICAgaWYgKGZvdW5kRnJvbUJvdGgpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKG5ld0NsYXNzZXNbaV0uaW1w
bCgpKTsKKyAgICAgICAgY2hhbmdlZENsYXNzZXMuYXBwZW5kKHsgbmV3Q2xhc3Nlc1tpXS5pbXBs
KCksIENsYXNzQ2hhbmdlVHlwZTo6QWRkIH0pOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb2xkU2l6ZTsgKytpKSB7CiAgICAgICAgIC8vIElmIHRoZSBiaXQgaXMgbm90IHNl
dCB0aGUgY29ycmVzcG9uZGluZyBjbGFzcyBoYXMgYmVlbiByZW1vdmVkLgogICAgICAgICBpZiAo
cmVtYWluaW5nQ2xhc3NCaXRzLnF1aWNrR2V0KGkpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGNoYW5nZWRDbGFzc2VzLmFwcGVuZChvbGRDbGFzc2VzW2ldLmltcGwoKSk7CisgICAg
ICAgIGNoYW5nZWRDbGFzc2VzLmFwcGVuZCh7IG9sZENsYXNzZXNbaV0uaW1wbCgpLCBDbGFzc0No
YW5nZVR5cGU6OlJlbW92ZSB9KTsKICAgICB9CiAKICAgICByZXR1cm4gY2hhbmdlZENsYXNzZXM7
CkBAIC04NCwxNiArOTEsMTYgQEAgc3RhdGljIENsYXNzQ2hhbmdlVmVjdG9yIGNvbXB1dGVDbGFz
c0NoYW5nZShjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLAogCiB2b2lkIENsYXNz
Q2hhbmdlSW52YWxpZGF0aW9uOjpjb21wdXRlSW52YWxpZGF0aW9uKGNvbnN0IFNwYWNlU3BsaXRT
dHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMpCiB7
Ci0gICAgYXV0byBjaGFuZ2VkQ2xhc3NlcyA9IGNvbXB1dGVDbGFzc0NoYW5nZShvbGRDbGFzc2Vz
LCBuZXdDbGFzc2VzKTsKKyAgICBhdXRvIGNsYXNzQ2hhbmdlcyA9IGNvbXB1dGVDbGFzc0NoYW5n
ZXMob2xkQ2xhc3NlcywgbmV3Q2xhc3Nlcyk7CiAKICAgICBib29sIHNob3VsZEludmFsaWRhdGVD
dXJyZW50ID0gZmFsc2U7CiAgICAgYm9vbCBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IGZh
bHNlOwogCiAgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXMobV9lbGVtZW50LCBbJl0gKGNvbnN0IFJ1
bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlKSB7Ci0gICAg
ICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAgICAgICAg
ICAgIGlmIChtYXlBZmZlY3RTaGFkb3dUcmVlICYmIGZlYXR1cmVzLmNsYXNzUnVsZXMuY29udGFp
bnMoY2hhbmdlZENsYXNzKSkKKyAgICAgICAgZm9yIChhdXRvJiBjbGFzc0NoYW5nZSA6IGNsYXNz
Q2hhbmdlcykgeworICAgICAgICAgICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUgJiYgZmVhdHVy
ZXMuY2xhc3NSdWxlcy5jb250YWlucyhjbGFzc0NoYW5nZS5jbGFzc05hbWUpKQogICAgICAgICAg
ICAgICAgIG1heUFmZmVjdFN0eWxlSW5TaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICAgICAgICAgIGlm
IChmZWF0dXJlcy5jbGFzc2VzQWZmZWN0aW5nSG9zdC5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQor
ICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmNsYXNzZXNBZmZlY3RpbmdIb3N0LmNvbnRhaW5zKGNs
YXNzQ2hhbmdlLmNsYXNzTmFtZSkpCiAgICAgICAgICAgICAgICAgc2hvdWxkSW52YWxpZGF0ZUN1
cnJlbnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSk7CkBAIC0xMDgsMTcgKzExNSwzMiBAQCB2
b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpjb21wdXRlSW52YWxpZGF0aW9uKGNvbnN0IFNw
YWNlU3BsaXRTdHJpbmcmIG9sZENsYQogCiAgICAgYXV0byYgcnVsZVNldHMgPSBtX2VsZW1lbnQu
c3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CiAKLSAgICBmb3IgKGF1dG8qIGNoYW5nZWRDbGFz
cyA6IGNoYW5nZWRDbGFzc2VzKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnZhbGlkYXRpb25SdWxl
U2V0cyA9IHJ1bGVTZXRzLmNsYXNzSW52YWxpZGF0aW9uUnVsZVNldHMoY2hhbmdlZENsYXNzKSkg
ewotICAgICAgICAgICAgZm9yIChhdXRvJiBpbnZhbGlkYXRpb25SdWxlU2V0IDogKmludmFsaWRh
dGlvblJ1bGVTZXRzKQotICAgICAgICAgICAgICAgIEludmFsaWRhdG9yOjphZGRUb01hdGNoRWxl
bWVudFJ1bGVTZXRzKG1fbWF0Y2hFbGVtZW50UnVsZVNldHMsIGludmFsaWRhdGlvblJ1bGVTZXQp
OworICAgIGF1dG8gaW52YWxpZGF0ZUJlZm9yZUNoYW5nZSA9IFtdKENsYXNzQ2hhbmdlVHlwZSBj
bGFzc0NoYW5nZVR5cGUsIElzTmVnYXRpb24gaXNOZWdhdGlvbikgeworICAgICAgICBpZiAoY2xh
c3NDaGFuZ2VUeXBlID09IENsYXNzQ2hhbmdlVHlwZTo6UmVtb3ZlKQorICAgICAgICAgICAgcmV0
dXJuIGlzTmVnYXRpb24gPT0gSXNOZWdhdGlvbjo6Tm87CisgICAgICAgIHJldHVybiBpc05lZ2F0
aW9uID09IElzTmVnYXRpb246OlllczsKKyAgICB9OworCisgICAgZm9yIChhdXRvJiBjbGFzc0No
YW5nZSA6IGNsYXNzQ2hhbmdlcykgeworICAgICAgICBpZiAoYXV0byogaW52YWxpZGF0aW9uUnVs
ZVNldHMgPSBydWxlU2V0cy5jbGFzc0ludmFsaWRhdGlvblJ1bGVTZXRzKGNsYXNzQ2hhbmdlLmNs
YXNzTmFtZSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaW52YWxpZGF0aW9uUnVsZVNldCA6
ICppbnZhbGlkYXRpb25SdWxlU2V0cykgeworICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkYXRl
QmVmb3JlQ2hhbmdlKGNsYXNzQ2hhbmdlLnR5cGUsIGludmFsaWRhdGlvblJ1bGVTZXQuaXNOZWdh
dGlvbikpCisgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdG9yOjphZGRUb01hdGNoRWxlbWVu
dFJ1bGVTZXRzKG1fYmVmb3JlQ2hhbmdlUnVsZVNldHMsIGludmFsaWRhdGlvblJ1bGVTZXQpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0b3I6OmFk
ZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMobV9hZnRlckNoYW5nZVJ1bGVTZXRzLCBpbnZhbGlkYXRp
b25SdWxlU2V0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBD
bGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlV2l0aFJ1bGVTZXRzKCkKK3Zv
aWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVCZWZvcmVDaGFuZ2UoKQorewor
ICAgIEludmFsaWRhdG9yOjppbnZhbGlkYXRlV2l0aE1hdGNoRWxlbWVudFJ1bGVTZXRzKG1fZWxl
bWVudCwgbV9iZWZvcmVDaGFuZ2VSdWxlU2V0cyk7Cit9CisKK3ZvaWQgQ2xhc3NDaGFuZ2VJbnZh
bGlkYXRpb246OmludmFsaWRhdGVBZnRlckNoYW5nZSgpCiB7Ci0gICAgSW52YWxpZGF0b3I6Omlu
dmFsaWRhdGVXaXRoTWF0Y2hFbGVtZW50UnVsZVNldHMobV9lbGVtZW50LCBtX21hdGNoRWxlbWVu
dFJ1bGVTZXRzKTsKKyAgICBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVdpdGhNYXRjaEVsZW1lbnRS
dWxlU2V0cyhtX2VsZW1lbnQsIG1fYWZ0ZXJDaGFuZ2VSdWxlU2V0cyk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oCmluZGV4IDc2OTBi
YjA2N2U2YTAzOWJmZjQwZmZhZDMwODdkODA3OTk5MzFhZTAuLmNhZTA1ZTVkMjRmMThkZGE2YTk1
NDc4ZmFmZTQyN2ZjZjc0NDllYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Ns
YXNzQ2hhbmdlSW52YWxpZGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3ND
aGFuZ2VJbnZhbGlkYXRpb24uaApAQCAtNDIsMTIgKzQyLDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICB2b2lkIGNvbXB1dGVJbnZhbGlkYXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYg
b2xkQ2xhc3NlcywgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgbmV3Q2xhc3Nlcyk7Ci0gICAgdm9p
ZCBpbnZhbGlkYXRlU3R5bGVXaXRoUnVsZVNldHMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVCZWZv
cmVDaGFuZ2UoKTsKKyAgICB2b2lkIGludmFsaWRhdGVBZnRlckNoYW5nZSgpOwogCiAgICAgY29u
c3QgYm9vbCBtX2lzRW5hYmxlZDsKICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7CiAKLSAgICBJbnZh
bGlkYXRvcjo6TWF0Y2hFbGVtZW50UnVsZVNldHMgbV9tYXRjaEVsZW1lbnRSdWxlU2V0czsKKyAg
ICBJbnZhbGlkYXRvcjo6TWF0Y2hFbGVtZW50UnVsZVNldHMgbV9iZWZvcmVDaGFuZ2VSdWxlU2V0
czsKKyAgICBJbnZhbGlkYXRvcjo6TWF0Y2hFbGVtZW50UnVsZVNldHMgbV9hZnRlckNoYW5nZVJ1
bGVTZXRzOwogfTsKIAogaW5saW5lIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpDbGFzc0NoYW5n
ZUludmFsaWRhdGlvbihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBv
bGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQpAQCAtNTgsMTQg
KzYwLDE0IEBAIGlubGluZSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Q2xhc3NDaGFuZ2VJbnZh
bGlkYXRpb24oRWxlbWVudCYgZWxlbWVudCwgY29uc3QKICAgICBpZiAoIW1faXNFbmFibGVkKQog
ICAgICAgICByZXR1cm47CiAgICAgY29tcHV0ZUludmFsaWRhdGlvbihvbGRDbGFzc2VzLCBuZXdD
bGFzc2VzKTsKLSAgICBpbnZhbGlkYXRlU3R5bGVXaXRoUnVsZVNldHMoKTsKKyAgICBpbnZhbGlk
YXRlQmVmb3JlQ2hhbmdlKCk7CiB9CiAKIGlubGluZSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6
fkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uKCkKIHsKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAg
ICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0ZVN0eWxlV2l0aFJ1bGVTZXRzKCk7CisgICAgaW52
YWxpZGF0ZUFmdGVyQ2hhbmdlKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVGZWF0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJl
LmNwcAppbmRleCA3ZDdkYzdhZDljM2RkY2Q3YmZmZWEzZjQzNzNmNTY3ZDkzYzY2ZDljLi4xMmUw
ZWQ0MTExZDBlMGQ2Mjg2MmU4N2EwZWYzZmM3NzUyNzJiMDZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZUZlYXR1cmUuY3BwCkBAIC04NCw5ICs4NCwxNiBAQCBSdWxlQW5kU2VsZWN0b3I6OlJ1bGVB
bmRTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiB9CiAKIAotUnVsZUZlYXR1cmU6
OlJ1bGVGZWF0dXJlKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNo
RWxlbWVudCkKK1J1bGVGZWF0dXJlOjpSdWxlRmVhdHVyZShjb25zdCBSdWxlRGF0YSYgcnVsZURh
dGEsIE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIElzTmVnYXRpb24gaXNOZWdhdGlvbikKICAg
ICA6IFJ1bGVBbmRTZWxlY3RvcihydWxlRGF0YSkKICAgICAsIG1hdGNoRWxlbWVudChtYXRjaEVs
ZW1lbnQpCisgICAgLCBpc05lZ2F0aW9uKGlzTmVnYXRpb24pCit7Cit9CisKK1J1bGVGZWF0dXJl
V2l0aEludmFsaWRhdGlvblNlbGVjdG9yOjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxl
Y3Rvcihjb25zdCBSdWxlRGF0YSYgZGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgSXNO
ZWdhdGlvbiBpc05lZ2F0aW9uLCBjb25zdCBDU1NTZWxlY3RvciogaW52YWxpZGF0aW9uU2VsZWN0
b3IpCisgICAgOiBSdWxlRmVhdHVyZShkYXRhLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24pCisg
ICAgLCBpbnZhbGlkYXRpb25TZWxlY3RvcihpbnZhbGlkYXRpb25TZWxlY3RvcikKIHsKIH0KIApA
QCAtMjAwLDcgKzIwNyw3IEBAIHN0YXRpYyBNYXRjaEVsZW1lbnQgY29tcHV0ZVN1YlNlbGVjdG9y
TWF0Y2hFbGVtZW50KE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIGNvCiAgICAgcmV0dXJuIG1h
dGNoRWxlbWVudDsKIH07CiAKLXZvaWQgUnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVj
dEZlYXR1cmVzRnJvbVNlbGVjdG9yKFNlbGVjdG9yRmVhdHVyZXMmIHNlbGVjdG9yRmVhdHVyZXMs
IGNvbnN0IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yLCBNYXRjaEVsZW1lbnQgbWF0Y2hFbGVt
ZW50KQordm9pZCBSdWxlRmVhdHVyZVNldDo6cmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9t
U2VsZWN0b3IoU2VsZWN0b3JGZWF0dXJlcyYgc2VsZWN0b3JGZWF0dXJlcywgY29uc3QgQ1NTU2Vs
ZWN0b3ImIGZpcnN0U2VsZWN0b3IsIE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIElzTmVnYXRp
b24gaXNOZWdhdGlvbikKIHsKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSAmZmly
c3RTZWxlY3RvcjsKICAgICBkbyB7CkBAIC0yMDksMTggKzIxNiwxOCBAQCB2b2lkIFJ1bGVGZWF0
dXJlU2V0OjpyZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZl
YXR1cmVzJiBzZQogICAgICAgICAgICAgaWYgKG1hdGNoRWxlbWVudCA9PSBNYXRjaEVsZW1lbnQ6
OlBhcmVudCB8fCBtYXRjaEVsZW1lbnQgPT0gTWF0Y2hFbGVtZW50OjpBbmNlc3RvcikKICAgICAg
ICAgICAgICAgICBpZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1
ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzSGFzUHNldWRvQ2xhc3NNYXRjaEVsZW1lbnQo
bWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmlkcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3ItPnZhbHVlKCksIG1hdGNoRWxlbWVudCkpOworICAg
ICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuaWRzLmFwcGVuZCh7IHNlbGVjdG9yLT52YWx1
ZSgpLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2Vs
ZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQotICAgICAgICAgICAgc2VsZWN0
b3JGZWF0dXJlcy5jbGFzc2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzZWxlY3Rvci0+dmFsdWUo
KSwgbWF0Y2hFbGVtZW50KSk7CisgICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmNsYXNzZXMu
YXBwZW5kKHsgc2VsZWN0b3ItPnZhbHVlKCksIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsK
ICAgICAgICAgZWxzZSBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlRhZykg
ewogICAgICAgICAgICAgaWYgKGlzSGFzUHNldWRvQ2xhc3NNYXRjaEVsZW1lbnQobWF0Y2hFbGVt
ZW50KSkKLSAgICAgICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLnRhZ3MuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHNlbGVjdG9yLT50YWdMb3dlcmNhc2VMb2NhbE5hbWUoKSwgbWF0Y2hFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy50YWdzLmFwcGVuZCh7IHNlbGVj
dG9yLT50YWdMb3dlcmNhc2VMb2NhbE5hbWUoKSwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0p
OwogICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsK
ICAgICAgICAgICAgIGF1dG8mIGNhbm9uaWNhbExvY2FsTmFtZSA9IHNlbGVjdG9yLT5hdHRyaWJ1
dGVDYW5vbmljYWxMb2NhbE5hbWUoKTsKICAgICAgICAgICAgIGF1dG8mIGxvY2FsTmFtZSA9IHNl
bGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKTsKICAgICAgICAgICAgIGF0dHJpYnV0ZUNh
bm9uaWNhbExvY2FsTmFtZXNJblJ1bGVzLmFkZChjYW5vbmljYWxMb2NhbE5hbWUpOwogICAgICAg
ICAgICAgYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRkKGxvY2FsTmFtZSk7Ci0gICAgICAg
ICAgICBzZWxlY3RvckZlYXR1cmVzLmF0dHJpYnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHNl
bGVjdG9yLCBtYXRjaEVsZW1lbnQpKTsKKyAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuYXR0
cmlidXRlcy5hcHBlbmQoeyBzZWxlY3RvciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0pOwog
ICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50
VHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Rmly
c3RMaW5lOgpAQCAtMjM0LDE4ICsyNDEsMjIgQEAgdm9pZCBSdWxlRmVhdHVyZVNldDo6cmVjdXJz
aXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0b3JGZWF0dXJlcyYgc2UKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAgICAgIGlmICghaXNMb2dpY2FsQ29tYmlu
YXRpb25Qc2V1ZG9DbGFzcyhzZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkpKQotICAgICAgICAg
ICAgICAgIHNlbGVjdG9yRmVhdHVyZXMucHNldWRvQ2xhc3Nlcy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIoc2VsZWN0b3IsIG1hdGNoRWxlbWVudCkpOworICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVh
dHVyZXMucHNldWRvQ2xhc3Nlcy5hcHBlbmQoeyBzZWxlY3RvciwgbWF0Y2hFbGVtZW50LCBpc05l
Z2F0aW9uIH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzZWxlY3RvckZlYXR1cmVzLmhh
c1NpYmxpbmdTZWxlY3RvciAmJiBzZWxlY3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKICAgICAg
ICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKIAogICAg
ICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+
c2VsZWN0b3JMaXN0KCkpIHsKKyAgICAgICAgICAgIGF1dG8gc3ViU2VsZWN0b3JJc05lZ2F0aW9u
ID0gaXNOZWdhdGlvbjsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYgc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCkKKyAgICAgICAgICAgICAgICBzdWJTZWxlY3Rvcklz
TmVnYXRpb24gPSBpc05lZ2F0aW9uID09IElzTmVnYXRpb246Ok5vID8gSXNOZWdhdGlvbjo6WWVz
IDogSXNOZWdhdGlvbjo6Tm87CisKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2Vs
ZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0b3IpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byBzdWJTZWxlY3Rvck1hdGNoRWxlbWVudCA9IGNvbXB1dGVTdWJTZWxlY3Rvck1h
dGNoRWxlbWVudChtYXRjaEVsZW1lbnQsICpzZWxlY3RvciwgKnN1YlNlbGVjdG9yKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXNlbGVjdG9yRmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yICYmIHNl
bGVjdG9yLT5pc1NpYmxpbmdTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgICAgICBzZWxlY3Rv
ckZlYXR1cmVzLmhhc1NpYmxpbmdTZWxlY3RvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVj
dXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3Ioc2VsZWN0b3JGZWF0dXJlcywgKnN1
YlNlbGVjdG9yLCBzdWJTZWxlY3Rvck1hdGNoRWxlbWVudCk7CisgICAgICAgICAgICAgICAgcmVj
dXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3Ioc2VsZWN0b3JGZWF0dXJlcywgKnN1
YlNlbGVjdG9yLCBzdWJTZWxlY3Rvck1hdGNoRWxlbWVudCwgc3ViU2VsZWN0b3JJc05lZ2F0aW9u
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0zMDYsMTAgKzMxNywxMCBAQCB2b2lk
IFJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
KQogCiAgICAgYXV0byBhZGRUb01hcCA9IFsmXShhdXRvJiBtYXAsIGF1dG8mIGVudHJpZXMsIGF1
dG8gaG9zdEFmZmVjdGluZ05hbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRy
aWVzKSB7Ci0gICAgICAgICAgICBhdXRvJiBbbmFtZSwgbWF0Y2hFbGVtZW50XSA9IGVudHJ5Owor
ICAgICAgICAgICAgYXV0byYgW25hbWUsIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbl0gPSBlbnRy
eTsKICAgICAgICAgICAgIG1hcC5lbnN1cmUobmFtZSwgW10gewogICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPFJ1bGVGZWF0dXJlVmVjdG9yPigpOwotICAgICAgICAgICAgfSkuaXRl
cmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50IH0pOworICAgICAg
ICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50
LCBpc05lZ2F0aW9uIH0pOwogCiAgICAgICAgICAgICBzZXRVc2VzTWF0Y2hFbGVtZW50KG1hdGNo
RWxlbWVudCk7CiAKQEAgLTMyNCwyMyArMzM1LDIxIEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNv
bGxlY3RGZWF0dXJlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAgICAgYWRkVG9NYXAoaWRS
dWxlcywgc2VsZWN0b3JGZWF0dXJlcy5pZHMsIG51bGxwdHIpOwogICAgIGFkZFRvTWFwKGNsYXNz
UnVsZXMsIHNlbGVjdG9yRmVhdHVyZXMuY2xhc3NlcywgJmNsYXNzZXNBZmZlY3RpbmdIb3N0KTsK
IAotICAgIGZvciAoYXV0byYgc2VsZWN0b3JBbmRNYXRjaCA6IHNlbGVjdG9yRmVhdHVyZXMuYXR0
cmlidXRlcykgewotICAgICAgICBhdXRvKiBzZWxlY3RvciA9IHNlbGVjdG9yQW5kTWF0Y2guZmly
c3Q7Ci0gICAgICAgIGF1dG8gbWF0Y2hFbGVtZW50ID0gc2VsZWN0b3JBbmRNYXRjaC5zZWNvbmQ7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcykgewor
ICAgICAgICBhdXRvIFtzZWxlY3RvciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uXSA9IGVudHJ5
OwogICAgICAgICBhdHRyaWJ1dGVSdWxlcy5lbnN1cmUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxv
Y2FsTmFtZSgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksIFtdIHsKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPFZlY3RvcjxSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rv
cj4+KCk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKHsgcnVsZURhdGEsIG1h
dGNoRWxlbWVudCwgc2VsZWN0b3IgfSk7CisgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+YXBw
ZW5kKHsgcnVsZURhdGEsIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiwgc2VsZWN0b3IgfSk7CiAg
ICAgICAgIGlmIChtYXRjaEVsZW1lbnQgPT0gTWF0Y2hFbGVtZW50OjpIb3N0KQogICAgICAgICAg
ICAgYXR0cmlidXRlc0FmZmVjdGluZ0hvc3QuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2Nh
bE5hbWUoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKICAgICAgICAgc2V0VXNlc01hdGNo
RWxlbWVudChtYXRjaEVsZW1lbnQpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgc2VsZWN0b3JB
bmRNYXRjaCA6IHNlbGVjdG9yRmVhdHVyZXMucHNldWRvQ2xhc3NlcykgewotICAgICAgICBhdXRv
KiBzZWxlY3RvciA9IHNlbGVjdG9yQW5kTWF0Y2guZmlyc3Q7Ci0gICAgICAgIGF1dG8gbWF0Y2hF
bGVtZW50ID0gc2VsZWN0b3JBbmRNYXRjaC5zZWNvbmQ7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6
IHNlbGVjdG9yRmVhdHVyZXMucHNldWRvQ2xhc3NlcykgeworICAgICAgICBhdXRvIFtzZWxlY3Rv
ciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uXSA9IGVudHJ5OwogICAgICAgICBwc2V1ZG9DbGFz
c1J1bGVzLmVuc3VyZShtYWtlUHNldWRvQ2xhc3NJbnZhbGlkYXRpb25LZXkoKnNlbGVjdG9yKSwg
W10gewogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4o
KTsKLSAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hF
bGVtZW50IH0pOworICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7IHJ1bGVEYXRh
LCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24gfSk7CiAKICAgICAgICAgaWYgKG1hdGNoRWxlbWVu
dCA9PSBNYXRjaEVsZW1lbnQ6Okhvc3QpCiAgICAgICAgICAgICBwc2V1ZG9DbGFzc2VzQWZmZWN0
aW5nSG9zdC5hZGQoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9S
dWxlRmVhdHVyZS5oCmluZGV4IDdmZDdlZGYyMmQ5MzQzZWI2ZDJhMTBhYmFlYjJiZWM4OTE5MzZk
NTguLmQ4NDA2Zjg4ZDQ2MmU1NjRkY2E0MTMxNjdhMzQ4NDkzY2QwNWU2M2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvUnVsZUZlYXR1cmUuaApAQCAtNTUsNiArNTUsOCBAQCBlbnVtIGNsYXNzIE1hdGNoRWxl
bWVudCA6IHVpbnQ4X3QgewogfTsKIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXRjaEVsZW1lbnRDb3Vu
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihNYXRjaEVsZW1lbnQ6Okhvc3QpICsgMTsKIAorZW51
bSBjbGFzcyBJc05lZ2F0aW9uIDogYm9vbCB7IE5vLCBZZXMgfTsKKwogLy8gRm9yIE1TVkMuCiAj
cHJhZ21hIHBhY2socHVzaCwgNCkKIHN0cnVjdCBSdWxlQW5kU2VsZWN0b3IgewpAQCAtNjYsMTcg
KzY4LDE1IEBAIHN0cnVjdCBSdWxlQW5kU2VsZWN0b3IgewogfTsKIAogc3RydWN0IFJ1bGVGZWF0
dXJlIDogcHVibGljIFJ1bGVBbmRTZWxlY3RvciB7Ci0gICAgUnVsZUZlYXR1cmUoY29uc3QgUnVs
ZURhdGEmLCBNYXRjaEVsZW1lbnQpOworICAgIFJ1bGVGZWF0dXJlKGNvbnN0IFJ1bGVEYXRhJiwg
TWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uKTsKIAogICAgIE1hdGNoRWxlbWVudCBtYXRjaEVsZW1l
bnQ7CisgICAgSXNOZWdhdGlvbiBpc05lZ2F0aW9uOyAvLyBXaGV0aGVyIHRoZSBzZWxlY3RvciBp
cyBpbiBhIChub24tcGFpcmVkKSA6bm90KCkgY29udGV4dC4KIH07CiBzdGF0aWNfYXNzZXJ0KHNp
emVvZihSdWxlRmVhdHVyZSkgPD0gMTYsICJSdWxlRmVhdHVyZSBpcyBhIGZycXVlbnRseSBhbG9j
YXRlZCBvYmplY3QuIEtlZXAgaXQgc21hbGwuIik7CiAKIHN0cnVjdCBSdWxlRmVhdHVyZVdpdGhJ
bnZhbGlkYXRpb25TZWxlY3RvciA6IHB1YmxpYyBSdWxlRmVhdHVyZSB7Ci0gICAgUnVsZUZlYXR1
cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIGRhdGEsIE1hdGNoRWxl
bWVudCBtYXRjaEVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBpbnZhbGlkYXRpb25TZWxlY3Rv
ciA9IG51bGxwdHIpCi0gICAgICAgIDogUnVsZUZlYXR1cmUoZGF0YSwgbWF0Y2hFbGVtZW50KQot
ICAgICAgICAsIGludmFsaWRhdGlvblNlbGVjdG9yKGludmFsaWRhdGlvblNlbGVjdG9yKQotICAg
IHsgfQorICAgIFJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yKGNvbnN0IFJ1bGVE
YXRhJiwgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uLCBjb25zdCBDU1NTZWxlY3RvciogaW52YWxp
ZGF0aW9uU2VsZWN0b3IpOwogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGludmFsaWRhdGlvblNl
bGVjdG9yIHsgbnVsbHB0ciB9OwogfTsKQEAgLTEyNCwxMyArMTI0LDEzIEBAIHByaXZhdGU6CiAg
ICAgc3RydWN0IFNlbGVjdG9yRmVhdHVyZXMgewogICAgICAgICBib29sIGhhc1NpYmxpbmdTZWxl
Y3RvciB7IGZhbHNlIH07CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBN
YXRjaEVsZW1lbnQ+LCAzMj4gdGFnczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3Ry
aW5nLCBNYXRjaEVsZW1lbnQ+LCAzMj4gaWRzOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEF0
b21TdHJpbmcsIE1hdGNoRWxlbWVudD4sIDMyPiBjbGFzc2VzOwotICAgICAgICBWZWN0b3I8c3Rk
OjpwYWlyPGNvbnN0IENTU1NlbGVjdG9yKiwgTWF0Y2hFbGVtZW50PiwgMzI+IGF0dHJpYnV0ZXM7
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgQ1NTU2VsZWN0b3IqLCBNYXRjaEVsZW1l
bnQ+LCAzMj4gcHNldWRvQ2xhc3NlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRvbVN0
cmluZywgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9uPiwgMzI+IHRhZ3M7CisgICAgICAgIFZlY3Rv
cjxzdGQ6OnR1cGxlPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbj4sIDMyPiBp
ZHM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnR1cGxlPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudCwg
SXNOZWdhdGlvbj4sIDMyPiBjbGFzc2VzOworICAgICAgICBWZWN0b3I8c3RkOjp0dXBsZTxjb25z
dCBDU1NTZWxlY3RvciosIE1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbj4sIDMyPiBhdHRyaWJ1dGVz
OworICAgICAgICBWZWN0b3I8c3RkOjp0dXBsZTxjb25zdCBDU1NTZWxlY3RvciosIE1hdGNoRWxl
bWVudCwgSXNOZWdhdGlvbj4sIDMyPiBwc2V1ZG9DbGFzc2VzOwogICAgIH07Ci0gICAgdm9pZCBy
ZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiwg
Y29uc3QgQ1NTU2VsZWN0b3ImLCBNYXRjaEVsZW1lbnQgPSBNYXRjaEVsZW1lbnQ6OlN1YmplY3Qp
OworICAgIHZvaWQgcmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0
b3JGZWF0dXJlcyYsIGNvbnN0IENTU1NlbGVjdG9yJiwgTWF0Y2hFbGVtZW50ID0gTWF0Y2hFbGVt
ZW50OjpTdWJqZWN0LCBJc05lZ2F0aW9uID0gIElzTmVnYXRpb246Ok5vKTsKIH07CiAKIGJvb2wg
aXNIYXNQc2V1ZG9DbGFzc01hdGNoRWxlbWVudChNYXRjaEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKaW5kZXggNjQxZGY0MzUwZDhlYTJlNDg1
ZWU2MDA4YTg0NDUyN2E2OGJmYjIxMy4uNmI0ZmMzMDUzY2RkMTUwMzI1NjU4Njg2OTcwOTQyZDJi
NDNkM2I2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVT
ZXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3Bw
CkBAIC0yNDAsMzcgKzI0MCwzMiBAQCBzdGF0aWMgVmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+
KiBlbnN1cmVJbnZhbGlkYXRpb25SdWxlU2V0cyhjb25zdCBLZXlUeXBlJiBrZQogICAgICAgICBp
ZiAoIWZlYXR1cmVzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgc3Rk
OjphcnJheTxSZWZQdHI8UnVsZVNldD4sIG1hdGNoRWxlbWVudENvdW50PiBtYXRjaEVsZW1lbnRB
cnJheTsKLSAgICAgICAgc3RkOjphcnJheTxWZWN0b3I8Y29uc3QgQ1NTU2VsZWN0b3IqPiwgbWF0
Y2hFbGVtZW50Q291bnQ+IGludmFsaWRhdGlvblNlbGVjdG9yQXJyYXk7CisgICAgICAgIEhhc2hN
YXA8c3RkOjp0dXBsZTx1aW50OF90LCBib29sLCBib29sPiwgSW52YWxpZGF0aW9uUnVsZVNldD4g
aW52YWxpZGF0aW9uUnVsZVNldE1hcDsKKwogICAgICAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiAq
ZmVhdHVyZXMpIHsKLSAgICAgICAgICAgIGF1dG8gYXJyYXlJbmRleCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihmZWF0dXJlLm1hdGNoRWxlbWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcnJheUluZGV4IDwgbWF0Y2hFbGVtZW50QXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGF1
dG8ga2V5ID0gc3RkOjp0dXBsZSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZlYXR1cmUubWF0Y2hF
bGVtZW50KSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZmVhdHVyZS5pc05lZ2F0aW9uKSwgdHJ1ZSB9Owor
CisgICAgICAgICAgICBhdXRvJiBpbnZhbGlkYXRpb25SdWxlU2V0ID0gaW52YWxpZGF0aW9uUnVs
ZVNldE1hcC5lbnN1cmUoa2V5LCBbJl0geworICAgICAgICAgICAgICAgIHJldHVybiBJbnZhbGlk
YXRpb25SdWxlU2V0IHsKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5tYXRjaEVsZW1lbnQs
CisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuaXNOZWdhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgUnVsZVNldDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgICAgICAgICBhdXRvJiBydWxlU2V0ID0gbWF0Y2hF
bGVtZW50QXJyYXlbYXJyYXlJbmRleF07Ci0gICAgICAgICAgICBpZiAoIXJ1bGVTZXQpCi0gICAg
ICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgICAgICAgICAgcnVs
ZVNldC0+YWRkUnVsZSgqZmVhdHVyZS5zdHlsZVJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwg
ZmVhdHVyZS5zZWxlY3Rvckxpc3RJbmRleCk7CisgICAgICAgICAgICBpbnZhbGlkYXRpb25SdWxl
U2V0LnJ1bGVTZXQtPmFkZFJ1bGUoKmZlYXR1cmUuc3R5bGVSdWxlLCBmZWF0dXJlLnNlbGVjdG9y
SW5kZXgsIGZlYXR1cmUuc2VsZWN0b3JMaXN0SW5kZXgpOwogICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgUnVsZUZlYXR1cmVWZWN0b3JUeXBlOjpWYWx1ZVR5
cGUsIFJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9yPjo6dmFsdWUpIHsKICAgICAg
ICAgICAgICAgICBpZiAoZmVhdHVyZS5pbnZhbGlkYXRpb25TZWxlY3RvcikKLSAgICAgICAgICAg
ICAgICAgICAgaW52YWxpZGF0aW9uU2VsZWN0b3JBcnJheVthcnJheUluZGV4XS5hcHBlbmQoZmVh
dHVyZS5pbnZhbGlkYXRpb25TZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGludmFsaWRh
dGlvblJ1bGVTZXQuaW52YWxpZGF0aW9uU2VsZWN0b3JzLmFwcGVuZChmZWF0dXJlLmludmFsaWRh
dGlvblNlbGVjdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHVuc2ln
bmVkIHJ1bGVTZXRDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IG1h
dGNoRWxlbWVudEFycmF5KSB7Ci0gICAgICAgICAgICBpZiAoaXRlbSkKLSAgICAgICAgICAgICAg
ICArK3J1bGVTZXRDb3VudDsKLSAgICAgICAgfQotCiAgICAgICAgIGF1dG8gaW52YWxpZGF0aW9u
UnVsZVNldHMgPSBtYWtlVW5pcXVlPFZlY3RvcjxJbnZhbGlkYXRpb25SdWxlU2V0Pj4oKTsKLSAg
ICAgICAgaW52YWxpZGF0aW9uUnVsZVNldHMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocnVsZVNl
dENvdW50KTsKKyAgICAgICAgaW52YWxpZGF0aW9uUnVsZVNldHMtPnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW52YWxpZGF0aW9uUnVsZVNldE1hcC5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0
byYgaW52YWxpZGF0aW9uUnVsZVNldCA6IGludmFsaWRhdGlvblJ1bGVTZXRNYXAudmFsdWVzKCkp
CisgICAgICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+dW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoaW52YWxpZGF0aW9uUnVsZVNldCkpOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXRjaEVsZW1lbnRBcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1h
dGNoRWxlbWVudEFycmF5W2ldKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hFbGVtZW50QXJyYXlb
aV0tPnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0aW9uUnVsZVNldHMt
PnVuY2hlY2tlZEFwcGVuZCh7IHN0YXRpY19jYXN0PE1hdGNoRWxlbWVudD4oaSksIG1hdGNoRWxl
bWVudEFycmF5W2ldLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoaW52YWxpZGF0aW9uU2VsZWN0
b3JBcnJheVtpXSkgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGludmFsaWRhdGlvblJ1bGVTZXRzOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmgKaW5kZXggNmU4NTc3NWZl
ZDRkNWJhNzUxNDI4ODYyMTdiYzNiMTRjZWFiZjRiZC4uOTU4NmMzOGE4NGQ1OTBjNTk5MTc1YjE5
MjVmN2Q5MjA4ZTM4NDE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
Y29wZVJ1bGVTZXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVT
ZXRzLmgKQEAgLTQ0LDEwICs0NCw5IEBAIGNsYXNzIFJlc29sdmVyOwogCiBzdHJ1Y3QgSW52YWxp
ZGF0aW9uUnVsZVNldCB7CiAgICAgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudDsKLSAgICBSZWY8
UnVsZVNldD4gcnVsZVNldDsKLSAgICBWZWN0b3I8Y29uc3QgQ1NTU2VsZWN0b3IqPiBpbnZhbGlk
YXRpb25TZWxlY3RvcnM7Ci0KLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBJc05l
Z2F0aW9uIGlzTmVnYXRpb247CisgICAgUmVmUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CisgICAgVmVj
dG9yPGNvbnN0IENTU1NlbGVjdG9yKj4gaW52YWxpZGF0aW9uU2VsZWN0b3JzIHsgfTsKIH07CiAK
IGNsYXNzIFNjb3BlUnVsZVNldHMgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448608</attachid>
            <date>2022-01-07 10:33:01 -0800</date>
            <delta_ts>2022-01-07 11:39:55 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-234959-20220107203300.patch</filename>
            <type>text/plain</type>
            <size>23004</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmZmZDU5Y2UzNzY0MzVh
OWFjODIzYjY3NjVhOGUwNTlhMDc1MWEyYi4uNzdlY2Y0ZWQ2ZDllOTllYjNlZjdiOGE0M2ZiNmFm
YjA5ZjI5ZmJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTA3ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIHNlcGFyYXRlIGlu
dmFsaWRhdGlvbiBydWxlc2V0cyBmb3IgbmVnYXRlZCBzZWxlY3RvcnMgKGluc2lkZSA6bm90KCkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NTkK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVc2UgdGhpcyBp
bmZvcm1hdGlvbiB0byByZWR1Y2UgdHJhdmVyc2FsIG9uIGNsYXNzIGNoYW5nZXMuIE90aGVyIG11
dGF0aW9ucyB3aWxsIGZvbGxvdy4KKworICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjb2xsZWN0Q2xhc3Nlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZUNsYXNzQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1dGVJbnZhbGlkYXRp
b24pOgorCisgICAgICAgIEFkZGluZyBhIGNsYXNzIGNhbiBvbmx5IG1ha2UgYSByZWd1bGFyIHNl
bGVjdG9yIChub3QgaW5zaWRlIDpub3QoKSkgc3RhcnQgbWF0Y2hpbmcuCisgICAgICAgIEFkZGlu
ZyBhIGNsYXNzIGNhbiBvbmx5IG1ha2UgYSBuZWdhdGVkIHNlbGVjdG9yIChpbnNpZGUgOm5vdCgp
KSBzdG9wIG1hdGNoaW5nLgorICAgICAgICBXZSBvbmx5IG5lZWQgdG8gaW52YWxpZGF0ZSBmb3Ig
dGhlIGZpcnN0IGNhc2UgYWZ0ZXIgdGhlIG11dGF0aW9uIGhhcyBoYXBwZW5lZCBhbmQgZm9yIHRo
ZSBzZWNvbmQKKyAgICAgICAgY2FzZSBiZWZvcmUgaXQgaGFwcGVucy4KKworICAgICAgICBUaGVz
ZSBhcmUgcmV2ZXJzZWQgd2hlbiByZW1vdmluZyBhIGNsYXNzLgorCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVCZWZvcmVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZh
bGlkYXRlQWZ0ZXJDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbXB1dGVDbGFz
c0NoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZVdpdGhSdWxlU2V0cyk6IERlbGV0ZWQuCisgICAg
ICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjp+Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb24pOgorICAgICAgICAqIHN0eWxlL1J1bGVGZWF0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlRmVhdHVyZTo6UnVsZUZlYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9y
OjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVzRnJvbVNl
bGVjdG9yKToKKworICAgICAgICBDb21wdXRlIHRoZSBuZWdhdGlvbiBzdGF0ZS4gOm5vdChmb28p
IGlzIG5lZ2F0ZWQsIDpub3QoOm5vdChmb28pKSBpc24ndC4KKworICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAqIHN0eWxl
L1J1bGVGZWF0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1cmVXaXRo
SW52YWxpZGF0aW9uU2VsZWN0b3I6OlJ1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmVuc3VyZUludmFsaWRhdGlvblJ1bGVTZXRzKToKKworICAg
ICAgICBNYWtlIHNlcGFyYXRlIHJ1bGVzZXQuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3Bl
UnVsZVNldHMuaDoKKwogMjAyMi0wMS0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgdGhhdCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBhbHdh
eXMgY29tbWl0cyBsYXllciBwb3NpdGlvbiBjaGFuZ2VzIHRvIHJlZHVjZSBzY3JvbGxpbmcgc3R1
dHRlcnMgKHYyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCmluZGV4IDI5YzhmYjEwYWRiZjIzZmI0YjM4YzRlZTc4ZWZmOTAzOWQ4Y2NiZDEu
LjAxODAyM2U1NjgwMTA2NjVkZTIzYzFkMjNlNDBkNTM0ZDAyNjU0MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKQEAgLTM0LDI2ICsz
NCwzMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotdXNpbmcg
Q2xhc3NDaGFuZ2VWZWN0b3IgPSBWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCA0PjsKK2VudW0gY2xh
c3MgQ2xhc3NDaGFuZ2VUeXBlIDogYm9vbCB7IEFkZCwgUmVtb3ZlIH07CiAKLXN0YXRpYyBDbGFz
c0NoYW5nZVZlY3RvciBjb2xsZWN0Q2xhc3Nlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFz
c2VzKQorc3RydWN0IENsYXNzQ2hhbmdlIHsKKyAgICBBdG9tU3RyaW5nSW1wbCogY2xhc3NOYW1l
IHsgfTsKKyAgICBDbGFzc0NoYW5nZVR5cGUgdHlwZTsKK307CisKK3VzaW5nIENsYXNzQ2hhbmdl
VmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0PjsKKworc3RhdGljIENsYXNzQ2hhbmdlVmVj
dG9yIGNvbGxlY3RDbGFzc2VzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzZXMsIENsYXNz
Q2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogewogICAgIENsYXNzQ2hhbmdlVmVjdG9yIHJlc3VsdDsK
ICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGNsYXNzZXMuc2l6ZSgpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2xhc3Nlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjbGFzc2VzW2ldLmltcGwoKSk7CisgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoeyBjbGFzc2VzW2ldLmltcGwoKSwgY2hhbmdlVHlwZSB9KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3IgY29tcHV0ZUNsYXNzQ2hhbmdl
KGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3BsaXRTdHJp
bmcmIG5ld0NsYXNzZXMpCitzdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3IgY29tcHV0ZUNsYXNzQ2hh
bmdlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nJiBuZXdDbGFzc2VzKQogewogICAgIHVuc2lnbmVkIG9sZFNpemUgPSBvbGRDbGFzc2Vz
LnNpemUoKTsKICAgICB1bnNpZ25lZCBuZXdTaXplID0gbmV3Q2xhc3Nlcy5zaXplKCk7CiAKICAg
ICBpZiAoIW9sZFNpemUpCi0gICAgICAgIHJldHVybiBjb2xsZWN0Q2xhc3NlcyhuZXdDbGFzc2Vz
KTsKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RDbGFzc2VzKG5ld0NsYXNzZXMsIENsYXNzQ2hhbmdl
VHlwZTo6QWRkKTsKICAgICBpZiAoIW5ld1NpemUpCi0gICAgICAgIHJldHVybiBjb2xsZWN0Q2xh
c3NlcyhvbGRDbGFzc2VzKTsKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RDbGFzc2VzKG9sZENsYXNz
ZXMsIENsYXNzQ2hhbmdlVHlwZTo6UmVtb3ZlKTsKIAogICAgIENsYXNzQ2hhbmdlVmVjdG9yIGNo
YW5nZWRDbGFzc2VzOwogCkBAIC03MCwxMyArNzcsMTMgQEAgc3RhdGljIENsYXNzQ2hhbmdlVmVj
dG9yIGNvbXB1dGVDbGFzc0NoYW5nZShjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2Vz
LAogICAgICAgICB9CiAgICAgICAgIGlmIChmb3VuZEZyb21Cb3RoKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGNoYW5nZWRDbGFzc2VzLmFwcGVuZChuZXdDbGFzc2VzW2ldLmltcGwo
KSk7CisgICAgICAgIGNoYW5nZWRDbGFzc2VzLmFwcGVuZCh7IG5ld0NsYXNzZXNbaV0uaW1wbCgp
LCBDbGFzc0NoYW5nZVR5cGU6OkFkZCB9KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG9sZFNpemU7ICsraSkgewogICAgICAgICAvLyBJZiB0aGUgYml0IGlzIG5vdCBzZXQg
dGhlIGNvcnJlc3BvbmRpbmcgY2xhc3MgaGFzIGJlZW4gcmVtb3ZlZC4KICAgICAgICAgaWYgKHJl
bWFpbmluZ0NsYXNzQml0cy5xdWlja0dldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBjaGFuZ2VkQ2xhc3Nlcy5hcHBlbmQob2xkQ2xhc3Nlc1tpXS5pbXBsKCkpOworICAgICAg
ICBjaGFuZ2VkQ2xhc3Nlcy5hcHBlbmQoeyBvbGRDbGFzc2VzW2ldLmltcGwoKSwgQ2xhc3NDaGFu
Z2VUeXBlOjpSZW1vdmUgfSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNoYW5nZWRDbGFzc2VzOwpA
QCAtODQsMTYgKzkxLDE2IEBAIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3ND
aGFuZ2UoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywKIAogdm9pZCBDbGFzc0No
YW5nZUludmFsaWRhdGlvbjo6Y29tcHV0ZUludmFsaWRhdGlvbihjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQogewot
ICAgIGF1dG8gY2hhbmdlZENsYXNzZXMgPSBjb21wdXRlQ2xhc3NDaGFuZ2Uob2xkQ2xhc3Nlcywg
bmV3Q2xhc3Nlcyk7CisgICAgYXV0byBjbGFzc0NoYW5nZXMgPSBjb21wdXRlQ2xhc3NDaGFuZ2Vz
KG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOwogCiAgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlQ3Vy
cmVudCA9IGZhbHNlOwogICAgIGJvb2wgbWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUgPSBmYWxz
ZTsKIAogICAgIHRyYXZlcnNlUnVsZUZlYXR1cmVzKG1fZWxlbWVudCwgWyZdIChjb25zdCBSdWxl
RmVhdHVyZVNldCYgZmVhdHVyZXMsIGJvb2wgbWF5QWZmZWN0U2hhZG93VHJlZSkgewotICAgICAg
ICBmb3IgKGF1dG8qIGNoYW5nZWRDbGFzcyA6IGNoYW5nZWRDbGFzc2VzKSB7Ci0gICAgICAgICAg
ICBpZiAobWF5QWZmZWN0U2hhZG93VHJlZSAmJiBmZWF0dXJlcy5jbGFzc1J1bGVzLmNvbnRhaW5z
KGNoYW5nZWRDbGFzcykpCisgICAgICAgIGZvciAoYXV0byYgY2xhc3NDaGFuZ2UgOiBjbGFzc0No
YW5nZXMpIHsKKyAgICAgICAgICAgIGlmIChtYXlBZmZlY3RTaGFkb3dUcmVlICYmIGZlYXR1cmVz
LmNsYXNzUnVsZXMuY29udGFpbnMoY2xhc3NDaGFuZ2UuY2xhc3NOYW1lKSkKICAgICAgICAgICAg
ICAgICBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
ZmVhdHVyZXMuY2xhc3Nlc0FmZmVjdGluZ0hvc3QuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKKyAg
ICAgICAgICAgIGlmIChmZWF0dXJlcy5jbGFzc2VzQWZmZWN0aW5nSG9zdC5jb250YWlucyhjbGFz
c0NoYW5nZS5jbGFzc05hbWUpKQogICAgICAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGVDdXJy
ZW50ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0pOwpAQCAtMTA4LDE3ICsxMTUsMzIgQEAgdm9p
ZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Y29tcHV0ZUludmFsaWRhdGlvbihjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJiBvbGRDbGEKIAogICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0
eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogCi0gICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3Mg
OiBjaGFuZ2VkQ2xhc3NlcykgewotICAgICAgICBpZiAoYXV0byogaW52YWxpZGF0aW9uUnVsZVNl
dHMgPSBydWxlU2V0cy5jbGFzc0ludmFsaWRhdGlvblJ1bGVTZXRzKGNoYW5nZWRDbGFzcykpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgaW52YWxpZGF0aW9uUnVsZVNldCA6ICppbnZhbGlkYXRp
b25SdWxlU2V0cykKLSAgICAgICAgICAgICAgICBJbnZhbGlkYXRvcjo6YWRkVG9NYXRjaEVsZW1l
bnRSdWxlU2V0cyhtX21hdGNoRWxlbWVudFJ1bGVTZXRzLCBpbnZhbGlkYXRpb25SdWxlU2V0KTsK
KyAgICBhdXRvIGludmFsaWRhdGVCZWZvcmVDaGFuZ2UgPSBbXShDbGFzc0NoYW5nZVR5cGUgdHlw
ZSwgSXNOZWdhdGlvbiBpc05lZ2F0aW9uKSB7CisgICAgICAgIGlmICh0eXBlID09IENsYXNzQ2hh
bmdlVHlwZTo6UmVtb3ZlKQorICAgICAgICAgICAgcmV0dXJuIGlzTmVnYXRpb24gPT0gSXNOZWdh
dGlvbjo6Tm87CisgICAgICAgIHJldHVybiBpc05lZ2F0aW9uID09IElzTmVnYXRpb246OlllczsK
KyAgICB9OworCisgICAgZm9yIChhdXRvJiBjbGFzc0NoYW5nZSA6IGNsYXNzQ2hhbmdlcykgewor
ICAgICAgICBpZiAoYXV0byogaW52YWxpZGF0aW9uUnVsZVNldHMgPSBydWxlU2V0cy5jbGFzc0lu
dmFsaWRhdGlvblJ1bGVTZXRzKGNsYXNzQ2hhbmdlLmNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgaW52YWxpZGF0aW9uUnVsZVNldCA6ICppbnZhbGlkYXRpb25SdWxlU2V0cykg
eworICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkYXRlQmVmb3JlQ2hhbmdlKGNsYXNzQ2hhbmdl
LnR5cGUsIGludmFsaWRhdGlvblJ1bGVTZXQuaXNOZWdhdGlvbikpCisgICAgICAgICAgICAgICAg
ICAgIEludmFsaWRhdG9yOjphZGRUb01hdGNoRWxlbWVudFJ1bGVTZXRzKG1fYmVmb3JlQ2hhbmdl
UnVsZVNldHMsIGludmFsaWRhdGlvblJ1bGVTZXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgSW52YWxpZGF0b3I6OmFkZFRvTWF0Y2hFbGVtZW50UnVsZVNldHMo
bV9hZnRlckNoYW5nZVJ1bGVTZXRzLCBpbnZhbGlkYXRpb25SdWxlU2V0KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6
aW52YWxpZGF0ZVN0eWxlV2l0aFJ1bGVTZXRzKCkKK3ZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVCZWZvcmVDaGFuZ2UoKQoreworICAgIEludmFsaWRhdG9yOjppbnZhbGlk
YXRlV2l0aE1hdGNoRWxlbWVudFJ1bGVTZXRzKG1fZWxlbWVudCwgbV9iZWZvcmVDaGFuZ2VSdWxl
U2V0cyk7Cit9CisKK3ZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVBZnRl
ckNoYW5nZSgpCiB7Ci0gICAgSW52YWxpZGF0b3I6OmludmFsaWRhdGVXaXRoTWF0Y2hFbGVtZW50
UnVsZVNldHMobV9lbGVtZW50LCBtX21hdGNoRWxlbWVudFJ1bGVTZXRzKTsKKyAgICBJbnZhbGlk
YXRvcjo6aW52YWxpZGF0ZVdpdGhNYXRjaEVsZW1lbnRSdWxlU2V0cyhtX2VsZW1lbnQsIG1fYWZ0
ZXJDaGFuZ2VSdWxlU2V0cyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFz
c0NoYW5nZUludmFsaWRhdGlvbi5oCmluZGV4IDc2OTBiYjA2N2U2YTAzOWJmZjQwZmZhZDMwODdk
ODA3OTk5MzFhZTAuLmNhZTA1ZTVkMjRmMThkZGE2YTk1NDc4ZmFmZTQyN2ZjZjc0NDllYTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaApAQCAt
NDIsMTIgKzQyLDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnZh
bGlkYXRpb24oY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcywgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgbmV3Q2xhc3Nlcyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVXaXRoUnVs
ZVNldHMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVCZWZvcmVDaGFuZ2UoKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVBZnRlckNoYW5nZSgpOwogCiAgICAgY29uc3QgYm9vbCBtX2lzRW5hYmxlZDsKICAg
ICBFbGVtZW50JiBtX2VsZW1lbnQ7CiAKLSAgICBJbnZhbGlkYXRvcjo6TWF0Y2hFbGVtZW50UnVs
ZVNldHMgbV9tYXRjaEVsZW1lbnRSdWxlU2V0czsKKyAgICBJbnZhbGlkYXRvcjo6TWF0Y2hFbGVt
ZW50UnVsZVNldHMgbV9iZWZvcmVDaGFuZ2VSdWxlU2V0czsKKyAgICBJbnZhbGlkYXRvcjo6TWF0
Y2hFbGVtZW50UnVsZVNldHMgbV9hZnRlckNoYW5nZVJ1bGVTZXRzOwogfTsKIAogaW5saW5lIENs
YXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpDbGFzc0NoYW5nZUludmFsaWRhdGlvbihFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBuZXdDbGFzc2VzKQpAQCAtNTgsMTQgKzYwLDE0IEBAIGlubGluZSBDbGFzc0No
YW5nZUludmFsaWRhdGlvbjo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24oRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47CiAgICAgY29t
cHV0ZUludmFsaWRhdGlvbihvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKTsKLSAgICBpbnZhbGlkYXRl
U3R5bGVXaXRoUnVsZVNldHMoKTsKKyAgICBpbnZhbGlkYXRlQmVmb3JlQ2hhbmdlKCk7CiB9CiAK
IGlubGluZSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6fkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
KCkKIHsKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgaW52YWxp
ZGF0ZVN0eWxlV2l0aFJ1bGVTZXRzKCk7CisgICAgaW52YWxpZGF0ZUFmdGVyQ2hhbmdlKCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVGZWF0dXJlLmNwcAppbmRleCA3ZDdkYzdhZDljM2Rk
Y2Q3YmZmZWEzZjQzNzNmNTY3ZDkzYzY2ZDljLi4xMmUwZWQ0MTExZDBlMGQ2Mjg2MmU4N2EwZWYz
ZmM3NzUyNzJiMDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVy
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuY3BwCkBAIC04NCw5
ICs4NCwxNiBAQCBSdWxlQW5kU2VsZWN0b3I6OlJ1bGVBbmRTZWxlY3Rvcihjb25zdCBSdWxlRGF0
YSYgcnVsZURhdGEpCiB9CiAKIAotUnVsZUZlYXR1cmU6OlJ1bGVGZWF0dXJlKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCkKK1J1bGVGZWF0dXJlOjpS
dWxlRmVhdHVyZShjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIE1hdGNoRWxlbWVudCBtYXRjaEVs
ZW1lbnQsIElzTmVnYXRpb24gaXNOZWdhdGlvbikKICAgICA6IFJ1bGVBbmRTZWxlY3RvcihydWxl
RGF0YSkKICAgICAsIG1hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpCisgICAgLCBpc05lZ2F0aW9u
KGlzTmVnYXRpb24pCit7Cit9CisKK1J1bGVGZWF0dXJlV2l0aEludmFsaWRhdGlvblNlbGVjdG9y
OjpSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgZGF0
YSwgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbiBpc05lZ2F0aW9uLCBjb25z
dCBDU1NTZWxlY3RvciogaW52YWxpZGF0aW9uU2VsZWN0b3IpCisgICAgOiBSdWxlRmVhdHVyZShk
YXRhLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRpb24pCisgICAgLCBpbnZhbGlkYXRpb25TZWxlY3Rv
cihpbnZhbGlkYXRpb25TZWxlY3RvcikKIHsKIH0KIApAQCAtMjAwLDcgKzIwNyw3IEBAIHN0YXRp
YyBNYXRjaEVsZW1lbnQgY29tcHV0ZVN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50KE1hdGNoRWxlbWVu
dCBtYXRjaEVsZW1lbnQsIGNvCiAgICAgcmV0dXJuIG1hdGNoRWxlbWVudDsKIH07CiAKLXZvaWQg
UnVsZUZlYXR1cmVTZXQ6OnJlY3Vyc2l2ZWx5Q29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKFNl
bGVjdG9yRmVhdHVyZXMmIHNlbGVjdG9yRmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yJiBmaXJz
dFNlbGVjdG9yLCBNYXRjaEVsZW1lbnQgbWF0Y2hFbGVtZW50KQordm9pZCBSdWxlRmVhdHVyZVNl
dDo6cmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0b3JGZWF0dXJl
cyYgc2VsZWN0b3JGZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3ImIGZpcnN0U2VsZWN0b3IsIE1h
dGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIElzTmVnYXRpb24gaXNOZWdhdGlvbikKIHsKICAgICBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSAmZmlyc3RTZWxlY3RvcjsKICAgICBkbyB7CkBA
IC0yMDksMTggKzIxNiwxOCBAQCB2b2lkIFJ1bGVGZWF0dXJlU2V0OjpyZWN1cnNpdmVseUNvbGxl
Y3RGZWF0dXJlc0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiBzZQogICAgICAgICAgICAg
aWYgKG1hdGNoRWxlbWVudCA9PSBNYXRjaEVsZW1lbnQ6OlBhcmVudCB8fCBtYXRjaEVsZW1lbnQg
PT0gTWF0Y2hFbGVtZW50OjpBbmNlc3RvcikKICAgICAgICAgICAgICAgICBpZHNNYXRjaGluZ0Fu
Y2VzdG9yc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGlzSGFzUHNldWRvQ2xhc3NNYXRjaEVsZW1lbnQobWF0Y2hFbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmlkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0
b3ItPnZhbHVlKCksIG1hdGNoRWxlbWVudCkpOworICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVh
dHVyZXMuaWRzLmFwcGVuZCh7IHNlbGVjdG9yLT52YWx1ZSgpLCBtYXRjaEVsZW1lbnQsIGlzTmVn
YXRpb24gfSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkNsYXNzKQotICAgICAgICAgICAgc2VsZWN0b3JGZWF0dXJlcy5jbGFzc2VzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihzZWxlY3Rvci0+dmFsdWUoKSwgbWF0Y2hFbGVtZW50KSk7CisgICAg
ICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmNsYXNzZXMuYXBwZW5kKHsgc2VsZWN0b3ItPnZhbHVl
KCksIG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbiB9KTsKICAgICAgICAgZWxzZSBpZiAoc2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlRhZykgewogICAgICAgICAgICAgaWYgKGlzSGFz
UHNldWRvQ2xhc3NNYXRjaEVsZW1lbnQobWF0Y2hFbGVtZW50KSkKLSAgICAgICAgICAgICAgICBz
ZWxlY3RvckZlYXR1cmVzLnRhZ3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHNlbGVjdG9yLT50YWdM
b3dlcmNhc2VMb2NhbE5hbWUoKSwgbWF0Y2hFbGVtZW50KSk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0b3JGZWF0dXJlcy50YWdzLmFwcGVuZCh7IHNlbGVjdG9yLT50YWdMb3dlcmNhc2VMb2NhbE5h
bWUoKSwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0pOwogICAgICAgICB9IGVsc2UgaWYgKHNl
bGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGNhbm9u
aWNhbExvY2FsTmFtZSA9IHNlbGVjdG9yLT5hdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5hbWUoKTsK
ICAgICAgICAgICAgIGF1dG8mIGxvY2FsTmFtZSA9IHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2Nh
bE5hbWUoKTsKICAgICAgICAgICAgIGF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVz
LmFkZChjYW5vbmljYWxMb2NhbE5hbWUpOwogICAgICAgICAgICAgYXR0cmlidXRlTG9jYWxOYW1l
c0luUnVsZXMuYWRkKGxvY2FsTmFtZSk7Ci0gICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmF0
dHJpYnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHNlbGVjdG9yLCBtYXRjaEVsZW1lbnQpKTsK
KyAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcy5hcHBlbmQoeyBzZWxlY3Rv
ciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0pOwogICAgICAgICB9IGVsc2UgaWYgKHNlbGVj
dG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Rmlyc3RMaW5lOgpAQCAtMjM0LDE4ICsyNDEs
MjIgQEAgdm9pZCBSdWxlRmVhdHVyZVNldDo6cmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNGcm9t
U2VsZWN0b3IoU2VsZWN0b3JGZWF0dXJlcyYgc2UKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsK
ICAgICAgICAgICAgIGlmICghaXNMb2dpY2FsQ29tYmluYXRpb25Qc2V1ZG9DbGFzcyhzZWxlY3Rv
ci0+cHNldWRvQ2xhc3NUeXBlKCkpKQotICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMu
cHNldWRvQ2xhc3Nlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc2VsZWN0b3IsIG1hdGNoRWxlbWVu
dCkpOworICAgICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMucHNldWRvQ2xhc3Nlcy5hcHBl
bmQoeyBzZWxlY3RvciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFzZWxlY3RvckZlYXR1cmVzLmhhc1NpYmxpbmdTZWxlY3RvciAmJiBzZWxl
Y3Rvci0+aXNTaWJsaW5nU2VsZWN0b3IoKSkKICAgICAgICAgICAgIHNlbGVjdG9yRmVhdHVyZXMu
aGFzU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKIAogICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0
b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gc3ViU2VsZWN0b3JJc05lZ2F0aW9uID0gaXNOZWdhdGlvbjsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYg
c2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05v
dCkKKyAgICAgICAgICAgICAgICBzdWJTZWxlY3RvcklzTmVnYXRpb24gPSBpc05lZ2F0aW9uID09
IElzTmVnYXRpb246Ok5vID8gSXNOZWdhdGlvbjo6WWVzIDogSXNOZWdhdGlvbjo6Tm87CisKICAg
ICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3ViU2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBzdWJTZWxlY3Rvck1h
dGNoRWxlbWVudCA9IGNvbXB1dGVTdWJTZWxlY3Rvck1hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQs
ICpzZWxlY3RvciwgKnN1YlNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9y
RmVhdHVyZXMuaGFzU2libGluZ1NlbGVjdG9yICYmIHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxlY3Rv
cigpKQogICAgICAgICAgICAgICAgICAgICBzZWxlY3RvckZlYXR1cmVzLmhhc1NpYmxpbmdTZWxl
Y3RvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3Ioc2VsZWN0b3JGZWF0dXJlcywgKnN1YlNlbGVjdG9yLCBzdWJTZWxlY3Rvck1h
dGNoRWxlbWVudCk7CisgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlDb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3Ioc2VsZWN0b3JGZWF0dXJlcywgKnN1YlNlbGVjdG9yLCBzdWJTZWxlY3Rvck1h
dGNoRWxlbWVudCwgc3ViU2VsZWN0b3JJc05lZ2F0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCkBAIC0zMDYsMTAgKzMxNywxMCBAQCB2b2lkIFJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0
RmVhdHVyZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQogCiAgICAgYXV0byBhZGRUb01hcCA9
IFsmXShhdXRvJiBtYXAsIGF1dG8mIGVudHJpZXMsIGF1dG8gaG9zdEFmZmVjdGluZ05hbWVzKSB7
CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0gICAgICAgICAgICBhdXRv
JiBbbmFtZSwgbWF0Y2hFbGVtZW50XSA9IGVudHJ5OworICAgICAgICAgICAgYXV0byYgW25hbWUs
IG1hdGNoRWxlbWVudCwgaXNOZWdhdGlvbl0gPSBlbnRyeTsKICAgICAgICAgICAgIG1hcC5lbnN1
cmUobmFtZSwgW10gewogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJ1bGVGZWF0
dXJlVmVjdG9yPigpOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoeyBy
dWxlRGF0YSwgbWF0Y2hFbGVtZW50IH0pOworICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uIH0pOwogCiAgICAg
ICAgICAgICBzZXRVc2VzTWF0Y2hFbGVtZW50KG1hdGNoRWxlbWVudCk7CiAKQEAgLTMyNCwyMyAr
MzM1LDIxIEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJlcyhjb25zdCBSdWxl
RGF0YSYgcnVsZURhdGEpCiAgICAgYWRkVG9NYXAoaWRSdWxlcywgc2VsZWN0b3JGZWF0dXJlcy5p
ZHMsIG51bGxwdHIpOwogICAgIGFkZFRvTWFwKGNsYXNzUnVsZXMsIHNlbGVjdG9yRmVhdHVyZXMu
Y2xhc3NlcywgJmNsYXNzZXNBZmZlY3RpbmdIb3N0KTsKIAotICAgIGZvciAoYXV0byYgc2VsZWN0
b3JBbmRNYXRjaCA6IHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcykgewotICAgICAgICBhdXRv
KiBzZWxlY3RvciA9IHNlbGVjdG9yQW5kTWF0Y2guZmlyc3Q7Ci0gICAgICAgIGF1dG8gbWF0Y2hF
bGVtZW50ID0gc2VsZWN0b3JBbmRNYXRjaC5zZWNvbmQ7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6
IHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlcykgeworICAgICAgICBhdXRvIFtzZWxlY3Rvciwg
bWF0Y2hFbGVtZW50LCBpc05lZ2F0aW9uXSA9IGVudHJ5OwogICAgICAgICBhdHRyaWJ1dGVSdWxl
cy5lbnN1cmUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLmxvY2FsTmFtZSgpLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCksIFtdIHsKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFZlY3RvcjxS
dWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3Rvcj4+KCk7Ci0gICAgICAgIH0pLml0ZXJh
dG9yLT52YWx1ZS0+YXBwZW5kKHsgcnVsZURhdGEsIG1hdGNoRWxlbWVudCwgc2VsZWN0b3IgfSk7
CisgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKHsgcnVsZURhdGEsIG1hdGNoRWxl
bWVudCwgaXNOZWdhdGlvbiwgc2VsZWN0b3IgfSk7CiAgICAgICAgIGlmIChtYXRjaEVsZW1lbnQg
PT0gTWF0Y2hFbGVtZW50OjpIb3N0KQogICAgICAgICAgICAgYXR0cmlidXRlc0FmZmVjdGluZ0hv
c3QuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpKTsKICAgICAgICAgc2V0VXNlc01hdGNoRWxlbWVudChtYXRjaEVsZW1lbnQpOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgc2VsZWN0b3JBbmRNYXRjaCA6IHNlbGVjdG9yRmVhdHVy
ZXMucHNldWRvQ2xhc3NlcykgewotICAgICAgICBhdXRvKiBzZWxlY3RvciA9IHNlbGVjdG9yQW5k
TWF0Y2guZmlyc3Q7Ci0gICAgICAgIGF1dG8gbWF0Y2hFbGVtZW50ID0gc2VsZWN0b3JBbmRNYXRj
aC5zZWNvbmQ7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNlbGVjdG9yRmVhdHVyZXMucHNldWRv
Q2xhc3NlcykgeworICAgICAgICBhdXRvIFtzZWxlY3RvciwgbWF0Y2hFbGVtZW50LCBpc05lZ2F0
aW9uXSA9IGVudHJ5OwogICAgICAgICBwc2V1ZG9DbGFzc1J1bGVzLmVuc3VyZShtYWtlUHNldWRv
Q2xhc3NJbnZhbGlkYXRpb25LZXkoKnNlbGVjdG9yKSwgW10gewogICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4oKTsKLSAgICAgICAgfSkuaXRlcmF0b3It
PnZhbHVlLT5hcHBlbmQoeyBydWxlRGF0YSwgbWF0Y2hFbGVtZW50IH0pOworICAgICAgICB9KS5p
dGVyYXRvci0+dmFsdWUtPmFwcGVuZCh7IHJ1bGVEYXRhLCBtYXRjaEVsZW1lbnQsIGlzTmVnYXRp
b24gfSk7CiAKICAgICAgICAgaWYgKG1hdGNoRWxlbWVudCA9PSBNYXRjaEVsZW1lbnQ6Okhvc3Qp
CiAgICAgICAgICAgICBwc2V1ZG9DbGFzc2VzQWZmZWN0aW5nSG9zdC5hZGQoc2VsZWN0b3ItPnBz
ZXVkb0NsYXNzVHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVG
ZWF0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRmVhdHVyZS5oCmluZGV4IDdmZDdl
ZGYyMmQ5MzQzZWI2ZDJhMTBhYmFlYjJiZWM4OTE5MzZkNTguLmQ4NDA2Zjg4ZDQ2MmU1NjRkY2E0
MTMxNjdhMzQ4NDkzY2QwNWU2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVGZWF0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZUZlYXR1cmUuaApAQCAt
NTUsNiArNTUsOCBAQCBlbnVtIGNsYXNzIE1hdGNoRWxlbWVudCA6IHVpbnQ4X3QgewogfTsKIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXRjaEVsZW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihNYXRjaEVsZW1lbnQ6Okhvc3QpICsgMTsKIAorZW51bSBjbGFzcyBJc05lZ2F0aW9uIDogYm9v
bCB7IE5vLCBZZXMgfTsKKwogLy8gRm9yIE1TVkMuCiAjcHJhZ21hIHBhY2socHVzaCwgNCkKIHN0
cnVjdCBSdWxlQW5kU2VsZWN0b3IgewpAQCAtNjYsMTcgKzY4LDE1IEBAIHN0cnVjdCBSdWxlQW5k
U2VsZWN0b3IgewogfTsKIAogc3RydWN0IFJ1bGVGZWF0dXJlIDogcHVibGljIFJ1bGVBbmRTZWxl
Y3RvciB7Ci0gICAgUnVsZUZlYXR1cmUoY29uc3QgUnVsZURhdGEmLCBNYXRjaEVsZW1lbnQpOwor
ICAgIFJ1bGVGZWF0dXJlKGNvbnN0IFJ1bGVEYXRhJiwgTWF0Y2hFbGVtZW50LCBJc05lZ2F0aW9u
KTsKIAogICAgIE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQ7CisgICAgSXNOZWdhdGlvbiBpc05l
Z2F0aW9uOyAvLyBXaGV0aGVyIHRoZSBzZWxlY3RvciBpcyBpbiBhIChub24tcGFpcmVkKSA6bm90
KCkgY29udGV4dC4KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihSdWxlRmVhdHVyZSkgPD0gMTYs
ICJSdWxlRmVhdHVyZSBpcyBhIGZycXVlbnRseSBhbG9jYXRlZCBvYmplY3QuIEtlZXAgaXQgc21h
bGwuIik7CiAKIHN0cnVjdCBSdWxlRmVhdHVyZVdpdGhJbnZhbGlkYXRpb25TZWxlY3RvciA6IHB1
YmxpYyBSdWxlRmVhdHVyZSB7Ci0gICAgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0
b3IoY29uc3QgUnVsZURhdGEmIGRhdGEsIE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIGNvbnN0
IENTU1NlbGVjdG9yKiBpbnZhbGlkYXRpb25TZWxlY3RvciA9IG51bGxwdHIpCi0gICAgICAgIDog
UnVsZUZlYXR1cmUoZGF0YSwgbWF0Y2hFbGVtZW50KQotICAgICAgICAsIGludmFsaWRhdGlvblNl
bGVjdG9yKGludmFsaWRhdGlvblNlbGVjdG9yKQotICAgIHsgfQorICAgIFJ1bGVGZWF0dXJlV2l0
aEludmFsaWRhdGlvblNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgTWF0Y2hFbGVtZW50LCBJc05l
Z2F0aW9uLCBjb25zdCBDU1NTZWxlY3RvciogaW52YWxpZGF0aW9uU2VsZWN0b3IpOwogCiAgICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIGludmFsaWRhdGlvblNlbGVjdG9yIHsgbnVsbHB0ciB9OwogfTsK
QEAgLTEyNCwxMyArMTI0LDEzIEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFNlbGVjdG9yRmVhdHVy
ZXMgewogICAgICAgICBib29sIGhhc1NpYmxpbmdTZWxlY3RvciB7IGZhbHNlIH07CiAKLSAgICAg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBNYXRjaEVsZW1lbnQ+LCAzMj4gdGFnczsK
LSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBNYXRjaEVsZW1lbnQ+LCAzMj4g
aWRzOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudD4s
IDMyPiBjbGFzc2VzOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IENTU1NlbGVjdG9y
KiwgTWF0Y2hFbGVtZW50PiwgMzI+IGF0dHJpYnV0ZXM7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Y29uc3QgQ1NTU2VsZWN0b3IqLCBNYXRjaEVsZW1lbnQ+LCAzMj4gcHNldWRvQ2xhc3NlczsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6dHVwbGU8QXRvbVN0cmluZywgTWF0Y2hFbGVtZW50LCBJc05l
Z2F0aW9uPiwgMzI+IHRhZ3M7CisgICAgICAgIFZlY3RvcjxzdGQ6OnR1cGxlPEF0b21TdHJpbmcs
IE1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbj4sIDMyPiBpZHM7CisgICAgICAgIFZlY3RvcjxzdGQ6
OnR1cGxlPEF0b21TdHJpbmcsIE1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbj4sIDMyPiBjbGFzc2Vz
OworICAgICAgICBWZWN0b3I8c3RkOjp0dXBsZTxjb25zdCBDU1NTZWxlY3RvciosIE1hdGNoRWxl
bWVudCwgSXNOZWdhdGlvbj4sIDMyPiBhdHRyaWJ1dGVzOworICAgICAgICBWZWN0b3I8c3RkOjp0
dXBsZTxjb25zdCBDU1NTZWxlY3RvciosIE1hdGNoRWxlbWVudCwgSXNOZWdhdGlvbj4sIDMyPiBw
c2V1ZG9DbGFzc2VzOwogICAgIH07Ci0gICAgdm9pZCByZWN1cnNpdmVseUNvbGxlY3RGZWF0dXJl
c0Zyb21TZWxlY3RvcihTZWxlY3RvckZlYXR1cmVzJiwgY29uc3QgQ1NTU2VsZWN0b3ImLCBNYXRj
aEVsZW1lbnQgPSBNYXRjaEVsZW1lbnQ6OlN1YmplY3QpOworICAgIHZvaWQgcmVjdXJzaXZlbHlD
b2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoU2VsZWN0b3JGZWF0dXJlcyYsIGNvbnN0IENTU1Nl
bGVjdG9yJiwgTWF0Y2hFbGVtZW50ID0gTWF0Y2hFbGVtZW50OjpTdWJqZWN0LCBJc05lZ2F0aW9u
ID0gIElzTmVnYXRpb246Ok5vKTsKIH07CiAKIGJvb2wgaXNIYXNQc2V1ZG9DbGFzc01hdGNoRWxl
bWVudChNYXRjaEVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxl
U2V0cy5jcHAKaW5kZXggNjQxZGY0MzUwZDhlYTJlNDg1ZWU2MDA4YTg0NDUyN2E2OGJmYjIxMy4u
NDg0OTc4YzQ3ZjIzYzMwZjk2OWJiNDVhMWIzZGZkYjZmNzA4M2I0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCkBAIC0yNDAsMzcgKzI0MCwzNCBAQCBz
dGF0aWMgVmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+KiBlbnN1cmVJbnZhbGlkYXRpb25SdWxl
U2V0cyhjb25zdCBLZXlUeXBlJiBrZQogICAgICAgICBpZiAoIWZlYXR1cmVzKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgc3RkOjphcnJheTxSZWZQdHI8UnVsZVNldD4s
IG1hdGNoRWxlbWVudENvdW50PiBtYXRjaEVsZW1lbnRBcnJheTsKLSAgICAgICAgc3RkOjphcnJh
eTxWZWN0b3I8Y29uc3QgQ1NTU2VsZWN0b3IqPiwgbWF0Y2hFbGVtZW50Q291bnQ+IGludmFsaWRh
dGlvblNlbGVjdG9yQXJyYXk7CisgICAgICAgIEhhc2hNYXA8c3RkOjp0dXBsZTx1aW50OF90LCBi
b29sLCBib29sPiwgSW52YWxpZGF0aW9uUnVsZVNldD4gaW52YWxpZGF0aW9uUnVsZVNldE1hcDsK
KwogICAgICAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiAqZmVhdHVyZXMpIHsKLSAgICAgICAgICAg
IGF1dG8gYXJyYXlJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZWF0dXJlLm1hdGNoRWxl
bWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheUluZGV4IDwgbWF0Y2hFbGVt
ZW50QXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGF1dG8ga2V5ID0gc3RkOjp0dXBsZSB7IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGZlYXR1cmUubWF0Y2hFbGVtZW50KSwgc3RhdGljX2Nhc3Q8Ym9v
bD4oZmVhdHVyZS5pc05lZ2F0aW9uKSwgdHJ1ZSB9OworCisgICAgICAgICAgICBhdXRvJiBpbnZh
bGlkYXRpb25SdWxlU2V0ID0gaW52YWxpZGF0aW9uUnVsZVNldE1hcC5lbnN1cmUoa2V5LCBbJl0g
eworICAgICAgICAgICAgICAgIHJldHVybiBJbnZhbGlkYXRpb25SdWxlU2V0IHsKKyAgICAgICAg
ICAgICAgICAgICAgUnVsZVNldDo6Y3JlYXRlKCksCisgICAgICAgICAgICAgICAgICAgIHsgfSwK
KyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5tYXRjaEVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgIGZlYXR1cmUuaXNOZWdhdGlvbiwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0
LnJ1bGVTZXQtPmFkZFJ1bGUoKmZlYXR1cmUuc3R5bGVSdWxlLCBmZWF0dXJlLnNlbGVjdG9ySW5k
ZXgsIGZlYXR1cmUuc2VsZWN0b3JMaXN0SW5kZXgpOwogCi0gICAgICAgICAgICBhdXRvJiBydWxl
U2V0ID0gbWF0Y2hFbGVtZW50QXJyYXlbYXJyYXlJbmRleF07Ci0gICAgICAgICAgICBpZiAoIXJ1
bGVTZXQpCi0gICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgcnVsZVNldC0+YWRkUnVsZSgqZmVhdHVyZS5zdHlsZVJ1bGUsIGZlYXR1cmUuc2Vs
ZWN0b3JJbmRleCwgZmVhdHVyZS5zZWxlY3Rvckxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBSdWxlRmVhdHVyZVZlY3RvclR5cGU6OlZh
bHVlVHlwZSwgUnVsZUZlYXR1cmVXaXRoSW52YWxpZGF0aW9uU2VsZWN0b3I+Ojp2YWx1ZSkgewog
ICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKQotICAgICAg
ICAgICAgICAgICAgICBpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5W2FycmF5SW5kZXhdLmFwcGVu
ZChmZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaW52
YWxpZGF0aW9uUnVsZVNldC5pbnZhbGlkYXRpb25TZWxlY3RvcnMuYXBwZW5kKGZlYXR1cmUuaW52
YWxpZGF0aW9uU2VsZWN0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
dW5zaWduZWQgcnVsZVNldENvdW50ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVt
IDogbWF0Y2hFbGVtZW50QXJyYXkpIHsKLSAgICAgICAgICAgIGlmIChpdGVtKQotICAgICAgICAg
ICAgICAgICsrcnVsZVNldENvdW50OwotICAgICAgICB9Ci0KICAgICAgICAgYXV0byBpbnZhbGlk
YXRpb25SdWxlU2V0cyA9IG1ha2VVbmlxdWU8VmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+Pigp
OwotICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShy
dWxlU2V0Q291bnQpOworICAgICAgICBpbnZhbGlkYXRpb25SdWxlU2V0cy0+cmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpbnZhbGlkYXRpb25SdWxlU2V0TWFwLnNpemUoKSk7CisKKyAgICAgICAgZm9y
IChhdXRvJiBpbnZhbGlkYXRpb25SdWxlU2V0IDogaW52YWxpZGF0aW9uUnVsZVNldE1hcC52YWx1
ZXMoKSkKKyAgICAgICAgICAgIGludmFsaWRhdGlvblJ1bGVTZXRzLT51bmNoZWNrZWRBcHBlbmQo
V1RGTW92ZShpbnZhbGlkYXRpb25SdWxlU2V0KSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1hdGNoRWxlbWVudEFycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2hFbGVtZW50QXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICBtYXRjaEVsZW1lbnRB
cnJheVtpXS0+c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgICAgICBpbnZhbGlkYXRpb25SdWxl
U2V0cy0+dW5jaGVja2VkQXBwZW5kKHsgc3RhdGljX2Nhc3Q8TWF0Y2hFbGVtZW50PihpKSwgbWF0
Y2hFbGVtZW50QXJyYXlbaV0ucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShpbnZhbGlkYXRpb25T
ZWxlY3RvckFycmF5W2ldKSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gaW52YWxpZGF0aW9uUnVsZVNldHM7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaAppbmRleCA2ZTg1
Nzc1ZmVkNGQ1YmE3NTE0Mjg4NjIxN2JjM2IxNGNlYWJmNGJkLi45ODE4Yjg0YzRhMGI3ZTlmNjc4
Y2ZkNWI5MzgwZWJiZGNhNWI0NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlUnVsZVNldHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
UnVsZVNldHMuaApAQCAtNDMsMTEgKzQzLDEwIEBAIGNsYXNzIEluc3BlY3RvckNTU09NV3JhcHBl
cnM7CiBjbGFzcyBSZXNvbHZlcjsKIAogc3RydWN0IEludmFsaWRhdGlvblJ1bGVTZXQgewotICAg
IE1hdGNoRWxlbWVudCBtYXRjaEVsZW1lbnQ7Ci0gICAgUmVmPFJ1bGVTZXQ+IHJ1bGVTZXQ7Cisg
ICAgUmVmUHRyPFJ1bGVTZXQ+IHJ1bGVTZXQ7CiAgICAgVmVjdG9yPGNvbnN0IENTU1NlbGVjdG9y
Kj4gaW52YWxpZGF0aW9uU2VsZWN0b3JzOwotCi0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgTWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudDsKKyAgICBJc05lZ2F0aW9uIGlzTmVnYXRp
b247CiB9OwogCiBjbGFzcyBTY29wZVJ1bGVTZXRzIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>