<?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>107192</bug_id>
          
          <creation_ts>2013-01-17 15:47:09 -0800</creation_ts>
          <short_desc>Rework NetworkProcess resource load identifiers</short_desc>
          <delta_ts>2013-01-18 17:17:38 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>809893</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-17 15:47:09 -0800</bug_when>
    <thetext>Rework NetworkProcess resource load identifiers

Currently the WebProcess synchronous waits to hear back from the NetworkProcess when scheduling a load just to get a globally unique identifier for the load.

In practice, identifiers do not need to be globally unique.  As long as they are unique-per-WebProcess we&apos;re fine.  So there&apos;s no need for the NetworkProcess to vend out identifiers to WebProcesses.

By splitting up the notion of &quot;identifier from the WebProcess&quot; and &quot;identifier from the NetworkProcess&quot; - which was started in http://trac.webkit.org/changeset/140038 - we can get rid of a sync message and be more correct with identifiers in WebProcesses.

In radar as &lt;rdar://problem/12934449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811127</commentid>
    <comment_count>1</comment_count>
      <attachid>183567</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-18 16:08:39 -0800</bug_when>
    <thetext>Created attachment 183567
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811143</commentid>
    <comment_count>2</comment_count>
      <attachid>183567</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-18 16:28:27 -0800</bug_when>
    <thetext>Comment on attachment 183567
Patch v1

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

Looks like a good improvement logically.

One thing I&apos;m quite unhappy about is making some classes RefCounted. It is always better to have a concrete ownership policy than to hope that RefPtrs will balance out in the end somehow. I&apos;m particularly unhappy about complicating ownership in NetworkProcess code, which is very multithreaded, and RefPtrs to shared objects add unpredictability to it. It&apos;s especially bad because we have debug assertions for RefPtr threading errors disabled now.

&gt; Source/WebCore/loader/FrameLoader.cpp:2590
&gt; +            unsigned long identifier = 0;
&gt; +            if (m_frame-&gt;page())
&gt; +                identifier = m_frame-&gt;page()-&gt;progress()-&gt;createUniqueIdentifier();
&gt; +            platformStrategies()-&gt;loaderStrategy()-&gt;loadResourceSynchronously(networkingContext(), identifier, newRequest, storedCredentials, error, response, data);

Really, we want to call the strategy with a 0 identifier?

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:103
&gt; -    HostRecord* oldHost = m_identifiers.get(identifier);
&gt; +    RefPtr&lt;HostRecord&gt; oldHost = loader-&gt;hostRecord();

Why can&apos;t oldHost be a plain pointer any more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811149</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-18 16:35:22 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 183567 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183567&amp;action=review
&gt; 
&gt; Looks like a good improvement logically.
&gt; 
&gt; One thing I&apos;m quite unhappy about is making some classes RefCounted. It is always better to have a concrete ownership policy than to hope that RefPtrs will balance out in the end somehow. I&apos;m particularly unhappy about complicating ownership in NetworkProcess code, which is very multithreaded, and RefPtrs to shared objects add unpredictability to it. It&apos;s especially bad because we have debug assertions for RefPtr threading errors disabled now.

I agree with your message.

This improvement both fixes real bugs and is so much in the right direction that I think it&apos;s not difficult to accept the new RefCounting.

I hope this improvement makes it easier to spot further improvements that will be more concrete.
 
&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:2590
&gt; &gt; +            unsigned long identifier = 0;
&gt; &gt; +            if (m_frame-&gt;page())
&gt; &gt; +                identifier = m_frame-&gt;page()-&gt;progress()-&gt;createUniqueIdentifier();
&gt; &gt; +            platformStrategies()-&gt;loaderStrategy()-&gt;loadResourceSynchronously(networkingContext(), identifier, newRequest, storedCredentials, error, response, data);
&gt; 
&gt; Really, we want to call the strategy with a 0 identifier?

In practice, this is already how WebCore dealers with &quot;loads for a frame without a page&quot;.  I agree with your beef, but the sin is much more onerous than this one site!

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:103
&gt; &gt; -    HostRecord* oldHost = m_identifiers.get(identifier);
&gt; &gt; +    RefPtr&lt;HostRecord&gt; oldHost = loader-&gt;hostRecord();
&gt; 
&gt; Why can&apos;t oldHost be a plain pointer any more?

I think that is a remnant from an earlier form of the refactor.  Indeed, it can be.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811158</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-18 16:43:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/140218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811186</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-18 17:11:59 -0800</bug_when>
    <thetext>&gt; In practice, this is already how WebCore dealers with &quot;loads for a frame without a page&quot;.  I agree with your beef, but the sin is much more onerous than this one site!

Does that happen in practice? I&apos;m worried that everything goes off the rails then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811191</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-18 17:17:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; In practice, this is already how WebCore dealers with &quot;loads for a frame without a page&quot;.  I agree with your beef, but the sin is much more onerous than this one site!
&gt; 
&gt; Does that happen in practice? I&apos;m worried that everything goes off the rails then.

Does it actually *happen*?  Hopefully not.

Does the code account for the possibility in multiple places (now)?  Unfortunately.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183567</attachid>
            <date>2013-01-18 16:08:39 -0800</date>
            <delta_ts>2013-01-18 16:28:27 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79675</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YzRjNTRmLi5kZjMyMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTMtMDEtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFJld29yayBOZXR3b3JrUHJvY2VzcyByZXNvdXJjZSBsb2FkIGlkZW50aWZpZXJzLgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTI5MzQ0NDk+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChObyBlZmZlY3QgaW4gdGVzdGVkIGNvbmZp
Z3MpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKKyAgICAgICAgSW5jbHVkZSBhbiBp
ZGVudGlmaWVyIGFyZ3VtZW50IGZvciBzeW5jaHJvbm91cyBsb2FkczoKKyAgICAgICAgKiBsb2Fk
ZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3k6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9Mb2FkZXJTdHJh
dGVneS5oOgorCisgICAgICAgIFBhc3MgYWxvbmcgYSB1bmlxdWUgaWRlbnRpZmllciB0byB0aGUg
c3luY2hyb25vdXMgbG9hZDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgor
CisgICAgICAgIFJlbW92ZSB0aGUgInNldElkZW50aWZpZXIiIG1ldGhvZDoKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRl
ci5oOgorCiAyMDEzLTAxLTE3ICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KIAog
ICAgICAgICBbR1RLXSBJbmRleGVkREI6IEFkZCBMZXZlbERCIGhlYWRlcnMgdG8gaW5jbHVkZSBw
YXRoIGlmIEluZGV4ZWREQiBpcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGMyYzQy
ZDYuLjY5MTg0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yODUsNyArMjg1LDcgQEAgX19a
TjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXzExRUFsdGVyYXRpb25FTlNfMThT
ZWxlY3Rpb25EaXJlY3Rpb25FTlMKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb245c2VsZWN0
QWxsRXYKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb25DMUVQTlNfNUZyYW1lRQogX19aTjdX
ZWJDb3JlMTRMb2FkZXJTdHJhdGVneTIxcmVzb3VyY2VMb2FkU2NoZWR1bGVyRXYKLV9fWk43V2Vi
Q29yZTE0TG9hZGVyU3RyYXRlZ3kyNWxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlFUE5TXzE3TmV0
d29ya2luZ0NvbnRleHRFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU18xN1N0b3JlZENyZWRlbnRp
YWxzRVJOU18xM1Jlc291cmNlRXJyb3JFUk5TXzE2UmVzb3VyY2VSZXNwb25zZUVSTjNXVEY2VmVj
dG9ySWNMbTBFRUUKK19fWk43V2ViQ29yZTE0TG9hZGVyU3RyYXRlZ3kyNWxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFbVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFTlNfMTdTdG9yZWRDcmVkZW50aWFsc0VSTlNfMTNSZXNvdXJjZUVycm9yRVJOU18xNlJlc291
cmNlUmVzcG9uc2VFUk4zV1RGNlZlY3RvckljTG0wRUVFCiBfX1pON1dlYkNvcmUxNFBsdWdpbkRv
Y3VtZW50MTBwbHVnaW5Ob2RlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50
UmVjdHNBc1RleHRFdgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE3c2V0VHJhY2tzUmVwYWludHNF
YgpAQCAtMzAyLDcgKzMwMiw2IEBAIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNl
Q29udGVudFNuaWZmaW5nRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNWxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHlFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktOU18xNVJlc291cmNl
UmVxdWVzdEVOU18xN1N0b3JlZENyZWRlbnRpYWxzRVJOU18xM1Jlc291cmNlRXJyb3JFUk5TXzE2
UmVzb3VyY2VSZXNwb25zZUVSTjNXVEY2VmVjdG9ySWNMbTBFRUUKIF9fWk43V2ViQ29yZTE0UmVz
b3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYKIF9fWk43V2ViQ29yZTE0
UmVzb3VyY2VIYW5kbGU2Y3JlYXRlRVBOU18xN05ldHdvcmtpbmdDb250ZXh0RVJLTlNfMTVSZXNv
dXJjZVJlcXVlc3RFUE5TXzIwUmVzb3VyY2VIYW5kbGVDbGllbnRFYmIKLV9fWk43V2ViQ29yZTE0
UmVzb3VyY2VMb2FkZXIxM3NldElkZW50aWZpZXJFbQogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxv
YWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI0cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTY2hl
bWVSZWdpc3RyeTI1cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZUVSS04zV1RGNlN0cmluZ0UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGYwM2JjOWYuLmI3MDI5ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjU4NCw3ICsyNTg0LDEwIEBA
IHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1CiAgICAgICAgIAogICAgICAgICBpZiAoIWRvY3VtZW50
TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHko
bmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgewogI2lmIFVTRShQTEFURk9STV9T
VFJBVEVHSUVTKQotICAgICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0
ZWd5KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkobmV0d29ya2luZ0NvbnRleHQoKSwgbmV3
UmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSAwOworICAgICAgICAgICAgaWYgKG1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gbV9mcmFtZS0+cGFn
ZSgpLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0LCBzdG9y
ZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKICNlbHNlCiAgICAgICAgICAg
ICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29u
dGV4dCgpLCBuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0
cmF0ZWd5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5jcHAKaW5k
ZXggOTViYzYwZi4uYjBlYzAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0xv
YWRlclN0cmF0ZWd5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRl
Z3kuY3BwCkBAIC0zOCw3ICszOCw3IEBAIFJlc291cmNlTG9hZFNjaGVkdWxlciogTG9hZGVyU3Ry
YXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiAgICAgcmV0dXJuIFdlYkNvcmU6OnJlc291
cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjxj
aGFyPiYgZGF0YSkKK3ZvaWQgTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMs
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PGNoYXI+JiBkYXRhKQogewogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9u
c2UsIGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0
cmF0ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAppbmRleCAz
ZDBlMWRiLi4yYTgxMjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVy
U3RyYXRlZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaApA
QCAtNDMsNyArNDMsNyBAQCBjbGFzcyBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
IGRhdGEpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TG9hZGVyU3RyYXRlZ3koKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMDg1NjdmYi4uMTMxZjE4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC01NDksMTQg
KzU0OSw0IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRNZW1iZXIobV9v
cHRpb25zKTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVzb3VyY2VMb2FkZXI6OnNl
dElkZW50aWZpZXIodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQotewotICAgIC8vIEZJWE1FIChO
ZXR3b3JrUHJvY2Vzcyk6IFRoaXMgaXMgdGVtcG9yYXJ5IHRvIGFsbG93IFdlYktpdCB0byBkaXJl
Y3RseSBzZXQgdGhlIGlkZW50aWZpZXIgb24gYSBSZXNvdXJjZUxvYWRlci4KLSAgICAvLyBNb3Jl
IHBlcm1hbmVudGx5IHdlJ2xsIHdhbnQgdGhlIGlkZW50aWZpZXIgdG8gYmUgcGlwZWQgdGhyb3Vn
aCBSZXNvdXJjZUxvYWRlcjo6aW5pdC9zdGFydCBzbwotICAgIC8vIGl0IGFsd2F5cyBoYXMgaXQs
IGVzcGVjaWFsbHkgaW4gd2lsbFNlbmRSZXF1ZXN0LgotICAgIG1faWRlbnRpZmllciA9IGlkZW50
aWZpZXI7Ci19Ci0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIu
aAppbmRleCA4ZmE4YWE2Li5iYzlkOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuaApAQCAtMTUxLDEzICsxNTEsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFRoaXMgaXMgdGVtcG9yYXJ5
IHRvIGFsbG93IFdlYktpdCB0byBkaXJlY3RseSBzZXQgdGhlIGlkZW50aWZpZXIgb24gYSBSZXNv
dXJjZUxvYWRlci4KLSAgICAvLyBNb3JlIHBlcm1hbmVudGx5IHdlIHdhbnQgdGhlIGlkZW50aWZp
ZXIgdG8gYmUgcGlwZWQgdGhyb3VnaCBSZXNvdXJjZUxvYWRlcjo6aW5pdC9zdGFydCBzbwotICAg
IC8vIGl0IGFsd2F5cyBoYXMgaXQsIGVzcGVjaWFsbHkgaW4gd2lsbFNlbmRSZXF1ZXN0LgotICAg
IHZvaWQgc2V0SWRlbnRpZmllcih1bnNpZ25lZCBsb25nKTsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6
CiAgICAgUmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBSZXNvdXJjZUxvYWRlck9wdGlvbnMpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggOGI2MWU2NS4uZWYzMWU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBA
QAorMjAxMy0wMS0xOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV3b3JrIE5ldHdvcmtQcm9jZXNzIHJlc291cmNlIGxvYWQgaWRlbnRpZmllcnMuCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMjkzNDQ0OT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDcxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBIYXZpbmcgdGhlIE5ldHdvcmtQcm9jZXNzIHZlbmQgb3V0IGlkZW50
aWZpZXJzIHRvIFdlYlByb2Nlc3NlcyB3YXMgYSBiYWQgaWRlYS4KKyAgICAgICAgVGhpcyBwYXRj
aCByZXZlcnRzIHRoYXQgc28gdGhhdCBXZWJQcm9jZXNzZXMgYXJlIGluIGNvbnRyb2wgb2YgdGhl
aXIgb3duIHVuaXF1ZSBpZGVudGlmaWVycy4KKworICAgICAgICBUaGUgTmV0d29ya1Byb2Nlc3Mg
ZG9lc24ndCBuZWVkIGlkZW50aWZpZXJzIGF0IGFsbC4KKyAgICAgICAgSXQgY2FuIHJlcHJlc2Vu
dCBvdXRzdGFuZGluZyBsb2FkcyB3aXRoIHRoZSBsb2FkZXJzIHRoZW1zZWx2ZXMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGEgIlNjaGVkdWxhYmxlTG9hZGVyIiBiYXNlIGNsYXNzIGZvciBu
b3JtYWwgYW5kIHN5bmNocm9ub3VzIGxvYWRlcnMuCisgICAgICAgIEl0IHJld29ya3MgZWFjaCB1
c2Ugb2YgaWRlbnRpZmllcnMgaW50byB1c2luZyBTY2hlZHVsYWJsZUxvYWRlcnMgaW5zdGVhZC4K
KworICAgICAgICBUaGlzIGFsc28gZ2F2ZSBhbiBvcHBvcnR1bml0eSB0byBtb3ZlIHRoZSBzZXJ2
aW5nIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9yIGEgaG9zdCBpbnRvIHRoZSAKKyAgICAgICAgSG9z
dFJlY29yZCBpdHNlbGYgd2hpY2ggY2xlYW5zIGNlcnRhaW4gdGhpbmdzIHVwIG5pY2VseS4KKwor
ICAgICAgICBDaGFuZ2UgSG9zdFJlY29yZCB0byBoYXZlIHF1ZXVlcyBvZiBTY2hlZHVsYWJsZUxv
YWRlcnMgaW5zdGVhZCBvZiBpZGVudGlmaWVycy4KKyAgICAgICAgTWFrZSBIb3N0UmVjb3JkIHJl
c3BvbnNpYmxlIGZvciBhY3R1YWxseSBzdGFydGluZyB0aGUgbG9hZGVycyBpbiBpdHMgcXVldWVz
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpIb3N0UmVjb3JkOjp+SG9zdFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Okhvc3RSZWNv
cmQ6OnNjaGVkdWxlUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3Jk
OjphZGRMb2FkZXJJblByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6cmVt
b3ZlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6aGFzUmVxdWVzdHMpOgor
ICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVl
KToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgor
ICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjpsaW1pdHNSZXF1ZXN0cyk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOgorICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3Jk
OjpjcmVhdGUpOiBIb3N0UmVjb3JkIGlzIG5vdyBhbHNvIFJlZkNvdW50ZWQuIG5ldyBhbmQgZGVs
ZXRlIGFyZSBzbyAyMDA0LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQpOiBDcmVhdGUgdGhlIGxvYWRlciB0
aGVuIHNjaGVkdWxlCisgICAgICAgICAgaXQgd2l0aCB0aGUgc2NoZWR1bGVyLCBpbnN0ZWFkIG9m
IGhhdmluZyB0aGUgc2NoZWR1bGVyIGNyZWF0ZSBpdC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnBlcmZvcm1TeW5jaHJvbm91c0xvYWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3ZlTG9hZElkZW50
aWZpZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW46CisKKyAgICAgICAgUmVtb3ZlIG1hcHMgYW5kIHNldHMgb2Yg
aWRlbnRpZmllcnMsIHJlcGxhY2luZyB0aGVtIHdpdGggc2V0cyBvZiBTY2hlZHVhYmxlTG9hZGVy
cyB3aGVyZSBuZWVkZWQuCisgICAgICAgIFJlbHkgb24gSG9zdFJlY29yZHMgdG8gYWN0dWFsbHkg
bWFuYWdlIHNldHMgb2YgU2NoZWR1bGFibGVMb2FkZXJzLgorICAgICAgICBSZWx5IG9uIEhvc3RS
ZWNvcmQgdG8gZG8gdGhlIGFjdHVhbCBzZXJ2aW5nIG9mIGl0cyBwZW5kaW5nIHJlcXVlc3RzOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1Jl
cXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVtb3ZlU2NoZWR1bGVkTG9hZGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUmVtb3ZlTG9hZGVyKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisKKyAgICAgICAgQSBuZXcg
YmFzZSBjbGFzcyBmb3IgYWxsIGxvYWRlcnMgdGhhdCB0aGUgc2NoZWR1bGVyIGFuZCBIb3N0UmVj
b3JkcyBtaWdodCBuZWVkIHRvIGtub3cgYWJvdXQ6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
U2NoZWR1bGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTY2hlZHVsYWJsZUxvYWRl
cjo6U2NoZWR1bGFibGVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpTY2hlZHVsYWJsZUxvYWRl
cjo6flNjaGVkdWxhYmxlTG9hZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVs
YWJsZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpTY2hlZHVsYWJsZUxvYWRlcjo6bG9hZFBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpTY2hlZHVsYWJsZUxvYWRlcjo6Y29ubmVjdGlv
blRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlNjaGVkdWxhYmxlTG9hZGVyOjppc1N5
bmNocm9ub3VzKToKKyAgICAgICAgKFdlYktpdDo6U2NoZWR1bGFibGVMb2FkZXI6OnNldEhvc3RS
ZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpTY2hlZHVsYWJsZUxvYWRlcjo6aG9zdFJlY29yZCk6
CisKKyAgICAgICAgQ2hhbmdlIHRvIGluaGVyaXQgZnJvbSBTY2hlZHVsYWJsZUxvYWRlciwgcmVt
b3Zpbmcgc29tZSBvZiB0aGUgZHVwbGljYXRlZCBkYXRhIGFuZCBtZXRob2RzOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb25uZWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkZXN0aW5hdGlvbklEKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUpOgorCisgICAgICAgIENoYW5nZSB0byBpbmhl
cml0IGZyb20gU2NoZWR1bGFibGVMb2FkZXIsIHJlbW92aW5nIHNvbWUgb2YgdGhlIGR1cGxpY2F0
ZWQgZGF0YSBhbmQgbWV0aG9kczoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3luY05ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlN5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6OlN5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlN5bmNOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmlzU3luY2hyb25vdXMpOgorCisgICAgICAgIEZvbGQgdGhlIFdlYlBy
b2Nlc3MgcmVzb3VyY2UgbG9hZCBpZGVudGlmaWVyIGluIHdpdGggdGhlIGxvYWQgcGFyYW1ldGVy
czoKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvTmV0d29y
ay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6aWRlbnRpZmllcik6CisKKyAgICAgICAgVGhlIGlk
ZW50aWZpZXIgaXMgcHJlc2V0IGluIHRoZSBXZWJQcm9jZXNzIGFuZCBkb2Vzbid0IGNvbWUgZnJv
bSB0aGUgTmV0d29ya1Byb2Nlc3MsCisgICAgICAgIHNvIHRoZSBtZXNzYWdlIHRvIHNjaGVkdWxl
IGEgbG9hZCBjYW4gbm93IGJlIGFzeW5jaHJvbm91czoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05l
dHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQpOgorCisgICAgICAgIFVwZGF0ZSB0
byBpbmNsdWRlIGEgV2ViUHJvY2VzcyBnZW5lcmF0ZWQgaWRlbnRpZmllciBhbG9uZyB3aXRoIHN5
bmNocm9ub3VzIGxvYWRzOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorCisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAxLTE3ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMzk1MTYp
OiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0IGlzIG5vdCBj
YWxsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVj
b3JkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCmlu
ZGV4IDM3MzkxYjYuLjhjYzI0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0hvc3RSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0hvc3RSZWNvcmQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIApAQCAtNDksMzYgKzUw
LDUxIEBAIEhvc3RSZWNvcmQ6Okhvc3RSZWNvcmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4
UmVxdWVzdHNJbkZsaWdodCkKIEhvc3RSZWNvcmQ6On5Ib3N0UmVjb3JkKCkKIHsKICNpZm5kZWYg
TkRFQlVHCi0gICAgQVNTRVJUKG1fcmVzb3VyY2VJZGVudGlmaWVyc0xvYWRpbmcuaXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQobV9sb2FkZXJzSW5Qcm9ncmVzcy5pc0VtcHR5KCkpOwogICAgIGZvciAo
dW5zaWduZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspCiAg
ICAgICAgIEFTU0VSVChtX2xvYWRlcnNQZW5kaW5nW3BdLmlzRW1wdHkoKSk7CiAjZW5kaWYKIH0K
IAotdm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZShQYXNzUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxv
YWRlcj4gbG9hZGVyKQordm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBh
c3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKIHsKLSAgICBtX2xvYWRlcnNQZW5k
aW5nW2xvYWRlci0+cHJpb3JpdHkoKV0uYXBwZW5kKGxvYWRlcik7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGxvYWRlci0+c2V0SG9zdFJlY29yZCh0aGlzKTsKKyAgICAKKyAg
ICBpZiAobG9hZGVyLT5pc1N5bmNocm9ub3VzKCkpCisgICAgICAgIG1fc3luY0xvYWRlcnNQZW5k
aW5nLmFwcGVuZChsb2FkZXIpOworICAgIGVsc2UKKyAgICAgICAgbV9sb2FkZXJzUGVuZGluZ1ts
b2FkZXItPmxvYWRQYXJhbWV0ZXJzKCkucHJpb3JpdHkoKV0uYXBwZW5kKGxvYWRlcik7CiB9CiAK
LXZvaWQgSG9zdFJlY29yZDo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciBpZGVudGlmaWVyKQordm9pZCBIb3N0UmVjb3JkOjphZGRMb2FkZXJJblByb2dyZXNzKFNjaGVk
dWxhYmxlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgbV9yZXNvdXJjZUlkZW50aWZpZXJzTG9hZGlu
Zy5hZGQoaWRlbnRpZmllcik7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1f
bG9hZGVyc0luUHJvZ3Jlc3MuYWRkKGxvYWRlcik7CisgICAgbG9hZGVyLT5zZXRIb3N0UmVjb3Jk
KHRoaXMpOwogfQogCi12b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZShSZXNvdXJjZUxvYWRJZGVudGlm
aWVyIGlkZW50aWZpZXIpCit2b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJs
ZUxvYWRlciogbG9hZGVyKQogewotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IER1ZSB0
byBJUEMgcmFjZSBjb25kaXRpb25zLCBpdCdzIHBvc3NpYmxlIHRoaXMgSG9zdFJlY29yZCB3aWxs
IGJlIGFza2VkIHRvIHJlbW92ZSB0aGUgc2FtZSBpZGVudGlmZXIgdHdpY2UuCi0gICAgLy8gSXQg
d291bGQgYmUgbmljZSB0byBrbm93IHRoZSBpZGVudGlmaWVyIGhhcyBhbHJlYWR5IGJlZW4gcmVt
b3ZlZCBhbmQgdHJlYXQgaXQgYXMgYSBuby1vcC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgaWYgKG1fcmVzb3VyY2VJZGVudGlmaWVyc0xvYWRpbmcuY29udGFpbnMoaWRlbnRp
ZmllcikpIHsKLSAgICAgICAgbV9yZXNvdXJjZUlkZW50aWZpZXJzTG9hZGluZy5yZW1vdmUoaWRl
bnRpZmllcik7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogRHVlIHRvIElQQyByYWNl
IGNvbmRpdGlvbnMsIGl0J3MgcG9zc2libGUgdGhpcyBIb3N0UmVjb3JkIHdpbGwgYmUgYXNrZWQg
dG8gcmVtb3ZlIHRoZSBzYW1lIGxvYWRlciB0d2ljZS4KKyAgICAvLyBJdCB3b3VsZCBiZSBuaWNl
IHRvIGtub3cgdGhlIGxvYWRlciBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIHRyZWF0IGl0
IGFzIGEgbm8tb3AuCisKKyAgICBTY2hlZHVsYWJsZUxvYWRlclNldDo6aXRlcmF0b3IgaSA9IG1f
bG9hZGVyc0luUHJvZ3Jlc3MuZmluZChsb2FkZXIpOworICAgIGlmIChpICE9IG1fbG9hZGVyc0lu
UHJvZ3Jlc3MuZW5kKCkpIHsKKyAgICAgICAgaS0+Z2V0KCktPnNldEhvc3RSZWNvcmQoMCk7Cisg
ICAgICAgIG1fbG9hZGVyc0luUHJvZ3Jlc3MucmVtb3ZlKGkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIGZvciAoaW50IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlI
aWdoZXN0OyBwcmlvcml0eSA+PSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvd2VzdDsgLS1wcmlvcml0
eSkgeyAgCiAgICAgICAgIExvYWRlclF1ZXVlOjppdGVyYXRvciBlbmQgPSBtX2xvYWRlcnNQZW5k
aW5nW3ByaW9yaXR5XS5lbmQoKTsKICAgICAgICAgZm9yIChMb2FkZXJRdWV1ZTo6aXRlcmF0b3Ig
aXQgPSBtX2xvYWRlcnNQZW5kaW5nW3ByaW9yaXR5XS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIGlmIChpdC0+Z2V0KCktPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVy
KSB7CisgICAgICAgICAgICBpZiAoaXQtPmdldCgpID09IGxvYWRlcikgeworICAgICAgICAgICAg
ICAgIGl0LT5nZXQoKS0+c2V0SG9zdFJlY29yZCgwKTsKICAgICAgICAgICAgICAgICBtX2xvYWRl
cnNQZW5kaW5nW3ByaW9yaXR5XS5yZW1vdmUoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KQEAgLTg4LDcgKzEwNCw3IEBAIHZvaWQgSG9zdFJlY29yZDo6cmVtb3Zl
KFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKIAogYm9vbCBIb3N0UmVjb3JkOjpo
YXNSZXF1ZXN0cygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3Jlc291cmNlSWRlbnRpZmllcnNMb2Fk
aW5nLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fbG9hZGVyc0luUHJvZ3Jlc3MuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0gUmVz
b3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspIHsKQEAgLTk5LDEyICsxMTUsNTkgQEAgYm9v
bCBIb3N0UmVjb3JkOjpoYXNSZXF1ZXN0cygpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEhvc3RSZWNvcmQ6OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJp
b3JpdHksIGJvb2wgc2VyaWFsTG9hZGluZ0VuYWJsZWQpIGNvbnN0Cit2b2lkIEhvc3RSZWNvcmQ6
OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUoTG9hZGVyUXVldWUmIHF1ZXVlLCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICBSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlciA9IHF1ZXVlLmZpcnN0
KCk7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmhvc3RSZWNvcmQoKSA9PSB0aGlzKTsKKworICAg
ICAgICAvLyBUaGlzIHJlcXVlc3QgbWlnaHQgYmUgZnJvbSBXZWJQcm9jZXNzIHdlJ3ZlIGxvc3Qg
b3VyIGNvbm5lY3Rpb24gdG8uCisgICAgICAgIC8vIElmIHNvIHdlIHNob3VsZCBqdXN0IHNraXAg
aXQuCisgICAgICAgIGlmICghbG9hZGVyLT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkpIHsKKyAg
ICAgICAgICAgIHJlbW92ZUxvYWRlcihsb2FkZXIuZ2V0KCkpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3IgbmFtZWQgaG9zdHMgLSB3aGljaCBhcmUg
b25seSBodHRwKHMpIGhvc3RzIC0gd2Ugc2hvdWxkIGFsd2F5cyBlbmZvcmNlIHRoZSBjb25uZWN0
aW9uIGxpbWl0LgorICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBi
dXQgaHR0cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1
bWVudAorICAgICAgICAvLyBpc24ndCBkb25lIHBhcnNpbmcgYW5kIHdlIGRvbid0IGtub3cgYWxs
IHN0eWxlc2hlZXRzIHlldC4KKworICAgICAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBU
aGUgYWJvdmUgY29tbWVudCBhYm91dCBkb2N1bWVudCBwYXJzaW5nIGFuZCBzdHlsZXNoZWV0cyBp
cyBhIGhvbGRvdmVyCisgICAgICAgIC8vIGZyb20gdGhlIFdlYkNvcmU6OlJlc291cmNlTG9hZFNj
aGVkdWxlci4KKyAgICAgICAgLy8gVGhlIGJlaGF2aW9yIGRlc2NyaWJlZCB3YXMgYXQgb25lIHRp
bWUgaW1wb3J0YW50IGZvciBXZWJDb3JlJ3Mgc2luZ2xlIHRocmVhZGVkbmVzcy4KKyAgICAgICAg
Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgaXQgd2l0aCB0aGUgTmV0
d29ya1Byb2Nlc3MuCisgICAgICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgZGVjaWRlIGl0J3Mgbm90
IGltcG9ydGFudCBhbmQgY2hhbmdlIHRoZSBhYm92ZSBjb21tZW50LCBvciBkZWNpZGUgaXQgaXMK
KyAgICAgICAgLy8gc3RpbGwgaW1wb3J0YW50IGFuZCBzb21laG93IGFjY291bnQgZm9yIGl0Lgor
CisgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFuYW1lKCkuaXNOdWxsKCk7Cisg
ICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGxpbWl0c1JlcXVlc3RzKHByaW9yaXR5
LCBsb2FkZXItPmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxl
ZCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xvYWRlcnNJblByb2dyZXNz
LmFkZChsb2FkZXIpOworICAgICAgICBxdWV1ZS5yZW1vdmVGaXJzdCgpOworCisgICAgICAgIGxv
YWRlci0+c3RhcnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSG9zdFJlY29yZDo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQoreworICAgIExP
RyhOZXR3b3JrU2NoZWR1bGluZywgIkhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIEhv
c3QgbmFtZT0nJXMnIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gV2Ugc2VydmUg
c3luY2hyb25vdXMgcmVxdWVzdHMgYmVmb3JlIGFueSBvdGhlciByZXF1ZXN0cyB0byBpbXByb3Zl
IHJlc3BvbnNpdmVuZXNzIGluIGFueQorICAgIC8vIFdlYlByb2Nlc3MgdGhhdCBpcyB3YWl0aW5n
IG9uIGEgc3luY2hyb25vdXMgbG9hZC4KKyAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVl
KG1fc3luY0xvYWRlcnNQZW5kaW5nLCBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QpOworICAg
IAorICAgIGZvciAoaW50IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBw
cmlvcml0eSA+PSBtaW5pbXVtUHJpb3JpdHk7IC0tcHJpb3JpdHkpCisgICAgICAgIHNlcnZlUGVu
ZGluZ1JlcXVlc3RzRm9yUXVldWUobV9sb2FkZXJzUGVuZGluZ1twcmlvcml0eV0sIChSZXNvdXJj
ZUxvYWRQcmlvcml0eSlwcmlvcml0eSk7Cit9CisKK2Jvb2wgSG9zdFJlY29yZDo6bGltaXRzUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGJvb2wgc2VyaWFsTG9hZGluZ0Vu
YWJsZWQpIGNvbnN0CiB7Ci0gICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5
VmVyeUxvdyAmJiAhbV9yZXNvdXJjZUlkZW50aWZpZXJzTG9hZGluZy5pc0VtcHR5KCkpCisgICAg
aWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyAmJiAhbV9sb2FkZXJz
SW5Qcm9ncmVzcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJu
IG1fcmVzb3VyY2VJZGVudGlmaWVyc0xvYWRpbmcuc2l6ZSgpID49IChzZXJpYWxMb2FkaW5nRW5h
YmxlZCA/IDEgOiBtX21heFJlcXVlc3RzSW5GbGlnaHQpOworICAgIHJldHVybiBtX2xvYWRlcnNJ
blByb2dyZXNzLnNpemUoKSA+PSAoc2VyaWFsTG9hZGluZ0VuYWJsZWQgPyAxIDogbV9tYXhSZXF1
ZXN0c0luRmxpZ2h0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmgKaW5kZXggYjIxOWU2YS4uOTQ3ZjA2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaApAQCAtMzEsNDAgKzMx
LDQ2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBTY2hlZHVsYWJs
ZUxvYWRlcjsKIGNsYXNzIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI7CiB0eXBlZGVmIHVpbnQ2
NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CiAKLWNsYXNzIEhvc3RSZWNvcmQgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEhvc3RSZWNvcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K2NsYXNzIEhvc3RSZWNvcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxIb3N0UmVjb3JkPiB7CiBwdWJs
aWM6Ci0gICAgSG9zdFJlY29yZChjb25zdCBTdHJpbmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0lu
RmxpZ2h0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIb3N0UmVjb3JkPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSG9zdFJlY29yZChuYW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0KSk7
CisgICAgfQorICAgIAogICAgIH5Ib3N0UmVjb3JkKCk7CiAgICAgCiAgICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdm9pZCBzY2hlZHVsZShQYXNz
UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOwotICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jl
c3MoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7Ci0gICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllcik7CisgICAgCisgICAgdm9pZCBzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NS
ZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+KTsKKyAgICB2b2lkIGFkZExvYWRlckluUHJvZ3Jlc3Mo
U2NoZWR1bGFibGVMb2FkZXIqKTsKKyAgICB2b2lkIHJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxv
YWRlciopOwogICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICBib29sIGxpbWl0UmVx
dWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHksIGJvb2wgc2VyaWFsTG9hZGluZ0Vu
YWJsZWQpIGNvbnN0OworICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkUHJpb3JpdHkpOwogCi0gICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8TmV0d29ya1Jl
c291cmNlTG9hZGVyPiA+IExvYWRlclF1ZXVlOwotICAgIExvYWRlclF1ZXVlJiBsb2FkZXJzUGVu
ZGluZyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1cm4gbV9s
b2FkZXJzUGVuZGluZ1twcmlvcml0eV07IH0KK3ByaXZhdGU6CisgICAgSG9zdFJlY29yZChjb25z
dCBTdHJpbmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0luRmxpZ2h0KTsKIAotICAgIHR5cGVkZWYg
RGVxdWU8UmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+ID4gU3luY0xvYWRlclF1ZXVl
OwotICAgIFN5bmNMb2FkZXJRdWV1ZSYgc3luY0xvYWRlcnNQZW5kaW5nKCkgeyByZXR1cm4gbV9z
eW5jTG9hZGVyc1BlbmRpbmc7IH0KKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxTY2hlZHVsYWJs
ZUxvYWRlcj4gPiBMb2FkZXJRdWV1ZTsKKworICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHNG
b3JRdWV1ZShMb2FkZXJRdWV1ZSYsIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAg
ICBib29sIGxpbWl0c1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBib29s
IHNlcmlhbExvYWRpbmdFbmFibGVkKSBjb25zdDsKIAotcHJpdmF0ZTogICAgICAgICAgICAgICAg
ICAgIAogICAgIExvYWRlclF1ZXVlIG1fbG9hZGVyc1BlbmRpbmdbV2ViQ29yZTo6UmVzb3VyY2VM
b2FkUHJpb3JpdHlIaWdoZXN0ICsgMV07Ci0gICAgdHlwZWRlZiBIYXNoU2V0PFJlc291cmNlTG9h
ZElkZW50aWZpZXI+IFJlc291cmNlTG9hZElkZW50aWZpZXJTZXQ7Ci0gICAgUmVzb3VyY2VMb2Fk
SWRlbnRpZmllclNldCBtX3Jlc291cmNlSWRlbnRpZmllcnNMb2FkaW5nOwotICAgIAotICAgIFN5
bmNMb2FkZXJRdWV1ZSBtX3N5bmNMb2FkZXJzUGVuZGluZzsKLSAgICBIYXNoU2V0PFJlZlB0cjxT
eW5jTmV0d29ya1Jlc291cmNlTG9hZGVyPiA+IG1fc3luY0xvYWRlcnNMb2FkaW5nOworICAgIExv
YWRlclF1ZXVlIG1fc3luY0xvYWRlcnNQZW5kaW5nOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJl
ZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gPiBTY2hlZHVsYWJsZUxvYWRlclNldDsKKyAgICBTY2hl
ZHVsYWJsZUxvYWRlclNldCBtX2xvYWRlcnNJblByb2dyZXNzOwogCiAgICAgY29uc3QgU3RyaW5n
IG1fbmFtZTsKICAgICBpbnQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCmluZGV4IDE4NjNiMzguLmI1OWM2N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmUKICAg
ICB9CiAgICAgCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+KCkpIHsKLSAgICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBs
b2FkZXIgPSBtX3Jlc291cmNlTG9hZGVycy5nZXQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpLmdl
dCgpOworICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fbmV0d29ya1Jl
c291cmNlTG9hZGVycy5nZXQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpLmdldCgpOwogICAgICAg
ICBpZiAobG9hZGVyKQogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlTmV0d29ya1Jlc291
cmNlTG9hZGVyTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwogICAgICAg
ICByZXR1cm47CkBAIC04OSwzMyArODksNDIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVjdGlvbiopCiAgICAgLy8gUHJvdGVjdCBv
dXJzZWxmIGFzIHdlIG1pZ2h0IGJlIG90aGVyd2lzZSBiZSBkZWxldGVkIGR1cmluZyB0aGlzIGZ1
bmN0aW9uLgogICAgIFJlZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gcHJvdGVj
dG9yKHRoaXMpOwogCi0gICAgSGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBSZWZQdHI8
TmV0d29ya1Jlc291cmNlTG9hZGVyPiA+OjppdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlTG9hZGVy
cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gPjo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VMb2FkZXJz
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgSGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlm
aWVyLCBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiA+OjppdGVyYXRvciBlbmQgPSBtX25l
dHdvcmtSZXNvdXJjZUxvYWRlcnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFJlc291cmNlTG9h
ZElkZW50aWZpZXIsIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+ID46Oml0ZXJhdG9yIGkg
PSBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKICAgICAg
ICAgaS0+dmFsdWUtPmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSgpOwotICAgIAotICAg
IG1fcmVzb3VyY2VMb2FkZXJzLmNsZWFyKCk7CisKKyAgICBIYXNoTWFwPFJlc291cmNlTG9hZElk
ZW50aWZpZXIsIFJlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyPiA+OjppdGVyYXRvciBz
eW5jRW5kID0gbV9zeW5jTmV0d29ya1Jlc291cmNlTG9hZGVycy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hNYXA8UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VM
b2FkZXI+ID46Oml0ZXJhdG9yIGkgPSBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmJlZ2lu
KCk7IGkgIT0gc3luY0VuZDsgKytpKQorICAgICAgICBpLT52YWx1ZS0+Y29ubmVjdGlvblRvV2Vi
UHJvY2Vzc0RpZENsb3NlKCk7CisKKyAgICBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuY2xlYXIo
KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpTdHJpbmdSZWZlcmVu
Y2UsIENvcmVJUEM6OlN0cmluZ1JlZmVyZW5jZSkKIHsKIH0KIAotdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJzLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVy
JiByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmIGxvYWRQYXJhbWV0ZXJzKQogewotICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+IGxvYWRlciA9ICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcigpLnNjaGVkdWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzLCB0aGlzKTsK
LSAgICByZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gbG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAg
bV9yZXNvdXJjZUxvYWRlcnMuYWRkKHJlc291cmNlTG9hZElkZW50aWZpZXIsIGxvYWRlcik7Cisg
ICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpjcmVhdGUobG9hZFBhcmFtZXRlcnMsIHRoaXMpOworICAgIG1fbmV0d29ya1Jlc291
cmNlTG9hZGVycy5hZGQobG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllcigpLCBsb2FkZXIpOworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
c2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cGVyZm9ybVN5bmNocm9ub3VzTG9hZChjb25zdCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyYgbG9hZFBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxh
eWVkUmVwbHk+IHJlcGx5KQogewotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVy
KFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShsb2FkUGFyYW1ldGVycywgcmVwbHkp
KTsKKyAgICBSZWZQdHI8U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGxvYWRQYXJhbWV0ZXJzLCB0aGlzLCByZXBseSk7
CisgICAgbV9zeW5jTmV0d29ya1Jlc291cmNlTG9hZGVycy5hZGQobG9hZFBhcmFtZXRlcnMuaWRl
bnRpZmllcigpLCBsb2FkZXIpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0K
IAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3ZlTG9hZElkZW50aWZp
ZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQogewotICAgIE5ldHdvcmtQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3ZlTG9hZElk
ZW50aWZpZXIoaWRlbnRpZmllcik7Ci0gICAgbV9yZXNvdXJjZUxvYWRlcnMucmVtb3ZlKGlkZW50
aWZpZXIpOworICAgIFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gbG9hZGVyID0gbV9uZXR3b3Jr
UmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7CisgICAgaWYgKCFsb2FkZXIpCisgICAg
ICAgIGxvYWRlciA9IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlmaWVy
KTsKKworICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkucmVtb3ZlTG9hZGVyKGxvYWRlci5nZXQoKSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90IHJlc291
cmNlTG9hZFByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggOGIxMTRiYS4u
YzQ0ZjAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC00Myw2ICs0Myw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzczsK
IGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIFN5bmNOZXR3b3JrUmVzb3VyY2VM
b2FkZXI7CiB0eXBlZGVmIHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CiAKIGNsYXNz
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+LCBDb3JlSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewpA
QCAtNjcsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25Q
dHI8Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+Jik7CiAgICAgCi0gICAgdm9pZCBzY2hlZHVsZVJl
c291cmNlTG9hZChjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIFJlc291cmNl
TG9hZElkZW50aWZpZXImKTsKKyAgICB2b2lkIHNjaGVkdWxlUmVzb3VyY2VMb2FkKGNvbnN0IE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBwZXJmb3JtU3luY2hyb25v
dXNMb2FkKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgUGFzc1JlZlB0cjxN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91
c0xvYWQ6OkRlbGF5ZWRSZXBseT4pOwogCiAgICAgdm9pZCByZW1vdmVMb2FkSWRlbnRpZmllcihS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKQEAgLTg0LDcgKzg1LDggQEAgcHJpdmF0ZToKIAogICAg
IFJlZlB0cjxDb3JlSVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAKLSAgICBIYXNoTWFw
PFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+ID4g
bV9yZXNvdXJjZUxvYWRlcnM7CisgICAgSGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBS
ZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiA+IG1fbmV0d29ya1Jlc291cmNlTG9hZGVyczsK
KyAgICBIYXNoTWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxTeW5jTmV0d29ya1Jl
c291cmNlTG9hZGVyPiA+IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnM7CiAKICAgICBib29s
IG1fc2VyaWFsTG9hZGluZ0VuYWJsZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbgppbmRleCA2NmRmNmU1Li5jMTcyM2U1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjQsMTEgKzI0LDcgQEAKIAogbWVz
c2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgewogCi0gICAgLy8gRklYTUUg
KE5ldHdvcmtQcm9jZXNzKTogQXQgbGVhc3Qgc29tZSBvZiB0aGVzZSBzeW5jaHJvbm91cyBtZXNz
YWdlcyBhcmUgc3luY2hyb25vdXMgZHVlIHRvIHRoZSByZXF1aXJlbWVudAotICAgIC8vIHRoYXQg
d2Ugc3luY2hyb25vdXNseSBnZXQgYW4gaWRlbnRpZmllciBmb3IgbmV3IFJlc291cmNlTG9hZGVy
cyBhcyB0aGV5IGFyZSBjcmVhdGVkLgotICAgIC8vIFRoZXJlJ3MgcG9zc2libGUgUmVzb3VyY2VM
b2FkZXIgaWRlbnRpZmllciByZWZhY3RvcmluZyB0aGF0IGNhbiByZW1vdmUgdGhhdCByZXF1aXJl
bWVudC4KLSAgICAvLyBXZSBtaWdodCBhbHNvIGhhdmUgdGhlIE5ldHdvcmtQcm9jZXNzIGRpdnZ5
IHVwIGlkZW50aWZpZXJzIGluIGJsb2NrcyB0byBlYWNoIFdlYlByb2Nlc3MgYmVmb3JlaGFuZC4K
LSAgICBTY2hlZHVsZVJlc291cmNlTG9hZChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzIHJlc291cmNlTG9hZFBhcmFtZXRlcnMpIC0+ICh1aW50NjRfdCByZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyKQorICAgIFNjaGVkdWxlUmVzb3VyY2VMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3VyY2VMb2FkUGFyYW1ldGVycykKICAgICBQZXJmb3JtU3lu
Y2hyb25vdXNMb2FkKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgcmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycykgLT4gKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0
YSkgRGVsYXllZAogICAgIFJlbW92ZUxvYWRJZGVudGlmaWVyKHVpbnQ2NF90IHJlc291cmNlTG9h
ZElkZW50aWZpZXIpCiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDY2NTgx
ODQuLmQyNDI4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xOSwxMCArMTks
OSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVl
c3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7CiBzdGF0aWMgdW5zaWduZWQgbWF4
UmVxdWVzdHNJbkZsaWdodFBlckhvc3Q7Ci1zdGF0aWMgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBz
X2N1cnJlbnRSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwogCiBOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLSAgICA6IG1fbm9uSFRUUFBy
b3RvY29sSG9zdChuZXcgSG9zdFJlY29yZChTdHJpbmcoKSwgbWF4UmVxdWVzdHNJbkZsaWdodEZv
ck5vbkhUVFBQcm90b2NvbHMpKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KEhvc3RSZWNv
cmQ6OmNyZWF0ZShTdHJpbmcoKSwgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2Nv
bHMpKQogICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKQogCiB7CkBAIC00MCwxMDYgKzM5LDY4IEBAIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8TmV0d29ya1Jlc291CiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAotUGFz
c1JlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlUmVzb3VyY2VMb2FkKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5l
Y3Rpb24pCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZGVy
KFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKIHsKLSAgICBSZXNvdXJjZUxv
YWRQcmlvcml0eSBwcmlvcml0eSA9IGxvYWRQYXJhbWV0ZXJzLnByaW9yaXR5KCk7Ci0gICAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QgPSBsb2FkUGFyYW1ldGVycy5yZXF1
ZXN0KCk7Ci0gICAgCi0gICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gKytz
X2N1cnJlbnRSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwotICAgIFJlZlB0cjxOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGxvYWRQYXJh
bWV0ZXJzLCBpZGVudGlmaWVyLCBjb25uZWN0aW9uKTsKLSAgICAKLSAgICBMT0coTmV0d29ya1Nj
aGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNjaGVkdWxlTmV0d29ya1Jlc291cmNlUmVxdWVzdCByZXNvdXJjZSAlbGx1ICclcyciLCBpZGVu
dGlmaWVyLCByZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBsb2FkZXItPmxvYWRQYXJhbWV0ZXJz
KCkucHJpb3JpdHkoKTsKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCA9IGxvYWRlci0+bG9hZFBhcmFtZXRlcnMoKS5yZXF1ZXN0KCk7CisgICAgICAgIAorICAgIExP
RyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIgcmVzb3VyY2UgJyVzJyIsIHJlc291cmNlUmVxdWVz
dC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEhvc3RSZWNvcmQqIGhvc3Qg
PSBob3N0Rm9yVVJMKHJlc291cmNlUmVxdWVzdC51cmwoKSwgQ3JlYXRlSWZOb3RGb3VuZCk7CiAg
ICAgYm9vbCBoYWRSZXF1ZXN0cyA9IGhvc3QtPmhhc1JlcXVlc3RzKCk7Ci0gICAgaG9zdC0+c2No
ZWR1bGUobG9hZGVyKTsKLSAgICBtX2lkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyLCBob3N0KTsK
KyAgICBob3N0LT5zY2hlZHVsZVJlc291cmNlTG9hZGVyKGxvYWRlcik7CiAKICAgICBpZiAocHJp
b3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVzb3VyY2VSZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJp
b3JpdHlMb3cgJiYgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBp
bXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5LgotICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1
ZXN0c0Zvckhvc3QoaG9zdCwgcHJpb3JpdHkpOwotICAgICAgICByZXR1cm4gbG9hZGVyOworICAg
ICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhwcmlvcml0eSk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCiAgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxv
dyBwcmlvcml0eSByZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdo
IHByaW9yaXR5IG9uZXMuCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotICAg
IHJldHVybiBsb2FkZXI7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8U3luY05ldHdvcmtS
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQotewotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6
IFN5bmMgbG9hZGVycyBuZWVkIHRvIGdldCBpZGVudGlmaWVycyBpbiBhIHNhbmUgd2F5LgotICAg
IFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciA9ICsrc19jdXJyZW50UmVzb3VyY2VM
b2FkSWRlbnRpZmllcjsKLSAgICBsb2FkZXItPnNldElkZW50aWZpZXIoaWRlbnRpZmllcik7Ci0K
LSAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCA9IGxvYWRlci0+bG9h
ZFBhcmFtZXRlcnMoKS5yZXF1ZXN0KCk7Ci0KLSAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIo
TmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3lu
Y05ldHdvcmtSZXNvdXJjZUxvYWRlciBzeW5jaHJvbm91cyByZXNvdXJjZSAnJXMnIiwgcmVzb3Vy
Y2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgSG9zdFJlY29y
ZCogaG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBDcmVhdGVJZk5vdEZv
dW5kKTsKLSAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+aGFzUmVxdWVzdHMoKTsKLSAgICBo
b3N0LT5zeW5jTG9hZGVyc1BlbmRpbmcoKS5hcHBlbmQobG9hZGVyKTsKLSAgICBtX2lkZW50aWZp
ZXJzLmFkZChpZGVudGlmaWVyLCBob3N0KTsKLSAgICAKLSAgICBpZiAoIWhhZFJlcXVlc3RzKQot
ICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zvckhvc3QoaG9zdCwgUmVzb3VyY2VMb2FkUHJp
b3JpdHlIaWdoZXN0KTsKLQotICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0K
LQotUmVzb3VyY2VMb2FkSWRlbnRpZmllciBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjph
ZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwpCi17Ci0gICAgUmVzb3Vy
Y2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gKytzX2N1cnJlbnRSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyOwotCi0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjphZGRMb2FkSW5Qcm9ncmVzcyByZXNvdXJjZSAl
bGx1IHdpdGggdXJsICclcyciLCBpZGVudGlmaWVyLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBIb3N0UmVjb3JkKiBob3N0ID0gaG9zdEZvclVSTCh1cmwsIENyZWF0ZUlmTm90
Rm91bmQpOwotICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKGlkZW50aWZpZXIpOwotICAgIG1f
aWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIsIGhvc3QpOwotICAgIAotICAgIHJldHVybiBpZGVu
dGlmaWVyOwogfQogCiBIb3N0UmVjb3JkKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpo
b3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVh
dGVIb3N0UG9saWN5KQogewogICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkK
LSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKKyAgICAgICAgcmV0dXJuIG1f
bm9uSFRUUFByb3RvY29sSG9zdC5nZXQoKTsKIAogICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7Ci0gICAgSG9zdFJlY29yZCog
aG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lKTsKKyAgICBIb3N0UmVjb3JkKiBob3N0ID0gbV9o
b3N0cy5nZXQoaG9zdE5hbWUpLmdldCgpOwogICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9s
aWN5ID09IENyZWF0ZUlmTm90Rm91bmQpIHsKLSAgICAgICAgaG9zdCA9IG5ldyBIb3N0UmVjb3Jk
KGhvc3ROYW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCk7Ci0gICAgICAgIG1faG9zdHMu
YWRkKGhvc3ROYW1lLCBob3N0KTsKKyAgICAgICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG5ld0hvc3Qg
PSBIb3N0UmVjb3JkOjpjcmVhdGUoaG9zdE5hbWUsIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0
KTsKKyAgICAgICAgaG9zdCA9IG5ld0hvc3QuZ2V0KCk7CisgICAgICAgIG1faG9zdHMuYWRkKGhv
c3ROYW1lLCBuZXdIb3N0LnJlbGVhc2UoKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBob3N0
OwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJZGVu
dGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKK3ZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyKFNjaGVkdWxhYmxlTG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoaWRlbnRpZmll
cik7CisgICAgQVNTRVJUKGxvYWRlcik7CiAKLSAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIo
TmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJ
ZGVudGlmaWVyIHJlbW92aW5nIGxvYWQgaWRlbnRpZmllciAlbGx1IiwgaWRlbnRpZmllcik7Cisg
ICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkSWRlbnRpZmllciByZW1vdmluZyBsb2FkZXIgJXMi
LCBsb2FkZXItPmxvYWRQYXJhbWV0ZXJzKCkucmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogCi0gICAgSG9zdFJlY29yZCogaG9zdCA9IG1faWRlbnRpZmllcnMudGFrZShp
ZGVudGlmaWVyKTsKKyAgICBIb3N0UmVjb3JkKiBob3N0ID0gbG9hZGVyLT5ob3N0UmVjb3JkKCk7
CiAgICAgCiAgICAgLy8gRHVlIHRvIGEgcmFjZSBjb25kaXRpb24gdGhlIFdlYlByb2Nlc3MgbWln
aHQgaGF2ZSBtZXNzYWdlZCB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmVtb3ZlIHRoaXMgaWRlbnRp
ZmllcgogICAgIC8vIGFmdGVyIHRoZSBOZXR3b3JrUHJvY2VzcyBoYXMgYWxyZWFkeSByZW1vdmVk
IGl0IGludGVybmFsbHkuCiAgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24gd2UgbWlnaHQgbm90IGhh
dmUgYSBIb3N0UmVjb3JkIHRvIGNsZWFuIHVwLgogICAgIGlmIChob3N0KQotICAgICAgICBob3N0
LT5yZW1vdmUoaWRlbnRpZmllcik7CisgICAgICAgIGhvc3QtPnJlbW92ZUxvYWRlcihsb2FkZXIp
OwogCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QoUmVzb3VyY2VMb2FkSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCkKK3Zv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdChTY2hlZHVs
YWJsZUxvYWRlciogbG9hZGVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywg
IihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVjZWl2ZWRS
ZWRpcmVjdCByZXNvdXJjZSAlbGx1IHJlZGlyZWN0ZWQgdG8gJyVzJyIsIGlkZW50aWZpZXIsIHJl
ZGlyZWN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhOZXR3b3JrU2NoZWR1
bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVj
ZWl2ZWRSZWRpcmVjdCBsb2FkZXIgb3JpZ2luYWxseSBmb3IgJyVzJyByZWRpcmVjdGVkIHRvICcl
cyciLCBsb2FkZXItPmxvYWRQYXJhbWV0ZXJzKCkucmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHJlZGlyZWN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAg
SG9zdFJlY29yZCogb2xkSG9zdCA9IG1faWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOworICAg
IFJlZlB0cjxIb3N0UmVjb3JkPiBvbGRIb3N0ID0gbG9hZGVyLT5ob3N0UmVjb3JkKCk7CiAKICAg
ICAvLyBUaGUgbG9hZCBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCB3aGlsZSB0aGUgbWVzc2FnZSB3
YXMgaW4gZmxpZ2h0IGZyb20gbmV0d29yayB0aHJlYWQgdG8gbWFpbiB0aHJlYWQuCiAgICAgaWYg
KCFvbGRIb3N0KQpAQCAtMTQ5LDExICsxMTAsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudAog
ICAgIAogICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgbmV3SG9zdC0+YWRkTG9hZEluUHJvZ3Jlc3MoaWRlbnRpZmll
cik7Ci0gICAgbV9pZGVudGlmaWVycy5zZXQoaWRlbnRpZmllciwgbmV3SG9zdCk7CiAKLSAgICBv
bGRIb3N0LT5yZW1vdmUoaWRlbnRpZmllcik7ICAgIAorICAgIG9sZEhvc3QtPnJlbW92ZUxvYWRl
cihsb2FkZXIpOworICAgIG5ld0hvc3QtPmFkZExvYWRlckluUHJvZ3Jlc3MobG9hZGVyKTsKIH0K
IAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCkBAIC0xNjIsMTE0ICsxMjEs
NTYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW4KIAogICAgIG1fcmVxdWVzdFRpbWVyLnN0b3Ao
KTsKICAgICAKLSAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zvckhvc3QobV9ub25IVFRQUHJvdG9j
b2xIb3N0LCBtaW5pbXVtUHJpb3JpdHkpOworICAgIG1fbm9uSFRUUFByb3RvY29sSG9zdC0+c2Vy
dmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKIAogICAgIG1faG9zdHMuY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIFZlY3RvcjxIb3N0UmVjb3JkKj4gaG9zdHNUb1NlcnZlOworICAg
IFZlY3RvcjxSZWZQdHI8SG9zdFJlY29yZD4gPiBob3N0c1RvU2VydmU7CiAgICAgY29weVZhbHVl
c1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGhv
c3RzVG9TZXJ2ZS5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgSG9zdFJlY29yZCogaG9zdCA9IGhvc3RzVG9TZXJ2ZVtpXTsKKyAgICAgICAg
SG9zdFJlY29yZCogaG9zdCA9IGhvc3RzVG9TZXJ2ZVtpXS5nZXQoKTsKICAgICAgICAgaWYgKGhv
c3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zvckhv
c3QoaG9zdCwgbWluaW11bVByaW9yaXR5KTsKKyAgICAgICAgICAgIGhvc3QtPnNlcnZlUGVuZGlu
Z1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRl
bGV0ZSBtX2hvc3RzLnRha2UoaG9zdC0+bmFtZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHNGb3JIb3N0KEhvc3RS
ZWNvcmQqIGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAg
ICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyBIb3N0IG5hbWU9JyVzJyIsIGhvc3QtPm5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIC8vIFdlIHNlcnZlIHN5bmNocm9ub3VzIHJlcXVlc3RzIGJlZm9yZSBh
bnkgb3RoZXIgcmVxdWVzdHMgdG8gaW1wcm92ZSByZXNwb25zaXZlbmVzcyBpbiBhbnkKLSAgICAv
LyBXZWJQcm9jZXNzIHRoYXQgaXMgd2FpdGluZyBvbiBhIHN5bmNocm9ub3VzIGxvYWQuCi0gICAg
SG9zdFJlY29yZDo6U3luY0xvYWRlclF1ZXVlJiBzeW5jTG9hZGVyc1BlbmRpbmcgPSBob3N0LT5z
eW5jTG9hZGVyc1BlbmRpbmcoKTsKLSAgICB3aGlsZSAoIXN5bmNMb2FkZXJzUGVuZGluZy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRl
ciA9IHN5bmNMb2FkZXJzUGVuZGluZy5maXJzdCgpOwotCi0gICAgICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IEhvdyBkbyB3ZSBrbm93IHRoaXMgc3luY2hyb25vdXMgbG9hZCBpc24ndCBh
c3NvY2lhdGVkIHdpdGggYSBXZWJQcm9jZXNzCi0gICAgICAgIC8vIHdlJ3ZlIGxvc3Qgb3VyIGNv
bm5lY3Rpb24gdG8/Ci0gICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5u
YW1lKCkuaXNOdWxsKCk7Ci0gICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3Qt
PmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0LCBmYWxzZSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3luY0xvYWRlcnNQZW5kaW5nLnJlbW92ZUZpcnN0
KCk7Ci0gICAgICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKGxvYWRlci0+aWRlbnRpZmllcigp
KTsKLQotICAgICAgICBsb2FkZXItPnN0YXJ0KCk7Ci0gICAgfQotICAgIAotICAgIGZvciAoaW50
IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwcmlvcml0eSA+PSBtaW5p
bXVtUHJpb3JpdHk7IC0tcHJpb3JpdHkpIHsKLSAgICAgICAgSG9zdFJlY29yZDo6TG9hZGVyUXVl
dWUmIGxvYWRlcnNQZW5kaW5nID0gaG9zdC0+bG9hZGVyc1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJp
b3JpdHkocHJpb3JpdHkpKTsKLQotICAgICAgICB3aGlsZSAoIWxvYWRlcnNQZW5kaW5nLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVy
ID0gbG9hZGVyc1BlbmRpbmcuZmlyc3QoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
VGhpcyByZXF1ZXN0IG1pZ2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3ZSd2ZSBsb3N0IG91ciBjb25u
ZWN0aW9uIHRvLgotICAgICAgICAgICAgLy8gSWYgc28gd2Ugc2hvdWxkIGp1c3Qgc2tpcCBpdC4K
LSAgICAgICAgICAgIGlmICghbG9hZGVyLT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkpIHsKLSAg
ICAgICAgICAgICAgICBsb2FkZXJzUGVuZGluZy5yZW1vdmVGaXJzdCgpOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGb3IgbmFtZWQg
aG9zdHMgLSB3aGljaCBhcmUgb25seSBodHRwKHMpIGhvc3RzIC0gd2Ugc2hvdWxkIGFsd2F5cyBl
bmZvcmNlIHRoZSBjb25uZWN0aW9uIGxpbWl0LgotICAgICAgICAgICAgLy8gRm9yIG5vbi1uYW1l
ZCBob3N0cyAtIGV2ZXJ5dGhpbmcgYnV0IGh0dHAocykgLSB3ZSBzaG91bGQgb25seSBlbmZvcmNl
IHRoZSBsaW1pdCBpZiB0aGUgZG9jdW1lbnQKLSAgICAgICAgICAgIC8vIGlzbid0IGRvbmUgcGFy
c2luZyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgotCi0gICAgICAgICAg
ICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBUaGUgYWJvdmUgY29tbWVudCBhYm91dCBkb2N1
bWVudCBwYXJzaW5nIGFuZCBzdHlsZXNoZWV0cyBpcyBhIGhvbGRvdmVyCi0gICAgICAgICAgICAv
LyBmcm9tIHRoZSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIuCi0gICAgICAgICAgICAv
LyBUaGUgYmVoYXZpb3IgZGVzY3JpYmVkIHdhcyBhdCBvbmUgdGltZSBpbXBvcnRhbnQgZm9yIFdl
YkNvcmUncyBzaW5nbGUgdGhyZWFkZWRuZXNzLgotICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgaXQgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MuCi0g
ICAgICAgICAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGRlY2lkZSBpdCdzIG5vdCBpbXBvcnRhbnQg
YW5kIGNoYW5nZSB0aGUgYWJvdmUgY29tbWVudCwgb3IgZGVjaWRlIGl0IGlzCi0gICAgICAgICAg
ICAvLyBzdGlsbCBpbXBvcnRhbnQgYW5kIHNvbWVob3cgYWNjb3VudCBmb3IgaXQuCi0KLSAgICAg
ICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCk7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTGltaXRSZXF1ZXN0cyAmJiBob3N0LT5saW1pdFJlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5KHByaW9yaXR5KSwgbG9hZGVyLT5jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBsb2FkZXJzUGVuZGluZy5yZW1vdmVGaXJzdCgpOwotICAg
ICAgICAgICAgaG9zdC0+YWRkTG9hZEluUHJvZ3Jlc3MobG9hZGVyLT5pZGVudGlmaWVyKCkpOwot
Ci0gICAgICAgICAgICBsb2FkZXItPnN0YXJ0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG1f
aG9zdHMucmVtb3ZlKGhvc3QtPm5hbWUoKSk7CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCByZW1v
dmVTY2hlZHVsZWRMb2FkSWRlbnRpZmllcnNDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIHJl
bW92ZVNjaGVkdWxlZExvYWRlcnNDYWxsZWQgPSBmYWxzZTsKIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2FkSWRlbnRpZmllcnModm9pZCogY29u
dGV4dCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1bGVk
TG9hZGVycyh2b2lkKiBjb250ZXh0KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVyc0NhbGxlZCk7CisgICAgQVNT
RVJUKHJlbW92ZVNjaGVkdWxlZExvYWRlcnNDYWxsZWQpOwogCiAgICAgTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlciogc2NoZWR1bGVyID0gc3RhdGljX2Nhc3Q8TmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcio+KGNvbnRleHQpOwotICAgIHNjaGVkdWxlci0+cmVtb3ZlU2NoZWR1bGVkTG9h
ZElkZW50aWZpZXJzKCk7CisgICAgc2NoZWR1bGVyLT5yZW1vdmVTY2hlZHVsZWRMb2FkZXJzKCk7
CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1bGVk
TG9hZElkZW50aWZpZXJzKCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVt
b3ZlU2NoZWR1bGVkTG9hZGVycygpCiB7Ci0gICAgVmVjdG9yPFJlc291cmNlTG9hZElkZW50aWZp
ZXI+IGlkZW50aWZpZXJzOworICAgIFZlY3RvcjxSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+ID4g
bG9hZGVyc1RvUmVtb3ZlOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faWRl
bnRpZmllcnNUb1JlbW92ZU11dGV4KTsKLSAgICAgICAgY29weVRvVmVjdG9yKG1faWRlbnRpZmll
cnNUb1JlbW92ZSwgaWRlbnRpZmllcnMpOwotICAgICAgICBtX2lkZW50aWZpZXJzVG9SZW1vdmUu
Y2xlYXIoKTsKLSAgICAgICAgcmVtb3ZlU2NoZWR1bGVkTG9hZElkZW50aWZpZXJzQ2FsbGVkID0g
ZmFsc2U7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvYWRlcnNUb1JlbW92ZU11dGV4
KTsKKyAgICAgICAgbG9hZGVyc1RvUmVtb3ZlID0gbV9sb2FkZXJzVG9SZW1vdmU7CisgICAgICAg
IG1fbG9hZGVyc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgICAgIHJlbW92ZVNjaGVkdWxlZExvYWRl
cnNDYWxsZWQgPSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpZGVudGlmaWVycy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVtb3ZlTG9hZElkZW50aWZpZXIo
aWRlbnRpZmllcnNbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbG9hZGVyc1RvUmVt
b3ZlLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVMb2FkZXIobG9hZGVyc1RvUmVtb3ZlW2ld
LmdldCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVs
ZVJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVSZW1vdmVMb2FkZXIo
U2NoZWR1bGFibGVMb2FkZXIqIGxvYWRlcikKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9p
ZGVudGlmaWVyc1RvUmVtb3ZlTXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvYWRl
cnNUb1JlbW92ZU11dGV4KTsKICAgICAKLSAgICBtX2lkZW50aWZpZXJzVG9SZW1vdmUuYWRkKGlk
ZW50aWZpZXIpOworICAgIG1fbG9hZGVyc1RvUmVtb3ZlLmFwcGVuZChsb2FkZXIpOwogICAgIAot
ICAgIGlmICghcmVtb3ZlU2NoZWR1bGVkTG9hZElkZW50aWZpZXJzQ2FsbGVkKSB7Ci0gICAgICAg
IHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVyc0NhbGxlZCA9IHRydWU7Ci0gICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1
bGVkTG9hZElkZW50aWZpZXJzLCB0aGlzKTsKKyAgICBpZiAoIXJlbW92ZVNjaGVkdWxlZExvYWRl
cnNDYWxsZWQpIHsKKyAgICAgICAgcmVtb3ZlU2NoZWR1bGVkTG9hZGVyc0NhbGxlZCA9IHRydWU7
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVtb3ZlU2NoZWR1bGVkTG9hZGVycywgdGhpcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgKaW5kZXggZDJmMmJiNi4uZDc4NzNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
X2gKICNkZWZpbmUgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCiAKLSNpbmNsdWRlICJO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJTY2hlZHVsYWJsZUxvYWRlci5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CkBAIC0z
OSw4ICszOSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgSG9zdFJlY29yZDsKIGNsYXNz
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOwogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7Ci1jbGFzcyBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOwotdHlwZWRlZiB1
aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwogCiBjbGFzcyBOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00OCwyMiArNDYsMTYg
QEAgY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciB7CiBwdWJsaWM6CiAgICAgTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAotICAgIC8vIEFkZHMgdGhlIHJlcXVl
c3QgdG8gdGhlIHF1ZXVlIGZvciBpdHMgaG9zdCBhbmQgY3JlYXRlIGEgdW5pcXVlIGlkZW50aWZp
ZXIgZm9yIGl0LgotICAgIFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBzY2hlZHVs
ZVJlc291cmNlTG9hZChjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKik7Ci0gICAgCi0gICAgLy8gQWRkcyBhIHN5bmNocm9u
b3VzIHJlcXVlc3QgdG8gdGhlIHN5bmNocm9ub3VzIHJlcXVlc3QgcXVldWUgZm9yIGl0cyBob3N0
LgotICAgIHZvaWQgc2NoZWR1bGVTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOwotICAgIAotICAgIC8vIENyZWF0ZXMgYSB1bmlx
dWUgaWRlbnRpZmllciBmb3IgYW4gYWxyZWFkeS1pbi1wcm9ncmVzcyBsb2FkLgotICAgIFJlc291
cmNlTG9hZElkZW50aWZpZXIgYWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2ViQ29yZTo6S1VSTCYp
OworICAgIC8vIEFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIGZvciBpdHMgaG9zdC4KKyAg
ICB2b2lkIHNjaGVkdWxlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+KTsKIAog
ICAgIC8vIENhbGxlZCBieSB0aGUgV2ViUHJvY2VzcyB3aGVuIGEgUmVzb3VyY2VMb2FkZXIgaXMg
YmVpbmcgY2xlYW5lZCB1cC4KLSAgICB2b2lkIHJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNl
TG9hZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVtb3ZlTG9hZGVyKFNjaGVkdWxhYmxlTG9hZGVy
Kik7CiAKICAgICAvLyBDYWxsZWQgd2l0aGluIHRoZSBOZXR3b3JrUHJvY2VzcyBvbiBhIGJhY2tn
cm91bmQgdGhyZWFkIHdoZW4gYSByZXNvdXJjZSBsb2FkIGhhcyBmaW5pc2hlZC4KLSAgICB2b2lk
IHNjaGVkdWxlUmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7Cisg
ICAgdm9pZCBzY2hlZHVsZVJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciopOwogCi0gICAg
dm9pZCByZWNlaXZlZFJlZGlyZWN0KFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OktVUkwmIHJlZGlyZWN0VVJMKTsKKyAgICB2b2lkIHJlY2VpdmVkUmVkaXJlY3QoU2NoZWR1
bGFibGVMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7CiAgICAgdm9p
ZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFdl
YkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CiAgICAgCiBwcml2YXRlOgpAQCAt
NzcsMjcgKzY5LDI1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCk7CiAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiopOwogCi0gICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1
ZXN0c0Zvckhvc3QoSG9zdFJlY29yZCosIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsK
LQogICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNv
dW50UGVySG9zdCgpOwogCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlU2NoZWR1bGVkTG9hZElkZW50
aWZpZXJzKHZvaWQqIGNvbnRleHQpOwotICAgIHZvaWQgcmVtb3ZlU2NoZWR1bGVkTG9hZElkZW50
aWZpZXJzKCk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlU2NoZWR1bGVkTG9hZGVycyh2b2lkKiBj
b250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZVNjaGVkdWxlZExvYWRlcnMoKTsKIAotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RSZWNvcmQqLCBTdHJpbmdIYXNoPiBIb3N0TWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxIb3N0UmVjb3JkPiwgU3RyaW5nSGFzaD4g
SG9zdE1hcDsKICAgICBIb3N0TWFwIG1faG9zdHM7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVz
b3VyY2VMb2FkSWRlbnRpZmllciwgSG9zdFJlY29yZCo+IElkZW50aWZpZXJIb3N0TWFwOwotICAg
IElkZW50aWZpZXJIb3N0TWFwIG1faWRlbnRpZmllcnM7CisgICAgdHlwZWRlZiBIYXNoU2V0PFJl
ZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gPiBTY2hlZHVsYWJsZUxvYWRlclNldDsKKyAgICBTY2hl
ZHVsYWJsZUxvYWRlclNldCBtX2xvYWRlcnM7CiAKLSAgICBIb3N0UmVjb3JkKiBtX25vbkhUVFBQ
cm90b2NvbEhvc3Q7CisgICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1fbm9uSFRUUFByb3RvY29sSG9z
dDsKIAogICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwogCiAgICAgV2ViQ29yZTo6
VGltZXI8TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcj4gbV9yZXF1ZXN0VGltZXI7CiAgICAg
Ci0gICAgTXV0ZXggbV9pZGVudGlmaWVyc1RvUmVtb3ZlTXV0ZXg7Ci0gICAgSGFzaFNldDxSZXNv
dXJjZUxvYWRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzVG9SZW1vdmU7CisgICAgTXV0ZXggbV9s
b2FkZXJzVG9SZW1vdmVNdXRleDsKKyAgICBWZWN0b3I8UmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVy
PiA+IG1fbG9hZGVyc1RvUmVtb3ZlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcAppbmRleCBmOGYyNjU0Li41ZjUwZWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTQ3LDEw
ICs0Nyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHJlcXVlc3RQYXJhbWV0ZXJzLCBSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBj
b25uZWN0aW9uKQotICAgIDogbV9yZXF1ZXN0UGFyYW1ldGVycyhyZXF1ZXN0UGFyYW1ldGVycykK
LSAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9jb25uZWN0aW9uKGNvbm5l
Y3Rpb24pCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25z
dCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgbG9hZFBhcmFtZXRlcnMsIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQorICAgIDogU2NoZWR1bGFibGVMb2Fk
ZXIobG9hZFBhcmFtZXRlcnMsIGNvbm5lY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIH0KQEAgLTYyLDEyICs2MCwxMiBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6On5OZXR3
b3JrUmVzb3VyY2VMb2FkZXIoKQogCiBDb3JlSVBDOjpDb25uZWN0aW9uKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNvbm5lY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX2Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvblRvV2ViUHJvY2VzcygpLT5jb25u
ZWN0aW9uKCk7CiB9CiAKLVJlc291cmNlTG9hZFByaW9yaXR5IE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6cHJpb3JpdHkoKSBjb25zdAordWludDY0X3QgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkZXN0
aW5hdGlvbklEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXF1ZXN0UGFyYW1ldGVycy5wcmlv
cml0eSgpOworICAgIHJldHVybiBsb2FkUGFyYW1ldGVycygpLmlkZW50aWZpZXIoKTsKIH0KIAog
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKQEAgLTc4LDEwICs3NiwxMCBAQCB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogICAgIHJlZigpOwogICAgIAogICAg
IC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IENyZWF0ZSBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dCB3aXRoIGFjdHVhbCBzZXR0aW5ncy4KLSAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UsIG1fcmVxdWVzdFBhcmFtZXRl
cnMuaW5Qcml2YXRlQnJvd3NpbmdNb2RlKCkpOworICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSwgbG9hZFBhcmFtZXRl
cnMoKS5pblByaXZhdGVCcm93c2luZ01vZGUoKSk7CiAKICAgICAvLyBGSVhNRSAoTmV0d29ya1By
b2Nlc3MpOiBQYXNzIGFuIGFjdHVhbCB2YWx1ZSBmb3IgZGVmZXJzTG9hZGluZwotICAgIG1faGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBt
X3JlcXVlc3RQYXJhbWV0ZXJzLnJlcXVlc3QoKSwgdGhpcywgZmFsc2UgLyogZGVmZXJzTG9hZGlu
ZyAqLywgbV9yZXF1ZXN0UGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3koKSA9PSBTbmlm
ZkNvbnRlbnQpOworICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdv
cmtpbmdDb250ZXh0LmdldCgpLCBsb2FkUGFyYW1ldGVycygpLnJlcXVlc3QoKSwgdGhpcywgZmFs
c2UgLyogZGVmZXJzTG9hZGluZyAqLywgbG9hZFBhcmFtZXRlcnMoKS5jb250ZW50U25pZmZpbmdQ
b2xpY3koKSA9PSBTbmlmZkNvbnRlbnQpOwogfQogCiBzdGF0aWMgYm9vbCBzdG9wUmVxdWVzdHND
YWxsZWQgPSBmYWxzZTsKQEAgLTEzMCwyMiArMTI4LDE3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpzdG9wKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gUmVt
b3ZlIHRoaXMgbG9hZCBpZGVudGlmaWVyIHNvb24gc28gd2UgY2FuIHN0YXJ0IG1vcmUgbmV0d29y
ayByZXF1ZXN0cy4KLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlUmVtb3ZlTG9hZElkZW50aWZpZXIobV9pZGVudGlmaWVy
KTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcigpLnNjaGVkdWxlUmVtb3ZlTG9hZGVyKHRoaXMpOwogICAgIAotICAgIC8vIEV4cGxpY2l0
IGRlcmVmKCkgYmFsYW5jZWQgYnkgYSByZWYoKSBpbiBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0
b3AoKQorICAgIC8vIEV4cGxpY2l0IGRlcmVmKCkgYmFsYW5jZWQgYnkgYSByZWYoKSBpbiBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKICAgICAvLyBUaGlzIG1pZ2h0IGNhdXNlIHRoZSBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIgdG8gYmUgZGVzdHJveWVkIGFuZCB0aGVyZWZvcmUgd2UgZG8g
aXQgbGFzdC4KICAgICBkZXJlZigpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKCkKLXsKLSAgICAvLyBGSVhNRSAoTmV0d29y
a1Byb2Nlc3MpOiBDYW5jZWwgdGhlIGxvYWQuIFRoZSByZXF1ZXN0IG1heSBiZSBsb25nLWxpdmlu
Zywgc28gd2UgZG9uJ3Qgd2FudCBpdCB0byBsaW5nZXIgYXJvdW5kIGFmdGVyIGFsbCBjbGllbnRz
IGFyZSBnb25lLgotfQotCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
CiB7CiAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogQ2FjaGUgdGhlIHJlc3BvbnNlLgot
ICAgIGlmIChGb3JtRGF0YSogZm9ybURhdGEgPSBtX3JlcXVlc3RQYXJhbWV0ZXJzLnJlcXVlc3Qo
KS5odHRwQm9keSgpKQorICAgIGlmIChGb3JtRGF0YSogZm9ybURhdGEgPSBsb2FkUGFyYW1ldGVy
cygpLnJlcXVlc3QoKS5odHRwQm9keSgpKQogICAgICAgICBmb3JtRGF0YS0+cmVtb3ZlR2VuZXJh
dGVkRmlsZXNJZk5lZWRlZCgpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKTsKIH0KQEAgLTE3MSw3ICsxNjQsNyBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogewogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IEZv
ciB0aGUgbWVtb3J5IGNhY2hlIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRoZSBmaW5pc2hlZCBzdGF0
dXMgb2YgdGhlIGNhY2hlZCByZXNvdXJjZSBoZXJlLgogICAgIC8vIFN1Y2ggYm9va2tlZXBpbmcg
d2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBlbmlu
ZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgotICAgIGlmIChGb3JtRGF0YSogZm9ybURhdGEgPSBt
X3JlcXVlc3RQYXJhbWV0ZXJzLnJlcXVlc3QoKS5odHRwQm9keSgpKQorICAgIGlmIChGb3JtRGF0
YSogZm9ybURhdGEgPSBsb2FkUGFyYW1ldGVycygpLnJlcXVlc3QoKS5odHRwQm9keSgpKQogICAg
ICAgICBmb3JtRGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7
CiAgICAgc2NoZWR1bGVTdG9wT25NYWluVGhyZWFkKCk7CkBAIC0xOTAsNyArMTgzLDcgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSos
IFJlc291cmNlUmVxdWVzdCYgcmUKICAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJSZXNv
dXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpLCBN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdDo6UmVwbHkocmVxdWVz
dCkpKQogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CiAKLSAgICBSdW5Mb29w
OjptYWluKCktPmRpc3BhdGNoKGJpbmQoJk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
Y2VpdmVkUmVkaXJlY3QsICZOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcigpLCBtX2lkZW50aWZpZXIsIHJlcXVlc3QudXJsKCkpKTsKKyAgICBSdW5M
b29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlY2VpdmVkUmVkaXJlY3QsICZOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlcigpLCB0aGlzLCByZXF1ZXN0LnVybCgpKSk7CiB9CiAKIC8vIEZJWE1F
IChOZXR3b3JrUHJvY2Vzcyk6IE1hbnkgb2YgdGhlIGZvbGxvd2luZyBSZXNvdXJjZUhhbmRsZUNs
aWVudCBtZXRob2RzIGRlZmluaXRlbHkgbmVlZCBpbXBsZW1lbnRhdGlvbnMuIEEgZmV3IHdpbGwg
bm90LgpAQCAtMjIxLDcgKzIxNCw3IEBAIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSopCiAgICAgLy8gV2hlbiB0aGUg
V2ViUHJvY2VzcyBpcyBoYW5kbGluZyBsb2FkaW5nIGEgY2xpZW50IGlzIGNvbnN1bHRlZCBlYWNo
IHRpbWUgdGhpcyBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSBxdWVzdGlvbiBpcyBhc2tlZC4K
ICAgICAvLyBJbiBOZXR3b3JrUHJvY2VzcyBtb2RlIHdlIGFzayB0aGUgV2ViUHJvY2VzcyBjbGll
bnQgdXAgZnJvbnQgb25jZSBhbmQgdGhlbiByZXVzZSB0aGUgY2FjaGVkIGFuc3dlci4KIAotICAg
IHJldHVybiBtX3JlcXVlc3RQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMoKSA9PSBB
bGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIHJldHVybiBsb2FkUGFyYW1ldGVycygpLmFsbG93
U3RvcmVkQ3JlZGVudGlhbHMoKSA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogfQogCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmgKaW5kZXggNTdjOWJkMy4uZWJmMzhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKQEAgLTMwLDcg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiU2NoZWR1bGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRp
b25zLmg+CkBAIC00NCwzMiArNDQsMjQgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGU7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7Ci10eXBlZGVmIHVp
bnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CiAKLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxv
YWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4sIHB1YmxpYyBX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5k
ZXI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiB7CitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIg
OiBwdWJsaWMgU2NoZWR1bGFibGVMb2FkZXIsIHB1YmxpYyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUNsaWVudCwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXI8TmV0d29ya1Jlc291cmNlTG9h
ZGVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+
IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
UmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyogY29ubmVjdGlvbikKKyAgICBzdGF0aWMgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxv
YWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmV0d29ya1Jlc291cmNlTG9hZGVyKHBhcmFtZXRl
cnMsIGlkZW50aWZpZXIsIGNvbm5lY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbikpOwogICAgIH0K
ICAgICAKICAgICB+TmV0d29ya1Jlc291cmNlTG9hZGVyKCk7CiAKICAgICAvLyBVc2VkIGJ5IE1l
c3NhZ2VTZW5kZXIuCiAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0
OwotICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQoKSBjb25zdCB7IHJldHVybiBpZGVudGlmaWVy
KCk7IH0KKyAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEKCkgY29uc3Q7CiAgICAgCiAgICAgdm9p
ZCBkaWRSZWNlaXZlTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogCi0g
ICAgdm9pZCBzdGFydCgpOwotCi0gICAgdm9pZCBjb25uZWN0aW9uVG9XZWJQcm9jZXNzRGlkQ2xv
c2UoKTsKLSAgICAKLSAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSgpIGNvbnN0OwotICAgIAotICAgIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdl
dCgpOyB9Ci0KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgCiAgICAgLy8gUmVz
b3VyY2VIYW5kbGVDbGllbnQgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVl
c3QoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9u
ZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSBPVkVSUklERTsKQEAgLTEwOCw3ICsxMDAsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29u
c3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyopOworICAgIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKik7CiAKICAgICB2b2lkIHJlY2VpdmVkQXV0aGVudGljYXRpb25DcmVk
ZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2Vi
Q29yZTo6Q3JlZGVudGlhbCYpOwogICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdp
dGhvdXRBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKQEAgLTExOSwxMiArMTExLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
c3RvcCgpOwogCi0gICAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbV9yZXF1ZXN0UGFy
YW1ldGVyczsKLSAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLQogICAg
IFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOyAgICAKLSAgICBSZWZQ
dHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKICAgICAKICAg
ICBPd25QdHI8V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+IG1fY3VycmVudEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45MjZhMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NoZWR1bGFibGVMb2FkZXIuaCIK
KworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
Y2hlZHVsYWJsZUxvYWRlcjo6U2NoZWR1bGFibGVMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KiBjb25uZWN0aW9uKQorICAgIDogbV9uZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyhwYXJh
bWV0ZXJzKQorICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCit7Cit9CisKK1NjaGVkdWxh
YmxlTG9hZGVyOjp+U2NoZWR1bGFibGVMb2FkZXIoKQoreworICAgIEFTU0VSVCghbV9ob3N0UmVj
b3JkKTsKK30KKwordm9pZCBTY2hlZHVsYWJsZUxvYWRlcjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vz
c0RpZENsb3NlKCkKK3sKKyAgICBtX2Nvbm5lY3Rpb24gPSAwOworCisgICAgLy8gRklYTUUgKE5l
dHdvcmtQcm9jZXNzKTogQ2FuY2VsIHRoZSBsb2FkLiBUaGUgcmVxdWVzdCBtYXkgYmUgbG9uZy1s
aXZpbmcsIHNvIHdlIGRvbid0IHdhbnQgaXQgdG8gbGluZ2VyIGFyb3VuZCBhZnRlciBhbGwgY2xp
ZW50cyBhcmUgZ29uZS4KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDdlZmIxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2NoZWR1bGFibGVMb2FkZXJfaAorI2RlZmluZSBTY2hlZHVsYWJsZUxvYWRlcl9oCisK
KyNpbmNsdWRlICJIb3N0UmVjb3JkLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBTY2hlZHVsYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNjaGVkdWxhYmxlTG9h
ZGVyPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U2NoZWR1bGFibGVMb2FkZXIoKTsKKworICAg
IGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fbmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7IH0KKworICAgIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgdm9pZCBjb25uZWN0aW9uVG9X
ZWJQcm9jZXNzRGlkQ2xvc2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2b2lkIHNldEhvc3RSZWNvcmQoSG9zdFJlY29yZCogaG9zdFJlY29yZCkgeyBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOyBtX2hvc3RSZWNvcmQgPSBob3N0UmVjb3JkOyB9CisgICAgSG9zdFJl
Y29yZCogaG9zdFJlY29yZCgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJu
IG1faG9zdFJlY29yZC5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgU2NoZWR1bGFibGVMb2Fk
ZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyopOworCitwcml2YXRlOgorICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzIG1fbmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7CisgICAgUmVmUHRyPE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CisgICAgCisgICAgUmVmUHRy
PEhvc3RSZWNvcmQ+IG1faG9zdFJlY29yZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlmIC8vIFNjaGVkdWxh
YmxlTG9hZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggM2RlMjNlMS4uYmVkYWRkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNv
dXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM5LDEwICszOSw5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotU3luY05ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4g
cmVwbHkpCi0gICAgOiBtX25ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMp
CitTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyKGNv
bnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5
ZWRSZXBseT4gcmVwbHkpCisgICAgOiBTY2hlZHVsYWJsZUxvYWRlcihwYXJhbWV0ZXJzLCBjb25u
ZWN0aW9uKQogICAgICwgbV9kZWxheWVkUmVwbHkocmVwbHkpCi0gICAgLCBtX2lkZW50aWZpZXIo
MCkKIHsKIH0KIApAQCAtNTQsMjAgKzUzLDIxIEBAIHZvaWQgU3luY05ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c3RhcnQoKQogICAgIC8vICAgQiAtIFdyaXRlIGN1c3RvbSBsb2FkaW5nIGxvZ2ljIHRo
YXQgaXMga25vd24gdG8gYmUgc2FmZSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgIAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1faWRlbnRpZmllcik7CiAKICAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAg
ICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgCisgICAgY29uc3QgTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSBsb2FkUGFyYW1ldGVycygpOworCiAgICAgLy8gRklY
TUUgKE5ldHdvcmtQcm9jZXNzKTogQ3JlYXRlIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0IHdpdGgg
YWN0dWFsIHNldHRpbmdzLgotICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbmV0
d29ya2luZ0NvbnRleHQgPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBm
YWxzZSwgbV9uZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5pblByaXZhdGVCcm93c2luZ01v
ZGUoKSk7CisgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBuZXR3b3JraW5nQ29u
dGV4dCA9IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2UsIGZhbHNlLCBwYXJh
bWV0ZXJzLmluUHJpdmF0ZUJyb3dzaW5nTW9kZSgpKTsKICAgICAKLSAgICBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9u
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5yZXF1ZXN0KCksIG1fbmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscygpLCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5l
dHdvcmtpbmdDb250ZXh0LmdldCgpLCBwYXJhbWV0ZXJzLnJlcXVlc3QoKSwgcGFyYW1ldGVycy5h
bGxvd1N0b3JlZENyZWRlbnRpYWxzKCksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAKICAgICBt
X2RlbGF5ZWRSZXBseS0+c2VuZChlcnJvciwgcmVzcG9uc2UsIENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UoKHVpbnQ4X3QqKWRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgIAotICAgIE5ldHdv
cmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3Zl
TG9hZElkZW50aWZpZXIobV9pZGVudGlmaWVyKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVk
KCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnJlbW92ZUxvYWRlcih0aGlzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKaW5kZXggNzQyYWU4ZS4u
ZDk3YTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAtMjcsMzUgKzI3LDI4IEBACiAjZGVmaW5l
IFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJfaAogCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiU2NoZWR1bGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXR5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsK
LQotY2xhc3MgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFN5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IHsKK2NsYXNzIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIgOiBwdWJsaWMgU2NoZWR1bGFibGVMb2FkZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5
ZWRSZXBseT4gcmVwbHkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY05ldHdvcmtSZXNvdXJj
ZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1Jl
ZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5j
aHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIocGFyYW1ldGVycywgcmVwbHkp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVy
KHBhcmFtZXRlcnMsIGNvbm5lY3Rpb24sIHJlcGx5KSk7CiAgICAgfQotICAgIAotICAgIHZvaWQg
c2V0SWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsgbV9pZGVu
dGlmaWVyID0gaWRlbnRpZmllcjsgfQotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIAotICAgIGNvbnN0IE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycygpIHsgcmV0dXJuIG1f
bmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7IH0KIAotICAgIHZvaWQgc3RhcnQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJv
bm91cygpIHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKLSAgICBTeW5jTmV0d29ya1Jlc291
cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgUGFzc1JlZlB0
cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJv
bm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4pOworICAgIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIo
Y29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+KTsKICAgICAKLSAg
ICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBtX25ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzOwogICAgIFJlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gbV9kZWxheWVkUmVwbHk7
Ci0gICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAppbmRleCBhYTdhMzFm
Li44YTUyMGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCkBAIC00NSw4ICs0NSw5
IEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycygpCiB7CiB9CiAKLU5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJl
c291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBDb250ZW50U25pZmZpbmdQb2xpY3kgY29udGVu
dFNuaWZmaW5nUG9saWN5LCBTdG9yZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRpYWxz
LCBib29sIGluUHJpdmF0ZUJyb3dzaW5nTW9kZSkKLSAgICA6IG1fcmVxdWVzdChyZXF1ZXN0KQor
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgQ29udGVudFNuaWZm
aW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGljeSwgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dT
dG9yZWRDcmVkZW50aWFscywgYm9vbCBpblByaXZhdGVCcm93c2luZ01vZGUpCisgICAgOiBtX2lk
ZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQogICAgICwgbV9w
cmlvcml0eShwcmlvcml0eSkKICAgICAsIG1fY29udGVudFNuaWZmaW5nUG9saWN5KGNvbnRlbnRT
bmlmZmluZ1BvbGljeSkKICAgICAsIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyhhbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKQpAQCAtNTYsNiArNTcsNyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVyczo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMoY29uc3QgUmVzb3VyY2VSZXF1ZQog
CiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogeworICAgIGVuY29kZXIuZW5jb2RlKG1faWRl
bnRpZmllcik7CiAgICAgZW5jb2Rlci5lbmNvZGUobV9yZXF1ZXN0KTsKIAogICAgIGVuY29kZXIu
ZW5jb2RlKHN0YXRpY19jYXN0PGJvb2w+KG1fcmVxdWVzdC5odHRwQm9keSgpKSk7CkBAIC03Myw2
ICs3NSw5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZShDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvCiAKIGJvb2wgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnM6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiByZXN1bHQpCiB7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocmVzdWx0Lm1faWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5tX3JlcXVlc3QpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCmluZGV4IDJjNzgzODAuLjJl
Zjc4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaApAQCAtNDQsMTEgKzQ0LDEyIEBAIHR5
cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIGNsYXNzIE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycygpOwotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBXZWJD
b3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3ksIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBi
b29sIGluUHJpdmF0ZUJyb3dzaW5nTW9kZSk7CisgICAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMoUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHksIFdlYkNvcmU6OkNvbnRlbnRTbmlm
ZmluZ1BvbGljeSwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIGJvb2wgaW5Qcml2YXRlQnJv
d3NpbmdNb2RlKTsKIAogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYp
IGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
LCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYpOwogCisgICAgUmVzb3VyY2VMb2FkSWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1ZXN0OyB9CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiBtX3ByaW9yaXR5OyB9CiAgICAgV2ViQ29yZTo6Q29udGVudFNuaWZm
aW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dFNuaWZmaW5nUG9saWN5OyB9CkBAIC01Niw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIGlu
UHJpdmF0ZUJyb3dzaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcml2YXRlQnJvd3NpbmdN
b2RlOyB9CiAKIHByaXZhdGU6CisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKICAgICBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5OwogICAgIFdlYkNvcmU6OkNvbnRlbnRT
bmlmZmluZ1BvbGljeSBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZDMwODkwLi42MWRm
ZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00ODYsNiArNDg2LDggQEAKIAkJNTE4RDJDQUUxMkQ1MTUzQjAwM0JCOTNCIC8q
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxOEQyQ0FDMTJENTE1M0IwMDNCQjkzQiAvKiBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtLmggKi87IH07CiAJCTUxOEQyQ0NBMTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9u
U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4RDJDQzgxMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0ZS5jcHAgKi87IH07CiAJCTUx
OEQyQ0NCMTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEQyQ0M5MTJENTFERkIwMDNCQjkzQiAv
KiBTZXNzaW9uU3RhdGUuaCAqLzsgfTsKKwkJNTE5QjRGRjQxNkE5RUE5NzAwNjY4NzREIC8qIFNj
aGVkdWxhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxOUI0RkYyMTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5j
cHAgKi87IH07CisJCTUxOUI0RkY1MTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5QjRG
RjMxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggKi87IH07CiAJCTUxQTU1
NUY1MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE1NTVGMzEyOEM2QzQ3MDA5QUJD
RUMgLyogV0tDb250ZXh0TWVudUl0ZW0uY3BwICovOyB9OwogCQk1MUE1NTVGNjEyOEM2QzQ3MDA5
QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTU1NUY0MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRN
ZW51SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUxQTU1NjAxMTI4QzZEOTIwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbVR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE1NTYwMDEy
OEM2RDkyMDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW1UeXBlcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzUxLDYgKzE3NTMsOCBAQAog
CQk1MThEMkNBQzEyRDUxNTNCMDAzQkI5M0IgLyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEQyQ0M4MTJENTFERkIwMDNCQjkzQiAv
KiBTZXNzaW9uU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Vzc2lvblN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4RDJDQzkx
MkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZXNzaW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE5QjRGRjIxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjaGVkdWxhYmxlTG9hZGVyLmNwcDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE5QjRGRjMxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjaGVkdWxhYmxlTG9hZGVy
Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUE1NTVGMzEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0
TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tDb250
ZXh0TWVudUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE1NTVGNDEy
OEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tDb250ZXh0TWVudUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFBNTU2MDAxMjhDNkQ5MjAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVtVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZXh0TWVudUl0ZW1U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzE5NCw2ICszMTk4LDggQEAK
IAkJCQk1MTU3MDU1MjE2NTcwMThDMDAxMDFBOTAgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyLm1l
c3NhZ2VzLmluICovLAogCQkJCTUxODI5REEzMTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKIAkJCQk1MTgyOURBNDE2MzdDNzBDMDAwOTUzRDYg
LyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovLAorCQkJCTUxOUI0RkYyMTZBOUVB
OTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5jcHAgKi8sCisJCQkJNTE5QjRGRjMxNkE5
RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggKi8sCiAJCQkJNTE4MTVCOUQxNkE2
MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwICovLAogCQkJCTUx
ODE1QjlFMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmggKi8s
CiAJCQkpOwpAQCAtNTA1Nyw2ICs1MDYzLDcgQEAKIAkJCQlFMTc5MDg5MTE2OUJBQTgyMDA2OTA0
QzcgLyogU2VjSXRlbVNoaW1NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5N0UwNzYx
NkE1RjlFMDAwMEJDOUU1IC8qIExheWVyVHJlZUhvc3RNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxODE1QkEwMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MTlCNEZGNTE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFi
bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjAzNyw2ICs2MDQ0LDcgQEAKIAkJCQlFMTc5
MDg5MDE2OUJBQTdGMDA2OTA0QzcgLyogU2VjSXRlbVNoaW1NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE5N0UwNzcxNkE1RjlFMDAwMEJDOUU1IC8qIExheWVyVHJlZUhv
c3RNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTgxNUI5RjE2QTYyMjIxMDA1NDUwMUYgLyog
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTlCNEZG
NDE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDE2ZWNhMWUuLmNkNTY5YmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC04OSwyNyArODksMjIgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VM
b2FkZXIsIFJlc28KICAgICAgICAgc3RhcnRSZXNvdXJjZUxvYWRlcihyZXNvdXJjZUxvYWRlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOworICAgIEFTU0VSVChpZGVu
dGlmaWVyKTsKICAgICAKLSAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0g
ICAgCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSByZXNvdXJjZUxvYWRlci0+cmVxdWVz
dCgpOwotICAgIAotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFdoZW4gdGhlIFJlc291
cmNlTG9hZGVyIGFza3MgaXRzIEZyYW1lTG9hZGVyQ2xpZW50IGFib3V0IHVzaW5nCi0gICAgLy8g
Y3JlZGVudGlhbCBzdG9yYWdlIGl0IHBhc3NlcyBhbG9uZyBpdHMgaWRlbnRpZmllci4KLSAgICAv
LyBCdXQgYXQgdGhpcyBwb2ludCBpdCBkb2Vzbid0IGhhdmUgdGhlIGNvcnJlY3QgaWRlbnRpZmll
ciB5ZXQuCi0gICAgLy8gSW4gcHJhY3RpY2UgY2xpZW50cyB3ZSBrbm93IGFib3V0IGRvbid0IGNh
cmUgYWJvdXQgdGhlIGlkZW50aWZpZXIsIGJ1dCB0aGlzIGlzIGFub3RoZXIgcmVhc29uCi0gICAg
Ly8gd2UgbmVlZCB0byBtYWtlIHN1cmUgUmVzb3VyY2VMb2FkZXJzIGdldCBjb3JyZWN0IGlkZW50
aWZpZXJzIHJpZ2h0IG9mZiB0aGUgYmF0LgorICAgIENvbnRlbnRTbmlmZmluZ1BvbGljeSBjb250
ZW50U25pZmZpbmdQb2xpY3kgPSByZXNvdXJjZUxvYWRlci0+c2hvdWxkU25pZmZDb250ZW50KCkg
PyBTbmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKICAgICBTdG9yZWRDcmVkZW50aWFs
cyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gcmVzb3VyY2VMb2FkZXItPnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzOworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IHJlc291cmNl
TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFtZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCk7CiAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBsb2FkUGFy
YW1ldGVycyhyZXF1ZXN0LCBwcmlvcml0eSwgcmVzb3VyY2VMb2FkZXItPnNob3VsZFNuaWZmQ29u
dGVudCgpID8gU25pZmZDb250ZW50IDogRG9Ob3RTbmlmZkNvbnRlbnQsIGFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMsIHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFtZSgpLT5zZXR0aW5n
cygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNjaGVkdWxlUmVzb3VyY2VMb2FkKGxv
YWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpT
Y2hlZHVsZVJlc291cmNlTG9hZDo6UmVwbHkoaWRlbnRpZmllciksIDApKSB7CisgICAgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnMoaWRlbnRpZmllciwgcmVzb3Vy
Y2VMb2FkZXItPnJlcXVlc3QoKSwgcHJpb3JpdHksIGNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYWxs
b3dTdG9yZWRDcmVkZW50aWFscywgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisgICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVsZVJlc291
cmNlTG9hZChsb2FkUGFyYW1ldGVycyksIDApKSB7CiAgICAgICAgIC8vIFdlIHByb2JhYmx5IGZh
aWxlZCB0byBzY2hlZHVsZSB0aGlzIGxvYWQgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgYmVjYXVz
ZSBpdCBoYWQgY3Jhc2hlZC4KICAgICAgICAgLy8gVGhpcyBsb2FkIHdpbGwgbmV2ZXIgc3VjY2Vl
ZCBzbyB3ZSB3aWxsIHNjaGVkdWxlIGl0IHRvIGZhaWwgYXN5bmNocm9ub3VzbHkuCiAgICAgICAg
IGFkZFVuc2NoZWR1bGFibGVMb2FkKHJlc291cmNlTG9hZGVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICByZXNvdXJjZUxvYWRlci0+c2V0SWRlbnRpZmllcihpZGVudGlmaWVy
KTsKICAgICBtX3dlYlJlc291cmNlTG9hZGVycy5zZXQoaWRlbnRpZmllciwgV2ViUmVzb3VyY2VM
b2FkZXI6OmNyZWF0ZShyZXNvdXJjZUxvYWRlcikpOwogICAgIAogICAgIG5vdGlmeURpZFNjaGVk
dWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlTG9hZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAppbmRleCBmZDdmMGUwLi5hNWNhNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0yMTQsMTYgKzIxNCwxNiBAQCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKICAg
ICByZXR1cm4gc2NoZWR1bGVyOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9u
ZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIExvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJl
cXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAg
ICBMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXNv
dXJjZUxvYWRJZGVudGlmaWVyLCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzIGxvYWRQYXJhbWV0ZXJzKHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVz
dCwgU25pZmZDb250ZW50LCBzdG9yZWRDcmVkZW50aWFscywgY29udGV4dC0+c3RvcmFnZVNlc3Np
b24oKS5pc1ByaXZhdGVCcm93c2luZ1Nlc3Npb24oKSk7CisgICAgTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnMocmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcmVxdWVz
dCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0LCBTbmlmZkNvbnRlbnQsIHN0b3JlZENyZWRl
bnRpYWxzLCBjb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpLmlzUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bigpKTsKICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpS
ZXBseShlcnJvciwgcmVzcG9uc2UsIGRhdGFSZWZlcmVuY2UpLCAwKSkgewogICAgICAgICByZXNw
b25zZSA9IFJlc291cmNlUmVzcG9uc2UoKTsKICAgICAgICAgZXJyb3IgPSBpbnRlcm5hbEVycm9y
KHJlcXVlc3QudXJsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5kZXggYzFm
ZjEwYi4uZWE5NzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCkBAIC03MSw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kKICNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQogICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCB1bnNpZ25l
ZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgT1ZFUlJJ
REU7CiAjZW5kaWYKIAogICAgIC8vIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5Cg==
</data>
<flag name="review"
          id="201984"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>