<?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>174013</bug_id>
          
          <creation_ts>2017-06-29 21:18:33 -0700</creation_ts>
          <short_desc>ResourceLoadObserver does not need a ResourceLoadStatisticsStore</short_desc>
          <delta_ts>2017-06-30 11:18:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324287</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 21:18:33 -0700</bug_when>
    <thetext>ResourceLoadObserver does not need a ResourceLoadStatisticsStore. ResourceLoadStatisticsStore is too complicated for its needs. ResourceLoadStatisticsStore can then be moved to WebKit2/UIProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324288</commentid>
    <comment_count>1</comment_count>
      <attachid>314226</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 21:20:24 -0700</bug_when>
    <thetext>Created attachment 314226
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324290</commentid>
    <comment_count>2</comment_count>
      <attachid>314227</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 21:31:56 -0700</bug_when>
    <thetext>Created attachment 314227
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324304</commentid>
    <comment_count>3</comment_count>
      <attachid>314233</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 22:03:40 -0700</bug_when>
    <thetext>Created attachment 314233
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324316</commentid>
    <comment_count>4</comment_count>
      <attachid>314233</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-29 23:22:08 -0700</bug_when>
    <thetext>Comment on attachment 314233
WIP Patch

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

This is a GREAT cleanup! I’m so excited to see these simplifications. Thank you!

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:112
&gt; +    shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved &gt; 0;

Why don’t we just declare and initialize right here?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:194
&gt; +    shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved &gt; 0;

Bool shoukdCallNotificationCallback ... ?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:204
&gt; +        auto&amp; updatedTargetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);

Could we do your ‘take’ approach here like you did in an earlier patch and avoid getting multiple times?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:261
&gt; +    shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved &gt; 0;

Bool ...

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:294
&gt; +    WallTime newTime = reduceTimeResolution(WallTime::now());

Auto?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:335
&gt; +    return &quot;Statistics for &quot; + origin + &quot;:\n&quot; + iter-&gt;value.toString();

Should this be done with a StringBuilder? I’m never sure when it is the best time to do so.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:338
&gt; +Vector&lt;ResourceLoadStatistics&gt; ResourceLoadObserver::takeStatistics()

Should this be returning a move value? Or does return-value-optimization do the right thing here?

&gt; Source/WebCore/loader/ResourceLoadObserver.h:-59
&gt; -    WEBCORE_EXPORT void setStatisticsQueue(Ref&lt;WTF::WorkQueue&gt;&amp;&amp;);

Hooray!

&gt; Source/WebKit/mac/WebView/WebView.mm:-1180
&gt; -

Hooray ++ !

&gt; Source/WebKit2/WebProcess/WebProcess.cpp:202
&gt; +    ResourceLoadObserver::sharedObserver().setNotificationCallback([this] {

ResourceLoadObserver::shared() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324433</commentid>
    <comment_count>5</comment_count>
      <attachid>314233</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:09:04 -0700</bug_when>
    <thetext>Comment on attachment 314233
WIP Patch

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

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:335
&gt;&gt; +    return &quot;Statistics for &quot; + origin + &quot;:\n&quot; + iter-&gt;value.toString();
&gt; 
&gt; Should this be done with a StringBuilder? I’m never sure when it is the best time to do so.

I don&apos;t know either but this is used only for testing so this is probably good enough. It has the benefit of being concise.

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:338
&gt;&gt; +Vector&lt;ResourceLoadStatistics&gt; ResourceLoadObserver::takeStatistics()
&gt; 
&gt; Should this be returning a move value? Or does return-value-optimization do the right thing here?

return-value-optimization does the right thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324434</commentid>
    <comment_count>6</comment_count>
      <attachid>314269</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:11:55 -0700</bug_when>
    <thetext>Created attachment 314269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324438</commentid>
    <comment_count>7</comment_count>
      <attachid>314271</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:15:08 -0700</bug_when>
    <thetext>Created attachment 314271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324472</commentid>
    <comment_count>8</comment_count>
      <attachid>314271</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 11:15:39 -0700</bug_when>
    <thetext>Comment on attachment 314271
Patch

Looks great. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324473</commentid>
    <comment_count>9</comment_count>
      <attachid>314271</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 11:18:27 -0700</bug_when>
    <thetext>Comment on attachment 314271
Patch

Clearing flags on attachment: 314271

Committed r219005: &lt;http://trac.webkit.org/changeset/219005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324474</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 11:18:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314226</attachid>
            <date>2017-06-29 21:20:24 -0700</date>
            <delta_ts>2017-06-29 21:31:56 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>174013_ResourceLoadObserver_store_wip.patch</filename>
            <type>text/plain</type>
            <size>31980</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5k
ZXggNTI2NDBkMTVkYjguLjYyOWI2OTg1ZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMzIxLDcgKzMyMSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHByCiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkubG9nV2ViU29ja2V0TG9hZGluZyhkb2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CisgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nV2ViU29ja2V0TG9hZGluZyhk
b2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHByb3RvY29sU3Ry
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAKaW5kZXgg
ODRjNDExZDc2ZDMuLjIwM2MwNjE5NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgVXNlckdlc3R1cmVJbmRpY2F0b3I6
OlVzZXJHZXN0dXJlSW5kaWNhdG9yKHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
U3QKIAogICAgIGlmIChkb2N1bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpIHsKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1
cmVUaW1lc3RhbXAoTW9ub3RvbmljVGltZTo6bm93KCkpOwotICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRp
bWVSZXNvbHV0aW9uKCpkb2N1bWVudCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1
bWVudCk7CiAgICAgICAgIGRvY3VtZW50LT50b3BEb2N1bWVudCgpLnNldFVzZXJEaWRJbnRlcmFj
dFdpdGhQYWdlKHRydWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCmluZGV4IGM4ZmNhNjAyOGFjLi4yMGI1ZmQ0YmY5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBEb2N1
bWVudExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2UKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgQVNT
RVJUKHRvcEZyYW1lLmRvY3VtZW50KCkpOwogCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkubG9nRnJhbWVOYXZpZ2F0aW9uKCptX2ZyYW1lLCB0b3BGcmFtZSwgbmV3
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0ZyYW1lTmF2aWdhdGlvbigqbV9mcmFtZSwgdG9wRnJhbWUsIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIAogICAgIC8vIFVwZGF0ZSBjb29raWUgcG9saWN5IGJh
c2UgVVJMIGFzIFVSTCBjaGFuZ2VzLCBleGNlcHQgZm9yIHN1YmZyYW1lcywgd2hpY2ggdXNlIHRo
ZQogICAgIC8vIFVSTCBvZiB0aGUgbWFpbiBmcmFtZSB3aGljaCBkb2Vzbid0IGNoYW5nZSB3aGVu
IHdlIHJlZGlyZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggODU1
NzM5NzYzZWQuLmNlMjlmNTNkZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI3ODcsNyArMjc4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1CiAgICAgICAg
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3Bv
bnNlLCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1
ZXN0LCByZXNwb25zZSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCByZXNwb25zZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5nRGVsZWdhdGVN
ZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZXNw
b25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRhLT5zaXplKCkg
OiAwLCAtMSwgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAKaW5kZXggM2ZjNmFiYWI1ZTAuLmFmNDZlMmVkM2M4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTQ5LDIzICs0OSwx
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIFN0cmluZyBwcmltYXJ5RG9t
YWluKGNvbnN0IFQmIHZhbHVlKQogCiBzdGF0aWMgU2Vjb25kcyB0aW1lc3RhbXBSZXNvbHV0aW9u
IHsgMV9oIH07CiAKLVJlc291cmNlTG9hZE9ic2VydmVyJiBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKQorUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRP
YnNlcnZlcj4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7CiAgICAgcmV0dXJuIHJlc291cmNlTG9hZE9i
c2VydmVyOwogfQogCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTdGF0aXN0aWNzU3Rv
cmUoUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIG5vdGlmaWNhdGlvbkNhbGxiYWNrKQogewotICAgIGlmIChtX3N0b3JlICYmIG1fcXVl
dWUpCi0gICAgICAgIG1fcXVldWUgPSBudWxscHRyOwotICAgIG1fc3RvcmUgPSBXVEZNb3ZlKHN0
b3JlKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYgcXVldWUpCi17Ci0gICAgQVNTRVJUKCFtX3F1ZXVl
KTsKLSAgICBtX3F1ZXVlID0gV1RGTW92ZShxdWV1ZSk7CisgICAgQVNTRVJUKCFtX25vdGlmaWNh
dGlvbkNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShub3Rp
ZmljYXRpb25DYWxsYmFjayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpczN4eFJlZGlyZWN0
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtNzksNyArNzIsNyBAQCBib29s
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkgY29uc3QKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBTZXR0aW5nczo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhcGFnZS0+dXNlc0VwaGVtZXJhbFNl
c3Npb24oKSAmJiBtX3N0b3JlOworICAgIHJldHVybiBTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSAmJiAhcGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKTsKIH0KIAog
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1l
JiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0x
MTMsNjggKzEwNiw2MSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdAogICAgIGlmICh0YXJnZXRQ
cmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURv
bWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
QVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBpc01haW5GcmFt
ZSwgaXNSZWRpcmVjdCwgc291cmNlUHJpbWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4u
aXNvbGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFy
eURvbWFpbi5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBib29sIHNob3VsZEZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlciA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKLSAg
ICAgICAgICAgIGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPnRha2VSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgIGJvb2wg
c2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgYXV0byB0YXJnZXRT
dGF0aXN0aWNzID0gdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0
UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUg
cHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAg
ICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3RpY3Mu
ZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHBy
ZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1Jl
bW92ZWQgPiAwOwogCi0gICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpCi0gICAgICAgICAgICAg
ICAgdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSA9IHRy
dWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
LnN1YmZyYW1lSGFzQmVlbkxvYWRlZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKGlzTWFpbkZyYW1l
KQorICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZUhhc0JlZW5Mb2FkZWRCZWZvcmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgYXV0byBzdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgICAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNS
ZWRpcmVjdCkgeworICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJp
bWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0KSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlE
b21haW4pOworICAgICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZSh0YXJnZXRQcmltYXJ5RG9t
YWluKSkKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnJl
ZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5
RG9tYWluKTsKIAotICAgICAgICAgICAgICAgIGlmIChtX3N0b3JlLT5pc1ByZXZhbGVudFJlc291
cmNlKHRhcmdldFByaW1hcnlEb21haW4pKQotICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGlu
Z09yaWdpblJlc291cmNlU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291
cmNlT3JpZ2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChpc01haW5G
cmFtZSkgeworICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlblJl
ZGlyZWN0ZWRUbzsKKyAgICAgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRp
c3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRv
OworICAgICAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJm
cmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2lu
UmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFBy
aW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5SZWRpcmVj
dGVkVG87Ci0gICAgICAgICAgICAgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0
YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1l
SGFzQmVlblJlZGlyZWN0ZWRUbzsKLSAgICAgICAgICAgICAgICAgICAgKytyZWRpcmVjdGluZ09y
aWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3Vi
ZnJhbWVVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAg
ICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxs
KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFp
biA9PSAibnVsbE9yaWdpbiIpIHsKKyAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAg
ICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVJbml0aWFsTG9hZENvdW50Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJm
cmFtZVN1YlJlc291cmNlQ291bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAg
ICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAg
ICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2
aWdhdGVkRnJvbTsKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVI
YXNCZWVuTmF2aWdhdGVkVG87CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VQcmltYXJ5RG9tYWluLmlzTnVsbCgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4u
aXNFbXB0eSgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4gPT0gIm51bGxPcmlnaW4iKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUluaXRpYWxMb2FkQ291bnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGlj
cy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzID0g
bV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQ
cmltYXJ5RG9tYWluKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNz
LnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZEZyb207Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG87Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3NvdXJjZU9yaWdp
blJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5OYXZpZ2F0ZWRGcm9tOwotICAgICAg
ICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlbk5hdmln
YXRlZFRvOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVl
bk5hdmlnYXRlZEZyb207CisgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZy
YW1lSGFzQmVlbk5hdmlnYXRlZFRvOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgICAgICBtX3N0b3JlLT5zZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHRhcmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykpOwotICAg
ICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnNldCh0YXJnZXRQcmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKKwor
ICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIG1fbm90aWZp
Y2F0aW9uQ2FsbGJhY2soKTsKIH0KICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkKQEAgLTIwMiw1NCArMTg4LDQ3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291CiAgICAgaWYg
KHRhcmdldFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbiB8fCAoaXNSZWRp
cmVjdCAmJiB0YXJnZXRQcmltYXJ5RG9tYWluID09IHNvdXJjZVByaW1hcnlEb21haW4pKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBpc1JlZGlyZWN0LCBzb3VyY2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJp
bWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5G
cmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdldFByaW1hcnlEb21haW4gPSB0
YXJnZXRQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICB7
Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2so
KSk7Ci0gICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwotCi0g
ICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEg
cmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOwotCi0g
ICAgICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdl
dFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1l
UHJpbWFyeURvbWFpbik7Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIgPSB0cnVlOwotCi0gICAgICAgIGlmIChpc1JlZGlyZWN0KSB7Ci0gICAgICAg
ICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBqdXN0IGluc2VydGVkIHRvIHRoZSBzdG9y
ZSwgc28gd2UgbmVlZCB0byByZWdldCAndGFyZ2V0U3RhdGlzdGljcycKLSAgICAgICAgICAgIGF1
dG8mIHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLQotICAgICAgICAg
ICAgaWYgKG1fc3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikp
Ci0gICAgICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnJlZGlyZWN0ZWRU
b090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207Ci0gICAgICAgICAgICArK3VwZGF0ZWRU
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRUbzsKLQotICAgICAg
ICAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3Rp
bmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdl
dFByaW1hcnlEb21haW4pOwotICAgICAgICAgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9SZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIgPSB0cnVlOwotCi0gICAgICAgICAgICArK3VwZGF0ZWRUYXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7Ci0KLSAgICAgICAg
ICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXpl
KCksIDFVKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdXBkYXRlZFRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVy
T2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odXBkYXRlZFRhcmdldFN0YXRp
c3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVz
b3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmlj
YXRpb25DYWxsYmFjayA9IGZhbHNlOworICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4p
OwogCi0gICAgICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zp
c2l0ZWRNYXAuc2l6ZSgpLCAxVSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFs
TnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsK
LSAgICAgICAgfQotICAgICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAg
aWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3Rv
cmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIC8vIEFsd2F5
cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhp
cyBkb21haW4KKyAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0YXJnZXRTdGF0
aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisKKyAgICBhdXRvIHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisKKyAgICBpZiAoaXNSZWRp
cmVjdCkgeworICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4p
OworCisgICAgICAgIC8vIFdlIGp1c3QgaW5zZXJ0ZWQgdG8gdGhlIHN0b3JlLCBzbyB3ZSBuZWVk
IHRvIHJlZ2V0ICd0YXJnZXRTdGF0aXN0aWNzJworICAgICAgICBhdXRvJiB1cGRhdGVkVGFyZ2V0
U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFy
Z2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAgICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UodGFy
Z2V0UHJpbWFyeURvbWFpbikpCisgICAgICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3MucmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMuYWRkKHRhcmdldFBy
aW1hcnlEb21haW4pOworCisgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRGcm9tOworICAgICAgICArK3VwZGF0ZWRUYXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRUbzsKKworICAgICAgICBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9SZXN1bHQgPSByZWRpcmVjdGluZ09yaWdpblN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURv
bWFpbik7CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOworCisgICAgICAgICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNC
ZWVuU3VicmVzb3VyY2VDb3VudDsKKworICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6
bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisKKyAgICAgICAgdXBkYXRlZFRh
cmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRC
eVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odXBkYXRl
ZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0
b3RhbFZpc2l0ZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7CisKKyAgICAgICAgYXV0byB0b3RhbFZp
c2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNpdGVkTWFwLnNpemUoKSwgMVUpOworCisgICAg
ICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERp
dmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
dGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRv
dGFsVmlzaXRlZDsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBj
b25zdCBVUkwmIHRhcmdldFVSTCkKQEAgLTI3NiwzMSArMjU1LDI0IEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHRhCiAgICAgaWYgKHRhcmdldFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFy
eURvbWFpbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFy
eURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFt
ZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgYm9vbCBzaG91bGRGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsK
LSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0KLSAgICAg
ICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNv
cmRzIGZvciB0aGlzIGRvbWFpbgotICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7Ci0gICAgICAg
IAotICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5G
cmFtZVByaW1hcnlEb21haW4pOwotICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25D
YWxsYmFjayA9IGZhbHNlOworICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwogCi0g
ICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNv
dW50OwotICAgICAgICAKLSAgICAgICAgYXV0byB0b3RhbFZpc2l0ZWQgPSBzdGQ6Om1heChtX29y
aWdpbnNWaXNpdGVkTWFwLnNpemUoKSwgMVUpOwotICAgICAgICAKLSAgICAgICAgdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5VG90YWxO
dW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRTdGF0aXN0
aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOwot
ICAgICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdl
IGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KKyAg
ICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFS
ZWNvcmRzUmVtb3ZlZCA+IDA7CisKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxO
b3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisKKyAgICArK3RhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKKworICAgIGF1dG8gdG90YWxWaXNpdGVk
ID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKworICAgIHRhcmdl
dFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRv
dGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRl
ZDsKKworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIG1f
bm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKIH0KIAogc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRpbWVS
ZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCkBAIC0zMTksMjYgKzI5MSw0OSBAQCB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0
aW9uKGNvbnN0IERvYwogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJpbWFyeURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4odXJsKS5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Ci0gICAgICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlEb21haW5TdHJpbmcpOwotICAgICAgICBXYWxsVGltZSBuZXdUaW1lID0gcmVkdWNlVGltZVJl
c29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKLSAgICAgICAgaWYgKG5ld1RpbWUgPT0gc3RhdGlz
dGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgICAg
IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBuZXdUaW1lOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKKyAgICBXYWxsVGltZSBuZXdU
aW1lID0gcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICBpZiAobmV3
VGltZSA9PSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7CisK
KyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIFJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShwcmltYXJ5RG9tYWluLCBbJnBy
aW1hcnlEb21haW5dIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MocHJp
bWFyeURvbWFpbik7CiAgICAgfSk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3MgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRh
a2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbikKK3sKKyAgICBhdXRvIHN0YXRpc3Rpc3RpY3MgPSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC50YWtlKHByaW1hcnlEb21haW4pOworICAgIGlmIChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZl
bERvbWFpbi5pc051bGwoKSkKKyAgICAgICAgc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4g
PSBwcmltYXJ5RG9tYWluOworICAgIEFTU0VSVChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZlbERvbWFp
biA9PSBwcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gc3RhdGlzdGlzdGljczsKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcm
IHByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmZpbmQocHJpbWFyeURvbWFpbik7CisgICAgaWYgKG1hcEVudHJ5ID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlOwogfQogCiBTdHJpbmcg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fc3RvcmUgPyBtX3N0b3JlLT5zdGF0aXN0aWNzRm9yT3Jp
Z2luKG9yaWdpbikgOiBlbXB0eVN0cmluZygpOworICAgIGF1dG8gaXRlciA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmZpbmQob3JpZ2luKTsKKyAgICBpZiAoaXRlciA9PSBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gIlN0YXRpc3RpY3MgZm9yICIgKyBvcmlnaW4gKyAiOlxuIiArIGl0ZXItPnZhbHVlLnRv
U3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKaW5kZXggOWEwNTQ1YzkyNjAuLmY4M2M0ZDRl
MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApA
QCAtNDgsMjMgKzQ4LDI1IEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogY2xhc3Mg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxS
ZXNvdXJjZUxvYWRPYnNlcnZlcj47CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlc291cmNlTG9hZE9ic2VydmVyJiBzaGFyZWRPYnNlcnZlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkKCk7CiAgICAgCiAgICAgdm9p
ZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9w
RnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRp
bmcoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgbG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOwogICAgIHZvaWQgbG9nVXNlcklu
dGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGF0aXN0aWNzU3RvcmUoUmVmPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGF0aXN0
aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzdGF0aXN0aWNzRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYpOwogCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25DYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
Jik7CisKIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRMb2coUGFnZSopIGNvbnN0OworICAgIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4oY29uc3QgU3RyaW5nJik7CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB0YWtlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlE
b21haW4pIGNvbnN0OwogCi0gICAgUmVmUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4g
bV9zdG9yZTsKLSAgICBSZWZQdHI8V1RGOjpXb3JrUXVldWU+IG1fcXVldWU7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
OworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX25vdGlmaWNhdGlvbkNhbGxiYWNrOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+IG1fb3JpZ2luc1Zpc2l0ZWRNYXA7CiB9OwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAppbmRleCBjMGNlMTcxYzE0OS4uMTc3YjkxOTgwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC03
MiwxNiArNzIsNiBAQCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvcgogICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6dGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVChtX3N0YXRpc3Rp
Y3NMb2NrLmlzTG9ja2VkKCkpOwotICAgIGF1dG8gc3RhdGlzdGlzdGljcyA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnRha2UocHJpbWFyeURvbWFpbik7Ci0gICAgaWYgKHN0YXRpc3Rpc3RpY3Mu
aGlnaExldmVsRG9tYWluLmlzTnVsbCgpKQotICAgICAgICBzdGF0aXN0aXN0aWNzLmhpZ2hMZXZl
bERvbWFpbiA9IHByaW1hcnlEb21haW47Ci0gICAgQVNTRVJUKHN0YXRpc3Rpc3RpY3MuaGlnaExl
dmVsRG9tYWluID09IHByaW1hcnlEb21haW4pOwotICAgIHJldHVybiBzdGF0aXN0aXN0aWNzOwot
fQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmJiBzdGF0aXN0aWNzKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwpAQCAtMTczLDE2ICsxNjMsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoKQogICAgICAgICBtX2dyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIoKTsKIH0KIAotU3RyaW5nIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c3RhdGlzdGljc0Zvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKLXsK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOwotICAgIGF1dG8g
aXRlciA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQob3JpZ2luKTsKLSAgICBpZiAoaXRl
ciA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgCi0gICAgcmV0dXJuICJTdGF0aXN0aWNzIGZvciAiICsgb3JpZ2luICsg
IjpcbiIgKyBpdGVyLT52YWx1ZS50b1N0cmluZygpOwotfQotCiBWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0YWtlU3RhdGlzdGljcygp
CiB7CiAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
aW5kZXggYzUwYzNhNTg1NjMuLjNhOWNhYzVjNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC01MSw2ICs1MSw3IEBA
IHN0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CiAKIHN0cnVjdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOwogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gV2ViS2l0
Mi9VSVByb2Nlc3MuCiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7CiBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+IGNyZWF0ZSgpOwpAQCAtNTgsMTUgKzU5LDEyIEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBjcmVhdGVFbmNvZGVyRnJvbURh
dGEoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlYWREYXRhRnJvbURlY29kZXIoS2V5ZWRE
ZWNvZGVyJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zvck9yaWdp
bihjb25zdCBTdHJpbmcmKTsKLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpOyB9CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGVhckluTWVtb3J5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihjb25zdCBTdHJpbmcmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIHRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYp
OwogICAgIHZvaWQgc2V0UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBT
dHJpbmcmLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiYpOwogCiAgICAgYm9vbCBpc1ByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggYzc4ZTNhMDQxMzQuLjVjODViNTJmMWJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKQEAgLTE3Niw3ICsx
NzYsNyBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRlcm5hbChS
ZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbgogCiAgICAgaWYgKG5ld1JlcXVlc3QucmVx
dWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyOjpNYWluKSB7CiAgICAg
ICAgIFRyYWNlUG9pbnQoU3VicmVzb3VyY2VMb2FkV2lsbFN0YXJ0KTsKLSAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1f
ZnJhbWUuZ2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1fZnJhbWUu
Z2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIH0KIAogICAgIEFTU0VS
VCghbmV3UmVxdWVzdC5pc051bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
aW5kZXggNGM3MDY0ZDFlOWYuLmY0ZGMzZjM2YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC0zODg0LDcgKzM4ODQsNyBAQCBKU1ZhbHVlIEludGVybmFsczo6Y2xvbmVB
cnJheUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgYnVmZmVyLCBKU1ZhbAog
CiBTdHJpbmcgSW50ZXJuYWxzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yT3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luKQogewotICAgIHJldHVybiBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNzRm9yT3JpZ2luKG9yaWdpbik7CisgICAgcmV0dXJuIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5zdGF0aXN0aWNzRm9yT3JpZ2luKG9yaWdpbik7
CiB9CiAKIHZvaWQgSW50ZXJuYWxzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChi
b29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA3ODI2ZmI0
NzhlZS4uNzYyYmU5ZmEyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAg
LTI3NCw3ICsyNzQsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RhdGVOb3RpZmllci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZVRyYWNrZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvU21hcnRSZXBsYWNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rp
bGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oPgpAQCAtNzY0LDggKzc2Myw2IEBAIGVudW0g
eyBXZWJWaWV3VmVyc2lvbiA9IDQgfTsKICNkZWZpbmUgdGltZWRMYXlvdXRTaXplIDQwOTYKIAog
c3RhdGljIE5TTXV0YWJsZVNldCAqc2NoZW1lc1dpdGhSZXByZXNlbnRhdGlvbnNTZXQ7Ci1zdGF0
aWMgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKiByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU7Ci1zdGF0aWMgV1RGOjpXb3JrUXVldWUqIHN0YXRpc3RpY3NRdWV1ZTsKIAog
I2lmICFQTEFURk9STShJT1MpCiBOU1N0cmluZyAqX1dlYkNhbkdvQmFja0tleSA9ICAgICAgICAg
ICAgQCJjYW5Hb0JhY2siOwpAQCAtMTE2MywyMSArMTE2MCw2IEBAICsgKHZvaWQpX3JlcG9ydEV4
Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb24gaW5Db250ZXh0OihKU0NvbnRleHRSZWYpY29u
dGV4dAogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNl
cHRpb24pKTsKIH0KIAotc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uU3Rh
dGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKQotewotICAgIHN0YXRpYyBCT09MIGluaXRp
YWxpemVkID0gTk87Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlID0gJldlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZSgqcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKTsKLSAgICAKLSAgICBzdGF0aXN0aWNzUXVldWUgPSAmV1RGOjpXb3Jr
UXVldWU6OmNyZWF0ZSgiV2ViVmlldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2Vz
cyBEYXRhIFF1ZXVlIikubGVha1JlZigpOwotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NRdWV1ZSgqc3RhdGlzdGljc1F1ZXVlKTsKLSAgICAK
LSAgICBpbml0aWFsaXplZCA9IFlFUzsKLX0KLQogc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlTG9h
ZERlZmVycmluZygpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTQyNyw4ICsxNDA5LDYgQEAg
LSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOihOU1N0cmluZyAqKWZy
YW1lTmFtZSBncm91cE5hbWU6KE5TU3QKICNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXpl
U3RvcmFnZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0
aW9uU3RhdGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKTsKLQogI2lmIEVOQUJMRShHQU1F
UEFEKQogICAgICAgICBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3ZpZGVySWZOZWNlc3Nhcnko
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXgg
NDU3NTM1NGU5NzguLjg5NGNhOTEwOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0
cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CkBAIC0xNzUsOCArMTc0
LDYgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICwg
bV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y3JlYXRlKCkpCi0gICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogewogICAg
IC8vIEluaXRpYWxpemUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCiAgICAgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjppbml0aWFsaXplKCk7CkBAIC0yMDIsOSArMTk5LDcgQEAgV2ViUHJvY2Vzczo6
V2ViUHJvY2VzcygpCiAKICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcy5hZGQoU2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4oKSk7
CiAKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0
aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKLSAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzUXVldWUo
bV9zdGF0aXN0aWNzUXVldWUuY29weVJlZigpKTsKLSAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKKyAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXROb3RpZmljYXRpb25DYWxsYmFjayhbdGhp
c10gewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzQ2hhbmdlZFRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3RhdGlzdGljc0NoYW5nZWRUaW1lci5zdGFy
dE9uZVNob3QoNV9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXgg
YzQ2NTZlMWI1OTkuLjI2ODcyZjFhYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaApAQCAtNjQsNyArNjQsNiBAQCBjbGFzcyBQYWdlR3JvdXA7CiBjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CiBjbGFzcyBTZXNzaW9uSUQ7CiBjbGFzcyBVc2VyR2VzdHVyZVRva2VuOwotY2xh
c3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogc3RydWN0IFBsdWdpbkluZm87CiBzdHJ1
Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogc3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsK
QEAgLTQxOCw5ICs0MTcsNiBAQCBwcml2YXRlOgogICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
ciBtX3dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcjsKICNlbmRpZgogCi0gICAgUmVmPFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKLQogICAgIHVu
c2lnbmVkIG1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAgICBib29sIG1f
c3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwogI2lmIFBMQVRGT1JNKE1B
QykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314227</attachid>
            <date>2017-06-29 21:31:56 -0700</date>
            <delta_ts>2017-06-29 22:03:40 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>174013_ResourceLoadObserver_store_wip.patch</filename>
            <type>text/plain</type>
            <size>34126</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5k
ZXggNTI2NDBkMTVkYjguLjYyOWI2OTg1ZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMzIxLDcgKzMyMSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHByCiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkubG9nV2ViU29ja2V0TG9hZGluZyhkb2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CisgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nV2ViU29ja2V0TG9hZGluZyhk
b2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHByb3RvY29sU3Ry
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAKaW5kZXgg
ODRjNDExZDc2ZDMuLjIwM2MwNjE5NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgVXNlckdlc3R1cmVJbmRpY2F0b3I6
OlVzZXJHZXN0dXJlSW5kaWNhdG9yKHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
U3QKIAogICAgIGlmIChkb2N1bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpIHsKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1
cmVUaW1lc3RhbXAoTW9ub3RvbmljVGltZTo6bm93KCkpOwotICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRp
bWVSZXNvbHV0aW9uKCpkb2N1bWVudCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1
bWVudCk7CiAgICAgICAgIGRvY3VtZW50LT50b3BEb2N1bWVudCgpLnNldFVzZXJEaWRJbnRlcmFj
dFdpdGhQYWdlKHRydWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCmluZGV4IGM4ZmNhNjAyOGFjLi4yMGI1ZmQ0YmY5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBEb2N1
bWVudExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2UKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgQVNT
RVJUKHRvcEZyYW1lLmRvY3VtZW50KCkpOwogCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkubG9nRnJhbWVOYXZpZ2F0aW9uKCptX2ZyYW1lLCB0b3BGcmFtZSwgbmV3
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0ZyYW1lTmF2aWdhdGlvbigqbV9mcmFtZSwgdG9wRnJhbWUsIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIAogICAgIC8vIFVwZGF0ZSBjb29raWUgcG9saWN5IGJh
c2UgVVJMIGFzIFVSTCBjaGFuZ2VzLCBleGNlcHQgZm9yIHN1YmZyYW1lcywgd2hpY2ggdXNlIHRo
ZQogICAgIC8vIFVSTCBvZiB0aGUgbWFpbiBmcmFtZSB3aGljaCBkb2Vzbid0IGNoYW5nZSB3aGVu
IHdlIHJlZGlyZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggODU1
NzM5NzYzZWQuLmNlMjlmNTNkZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI3ODcsNyArMjc4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1CiAgICAgICAg
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3Bv
bnNlLCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1
ZXN0LCByZXNwb25zZSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCByZXNwb25zZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5nRGVsZWdhdGVN
ZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZXNw
b25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRhLT5zaXplKCkg
OiAwLCAtMSwgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAKaW5kZXggM2ZjNmFiYWI1ZTAuLjk3NTZiNmVhYWE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTQ5LDIzICs0OSwx
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIFN0cmluZyBwcmltYXJ5RG9t
YWluKGNvbnN0IFQmIHZhbHVlKQogCiBzdGF0aWMgU2Vjb25kcyB0aW1lc3RhbXBSZXNvbHV0aW9u
IHsgMV9oIH07CiAKLVJlc291cmNlTG9hZE9ic2VydmVyJiBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKQorUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXNvdXJjZUxvYWRP
YnNlcnZlcj4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7CiAgICAgcmV0dXJuIHJlc291cmNlTG9hZE9i
c2VydmVyOwogfQogCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTdGF0aXN0aWNzU3Rv
cmUoUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIG5vdGlmaWNhdGlvbkNhbGxiYWNrKQogewotICAgIGlmIChtX3N0b3JlICYmIG1fcXVl
dWUpCi0gICAgICAgIG1fcXVldWUgPSBudWxscHRyOwotICAgIG1fc3RvcmUgPSBXVEZNb3ZlKHN0
b3JlKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFN0YXRpc3RpY3NR
dWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYgcXVldWUpCi17Ci0gICAgQVNTRVJUKCFtX3F1ZXVl
KTsKLSAgICBtX3F1ZXVlID0gV1RGTW92ZShxdWV1ZSk7CisgICAgQVNTRVJUKCFtX25vdGlmaWNh
dGlvbkNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShub3Rp
ZmljYXRpb25DYWxsYmFjayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpczN4eFJlZGlyZWN0
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtNzksNyArNzIsNyBAQCBib29s
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkgY29uc3QKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBTZXR0aW5nczo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhcGFnZS0+dXNlc0VwaGVtZXJhbFNl
c3Npb24oKSAmJiBtX3N0b3JlOworICAgIHJldHVybiBTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSAmJiAhcGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKTsKIH0KIAog
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1l
JiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0x
MTMsNjggKzEwNiw2MSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdAogICAgIGlmICh0YXJnZXRQ
cmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURv
bWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
QVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBpc01haW5GcmFt
ZSwgaXNSZWRpcmVjdCwgc291cmNlUHJpbWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4u
aXNvbGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFy
eURvbWFpbi5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBib29sIHNob3VsZEZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlciA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKLSAg
ICAgICAgICAgIGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPnRha2VSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgIGJvb2wg
c2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgYXV0byB0YXJnZXRT
dGF0aXN0aWNzID0gdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0
UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUg
cHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAg
ICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3RpY3Mu
ZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHBy
ZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1Jl
bW92ZWQgPiAwOwogCi0gICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpCi0gICAgICAgICAgICAg
ICAgdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSA9IHRy
dWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
LnN1YmZyYW1lSGFzQmVlbkxvYWRlZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKGlzTWFpbkZyYW1l
KQorICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZUhhc0JlZW5Mb2FkZWRCZWZvcmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgYXV0byBzdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgICAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNS
ZWRpcmVjdCkgeworICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJp
bWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0KSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlE
b21haW4pOworICAgICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZSh0YXJnZXRQcmltYXJ5RG9t
YWluKSkKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnJl
ZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5
RG9tYWluKTsKIAotICAgICAgICAgICAgICAgIGlmIChtX3N0b3JlLT5pc1ByZXZhbGVudFJlc291
cmNlKHRhcmdldFByaW1hcnlEb21haW4pKQotICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGlu
Z09yaWdpblJlc291cmNlU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291
cmNlT3JpZ2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChpc01haW5G
cmFtZSkgeworICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlblJl
ZGlyZWN0ZWRUbzsKKyAgICAgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRp
c3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRv
OworICAgICAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJm
cmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2lu
UmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFBy
aW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5SZWRpcmVj
dGVkVG87Ci0gICAgICAgICAgICAgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0
YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1l
SGFzQmVlblJlZGlyZWN0ZWRUbzsKLSAgICAgICAgICAgICAgICAgICAgKytyZWRpcmVjdGluZ09y
aWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3Vi
ZnJhbWVVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAg
ICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxs
KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFp
biA9PSAibnVsbE9yaWdpbiIpIHsKKyAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAg
ICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVJbml0aWFsTG9hZENvdW50Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJm
cmFtZVN1YlJlc291cmNlQ291bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
JiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAg
ICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAg
ICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2
aWdhdGVkRnJvbTsKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVI
YXNCZWVuTmF2aWdhdGVkVG87CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VQcmltYXJ5RG9tYWluLmlzTnVsbCgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4u
aXNFbXB0eSgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4gPT0gIm51bGxPcmlnaW4iKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUluaXRpYWxMb2FkQ291bnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGlj
cy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzID0g
bV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQ
cmltYXJ5RG9tYWluKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNz
LnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZEZyb207Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG87Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3NvdXJjZU9yaWdp
blJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5OYXZpZ2F0ZWRGcm9tOwotICAgICAg
ICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlbk5hdmln
YXRlZFRvOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVl
bk5hdmlnYXRlZEZyb207CisgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZy
YW1lSGFzQmVlbk5hdmlnYXRlZFRvOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgICAgICBtX3N0b3JlLT5zZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHRhcmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykpOwotICAg
ICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnNldCh0YXJnZXRQcmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKKwor
ICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIG1fbm90aWZp
Y2F0aW9uQ2FsbGJhY2soKTsKIH0KICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkKQEAgLTIwMiw1NCArMTg4LDQ3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291CiAgICAgaWYg
KHRhcmdldFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbiB8fCAoaXNSZWRp
cmVjdCAmJiB0YXJnZXRQcmltYXJ5RG9tYWluID09IHNvdXJjZVByaW1hcnlEb21haW4pKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBpc1JlZGlyZWN0LCBzb3VyY2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJp
bWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5G
cmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdldFByaW1hcnlEb21haW4gPSB0
YXJnZXRQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICB7
Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2so
KSk7Ci0gICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwotCi0g
ICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEg
cmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOwotCi0g
ICAgICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdl
dFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1l
UHJpbWFyeURvbWFpbik7Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIgPSB0cnVlOwotCi0gICAgICAgIGlmIChpc1JlZGlyZWN0KSB7Ci0gICAgICAg
ICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBqdXN0IGluc2VydGVkIHRvIHRoZSBzdG9y
ZSwgc28gd2UgbmVlZCB0byByZWdldCAndGFyZ2V0U3RhdGlzdGljcycKLSAgICAgICAgICAgIGF1
dG8mIHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLQotICAgICAgICAg
ICAgaWYgKG1fc3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikp
Ci0gICAgICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnJlZGlyZWN0ZWRU
b090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207Ci0gICAgICAgICAgICArK3VwZGF0ZWRU
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRUbzsKLQotICAgICAg
ICAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3Rp
bmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdl
dFByaW1hcnlEb21haW4pOwotICAgICAgICAgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9SZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIgPSB0cnVlOwotCi0gICAgICAgICAgICArK3VwZGF0ZWRUYXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7Ci0KLSAgICAgICAg
ICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXpl
KCksIDFVKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdXBkYXRlZFRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVy
T2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odXBkYXRlZFRhcmdldFN0YXRp
c3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVz
b3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmlj
YXRpb25DYWxsYmFjayA9IGZhbHNlOworICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4p
OwogCi0gICAgICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zp
c2l0ZWRNYXAuc2l6ZSgpLCAxVSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFs
TnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsK
LSAgICAgICAgfQotICAgICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAg
aWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3Rv
cmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIC8vIEFsd2F5
cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhp
cyBkb21haW4KKyAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0YXJnZXRTdGF0
aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisKKyAgICBhdXRvIHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisKKyAgICBpZiAoaXNSZWRp
cmVjdCkgeworICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4p
OworCisgICAgICAgIC8vIFdlIGp1c3QgaW5zZXJ0ZWQgdG8gdGhlIHN0b3JlLCBzbyB3ZSBuZWVk
IHRvIHJlZ2V0ICd0YXJnZXRTdGF0aXN0aWNzJworICAgICAgICBhdXRvJiB1cGRhdGVkVGFyZ2V0
U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFy
Z2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAgICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UodGFy
Z2V0UHJpbWFyeURvbWFpbikpCisgICAgICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3MucmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMuYWRkKHRhcmdldFBy
aW1hcnlEb21haW4pOworCisgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRGcm9tOworICAgICAgICArK3VwZGF0ZWRUYXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRUbzsKKworICAgICAgICBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9SZXN1bHQgPSByZWRpcmVjdGluZ09yaWdpblN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURv
bWFpbik7CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOworCisgICAgICAgICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNC
ZWVuU3VicmVzb3VyY2VDb3VudDsKKworICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6
bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisKKyAgICAgICAgdXBkYXRlZFRh
cmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRC
eVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odXBkYXRl
ZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0
b3RhbFZpc2l0ZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7CisKKyAgICAgICAgYXV0byB0b3RhbFZp
c2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNpdGVkTWFwLnNpemUoKSwgMVUpOworCisgICAg
ICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERp
dmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
dGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRv
dGFsVmlzaXRlZDsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBj
b25zdCBVUkwmIHRhcmdldFVSTCkKQEAgLTI3NiwzMSArMjU1LDI0IEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHRhCiAgICAgaWYgKHRhcmdldFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFy
eURvbWFpbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFy
eURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFt
ZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgYm9vbCBzaG91bGRGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsK
LSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0KLSAgICAg
ICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNv
cmRzIGZvciB0aGlzIGRvbWFpbgotICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7Ci0gICAgICAg
IAotICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5G
cmFtZVByaW1hcnlEb21haW4pOwotICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25D
YWxsYmFjayA9IGZhbHNlOworICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwogCi0g
ICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNv
dW50OwotICAgICAgICAKLSAgICAgICAgYXV0byB0b3RhbFZpc2l0ZWQgPSBzdGQ6Om1heChtX29y
aWdpbnNWaXNpdGVkTWFwLnNpemUoKSwgMVUpOwotICAgICAgICAKLSAgICAgICAgdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5VG90YWxO
dW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRTdGF0aXN0
aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOwot
ICAgICAgICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdl
IGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KKyAg
ICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFS
ZWNvcmRzUmVtb3ZlZCA+IDA7CisKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxO
b3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisKKyAgICArK3RhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKKworICAgIGF1dG8gdG90YWxWaXNpdGVk
ID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKworICAgIHRhcmdl
dFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRv
dGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRl
ZDsKKworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIG1f
bm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKIH0KIAogc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRpbWVS
ZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCkBAIC0zMTksMjYgKzI5MSw2MSBAQCB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0
aW9uKGNvbnN0IERvYwogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJpbWFyeURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4odXJsKS5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Ci0gICAgICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlEb21haW5TdHJpbmcpOwotICAgICAgICBXYWxsVGltZSBuZXdUaW1lID0gcmVkdWNlVGltZVJl
c29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKLSAgICAgICAgaWYgKG5ld1RpbWUgPT0gc3RhdGlz
dGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgICAg
IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBuZXdUaW1lOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKKyAgICBXYWxsVGltZSBuZXdU
aW1lID0gcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICBpZiAobmV3
VGltZSA9PSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7CisK
KyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIFJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShwcmltYXJ5RG9tYWluLCBbJnBy
aW1hcnlEb21haW5dIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MocHJp
bWFyeURvbWFpbik7CiAgICAgfSk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3MgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRh
a2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbikKK3sKKyAgICBhdXRvIHN0YXRpc3Rpc3RpY3MgPSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC50YWtlKHByaW1hcnlEb21haW4pOworICAgIGlmIChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZl
bERvbWFpbi5pc051bGwoKSkKKyAgICAgICAgc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4g
PSBwcmltYXJ5RG9tYWluOworICAgIEFTU0VSVChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZlbERvbWFp
biA9PSBwcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gc3RhdGlzdGlzdGljczsKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcm
IHByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmZpbmQocHJpbWFyeURvbWFpbik7CisgICAgaWYgKG1hcEVudHJ5ID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlOwogfQogCiBTdHJpbmcg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fc3RvcmUgPyBtX3N0b3JlLT5zdGF0aXN0aWNzRm9yT3Jp
Z2luKG9yaWdpbikgOiBlbXB0eVN0cmluZygpOworICAgIGF1dG8gaXRlciA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmZpbmQob3JpZ2luKTsKKyAgICBpZiAoaXRlciA9PSBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gIlN0YXRpc3RpY3MgZm9yICIgKyBvcmlnaW4gKyAiOlxuIiArIGl0ZXItPnZhbHVlLnRv
U3RyaW5nKCk7Cit9CisKK1ZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnRha2VTdGF0aXN0aWNzKCkKK3sKKyAgICBWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsKKyAgICBzdGF0aXN0aWNzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKTsKKyAgICBmb3IgKGF1
dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAg
ICBzdGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOworCisgICAg
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xlYXIoKTsKKworICAgIHJldHVybiBzdGF0aXN0aWNz
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCmluZGV4IDlhMDU0NWM5MjYwLi40M2IyYTM3MzgxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKQEAgLTI1LDcg
KzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC00OCwyMyArNDcsMjYgQEAgc3RydWN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M7CiBjbGFzcyBSZXNvdXJjZUxvYWRPYnNlcnZlciB7CiAgICAgZnJpZW5kIGNsYXNz
IE5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9hZE9ic2VydmVyPjsKIHB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIHNoYXJlZE9ic2VydmVyKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlc291cmNlTG9hZE9ic2VydmVyJiBzaGFyZWQo
KTsKICAgICAKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYgZnJhbWUs
IGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lkIGxv
Z1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
bmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAg
ICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgVVJMJik7CiAg
ICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0
IERvY3VtZW50Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9y
ZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYpOwotCiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJik7
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsKKwogcHJpdmF0ZToKICAgICBib29sIHNo
b3VsZExvZyhQYWdlKikgY29uc3Q7CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmKTsKKyAgICBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAgYm9vbCBpc1ByZXZhbGVudFJl
c291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7CiAKLSAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwotICAgIFJlZlB0cjxXVEY6Oldv
cmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2s7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHNpemVfdD4gbV9v
cmlnaW5zVmlzaXRlZE1hcDsKIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IGMwY2UxNzFjMTQ5Li5k
ZjhlYjAzYjg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTcyLDE2ICs3Miw2IEBAIFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLVJl
c291cmNlTG9hZFN0YXRpc3RpY3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0YWtlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pCi17Ci0gICAgQVNTRVJUKG1fc3RhdGlzdGljc0xvY2suaXNMb2NrZWQoKSk7Ci0gICAgYXV0
byBzdGF0aXN0aXN0aWNzID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudGFrZShwcmltYXJ5RG9t
YWluKTsKLSAgICBpZiAoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4uaXNOdWxsKCkpCi0g
ICAgICAgIHN0YXRpc3Rpc3RpY3MuaGlnaExldmVsRG9tYWluID0gcHJpbWFyeURvbWFpbjsKLSAg
ICBBU1NFUlQoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4gPT0gcHJpbWFyeURvbWFpbik7
Ci0gICAgcmV0dXJuIHN0YXRpc3Rpc3RpY3M7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0
cmluZyYgcHJpbWFyeURvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYmIHN0YXRpc3RpY3Mp
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CkBAIC0xNzMsMzIgKzE2Myw2IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dCgpCiAgICAgICAgIG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxlcigpOwog
fQogCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgYXV0byBpdGVyID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuZmluZChvcmlnaW4pOwotICAgIGlmIChpdGVyID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1cm4g
IlN0YXRpc3RpY3MgZm9yICIgKyBvcmlnaW4gKyAiOlxuIiArIGl0ZXItPnZhbHVlLnRvU3RyaW5n
KCk7Ci19Ci0KLVZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnRha2VTdGF0aXN0aWNzKCkKLXsKLSAgICBWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gc3RhdGlzdGljczsKLSAgICAKLSAgICB7Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8m
IHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBz
dGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotCi0gICAgbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0
YXRpc3RpY3M7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0
YXRpc3RpY3MoY29uc3QgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNz
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IGM1MGMzYTU4NTYz
Li4wNzFmOTIxMjhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkgewogCiBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAor
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIFdlYktpdDIvVUlQcm9jZXNzLgogY2xh
c3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gewogcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBjcmVhdGUoKTsK
QEAgLTU4LDIxICs1OSwxNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlx
dWVfcHRyPEtleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZWFkRGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJik7
Ci0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5pc0VtcHR5KCk7IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJJbk1lbW9yeSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB0YWtlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiwgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYmKTsKIAogICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1lcmdlU3RhdGlz
dGljcyhjb25zdCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkUGFy
dGl0aW9uQ29va2llc0NhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRk
LCBib29sIGNsZWFyRmlyc3QpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IGM3OGUzYTA0MTM0Li41Yzg1YjUyZjFiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0xNzYsNyArMTc2LDcgQEAg
dm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50ZXJuYWwoUmVzb3VyY2VS
ZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb24KIAogICAgIGlmIChuZXdSZXF1ZXN0LnJlcXVlc3Rlcigp
ICE9IFJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6TWFpbikgewogICAgICAgICBUcmFj
ZVBvaW50KFN1YnJlc291cmNlTG9hZFdpbGxTdGFydCk7Ci0gICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1N1YnJlc291cmNlTG9hZGluZyhtX2ZyYW1lLmdl
dCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ1N1YnJlc291cmNlTG9hZGluZyhtX2ZyYW1lLmdldCgpLCBu
ZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB9CiAKICAgICBBU1NFUlQoIW5ld1Jl
cXVlc3QuaXNOdWxsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDRj
NzA2NGQxZTlmLi5mNGRjM2YzNmE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMzg4NCw3ICszODg0LDcgQEAgSlNWYWx1ZSBJbnRlcm5hbHM6OmNsb25lQXJyYXlCdWZm
ZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNWYWwKIAogU3RyaW5n
IEludGVybmFsczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbikKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2Vy
dmVyKCkuc3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4pOworICAgIHJldHVybiBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkuc3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4pOwogfQogCiB2
b2lkIEludGVybmFsczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNzgyNmZiNDc4ZWUuLjc2
MmJlOWZhMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0yNzQsNyAr
Mjc0LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0YXRlTm90aWZpZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1NtYXJ0UmVwbGFjZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaWxlQ29udHJv
bGxlck1lbW9yeUhhbmRsZXJJT1MuaD4KQEAgLTc2NCw4ICs3NjMsNiBAQCBlbnVtIHsgV2ViVmll
d1ZlcnNpb24gPSA0IH07CiAjZGVmaW5lIHRpbWVkTGF5b3V0U2l6ZSA0MDk2CiAKIHN0YXRpYyBO
U011dGFibGVTZXQgKnNjaGVtZXNXaXRoUmVwcmVzZW50YXRpb25zU2V0Owotc3RhdGljIFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSogcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOwotc3RhdGljIFdURjo6V29ya1F1ZXVlKiBzdGF0aXN0aWNzUXVldWU7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQogTlNTdHJpbmcgKl9XZWJDYW5Hb0JhY2tLZXkgPSAgICAgICAgICAgIEAiY2Fu
R29CYWNrIjsKQEAgLTExNjMsMjEgKzExNjAsNiBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246
KEpTVmFsdWVSZWYpZXhjZXB0aW9uIGluQ29udGV4dDooSlNDb250ZXh0UmVmKWNvbnRleHQKICAg
ICByZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvblN0YXRpc3RpY3NT
dG9yYWdlUGF0aElmTmVjZXNzYXJ5KCkKLXsKLSAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9
IE5POwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA9ICZXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUoKnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSk7Ci0gICAgCi0gICAgc3RhdGlzdGljc1F1ZXVlID0gJldURjo6V29ya1F1ZXVlOjpj
cmVhdGUoIldlYlZpZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBR
dWV1ZSIpLmxlYWtSZWYoKTsKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5zZXRTdGF0aXN0aWNzUXVldWUoKnN0YXRpc3RpY3NRdWV1ZSk7Ci0gICAgCi0gICAgaW5p
dGlhbGl6ZWQgPSBZRVM7Ci19Ci0KIHN0YXRpYyBib29sIHNob3VsZEVuYWJsZUxvYWREZWZlcnJp
bmcoKQogewogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE0MjcsOCArMTQwOSw2IEBAIC0gKHZvaWQp
X2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUg
Z3JvdXBOYW1lOihOU1N0CiAjZW5kaWYKICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvblN0YXRp
c3RpY3NTdG9yYWdlUGF0aElmTmVjZXNzYXJ5KCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAg
ICAgICAgV2ViS2l0SW5pdGlhbGl6ZUdhbWVwYWRQcm92aWRlcklmTmVjZXNzYXJ5KCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDQ1NzUzNTRl
OTc4Li4zMDRjYjg1NmRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBw
bGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgpAQCAtMTc1LDggKzE3NCw2IEBAIFdl
YlByb2Nlc3M6OldlYlByb2Nlc3MoKQogI2lmIFBMQVRGT1JNKElPUykKICAgICAsIG1fd2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyKCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0
ZSgpKQotICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKIHsKICAgICAvLyBJbml0
aWFsaXplIG91ciBwbGF0Zm9ybSBzdHJhdGVnaWVzLgogICAgIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6aW5pdGlhbGl6ZSgpOwpAQCAtMjAyLDkgKzE5OSw3IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nl
c3MoKQogCiAgICAgbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMuYWRkKFNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+KCkpOwogCi0gICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1N0b3Jl
KG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNvcHlSZWYoKSk7Ci0gICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1F1ZXVlKG1fc3RhdGlz
dGljc1F1ZXVlLmNvcHlSZWYoKSk7Ci0gICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUt
PnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0aGlzXSB7CisgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKICAg
ICAgICAgaWYgKG1fc3RhdGlzdGljc0NoYW5nZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90
KDVfcyk7CkBAIC0xNDY0LDEwICsxNDU5LDExIEBAIHZvaWQgV2ViUHJvY2Vzczo6bm9uVmlzaWJs
ZVByb2Nlc3NDbGVhbnVwVGltZXJGaXJlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzczo6c3RhdGlzdGlj
c0NoYW5nZWRUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUtPmlzRW1wdHkoKSkKKyAgICBhdXRvIHN0YXRpc3RpY3MgPSBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkudGFrZVN0YXRpc3RpY3MoKTsKKyAgICBpZiAoc3RhdGlzdGljcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1VwZGF0ZWQobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnRha2VT
dGF0aXN0aWNzKCkpLCAwKTsKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NVcGRhdGVkKFdURk1vdmUoc3RhdGlzdGljcykpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmluZGV4IGM0NjU2ZTFiNTk5Li4yNjg3MmYx
YWExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTY0LDcgKzY0
LDYgQEAgY2xhc3MgUGFnZUdyb3VwOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgU2Vz
c2lvbklEOwogY2xhc3MgVXNlckdlc3R1cmVUb2tlbjsKLWNsYXNzIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTsKIHN0cnVjdCBQbHVnaW5JbmZvOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0
YTsKIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CkBAIC00MTgsOSArNDE3LDYgQEAg
cHJpdmF0ZToKICAgICBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIgbV93ZWJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI7CiAjZW5kaWYKIAotICAgIFJlZjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwotICAgIFJlZjxXVEY6Oldv
cmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7Ci0KICAgICB1bnNpZ25lZCBtX3BhZ2VzTWFya2lu
Z0xheWVyc0FzVm9sYXRpbGUgeyAwIH07CiAgICAgYm9vbCBtX3N1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyIHsgZmFsc2UgfTsKICNpZiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314233</attachid>
            <date>2017-06-29 22:03:40 -0700</date>
            <delta_ts>2017-06-30 09:11:53 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>174013_ResourceLoadObserver_store_wip.patch</filename>
            <type>text/plain</type>
            <size>34263</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5k
ZXggNTI2NDBkMTVkYjguLjYyOWI2OTg1ZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMzIxLDcgKzMyMSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHByCiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkubG9nV2ViU29ja2V0TG9hZGluZyhkb2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CisgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nV2ViU29ja2V0TG9hZGluZyhk
b2N1bWVudC5mcmFtZSgpLCBtX3VybCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHByb3RvY29sU3Ry
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAKaW5kZXgg
ODRjNDExZDc2ZDMuLjIwM2MwNjE5NTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
VXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgVXNlckdlc3R1cmVJbmRpY2F0b3I6
OlVzZXJHZXN0dXJlSW5kaWNhdG9yKHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
U3QKIAogICAgIGlmIChkb2N1bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpIHsKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1
cmVUaW1lc3RhbXAoTW9ub3RvbmljVGltZTo6bm93KCkpOwotICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRp
bWVSZXNvbHV0aW9uKCpkb2N1bWVudCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1
bWVudCk7CiAgICAgICAgIGRvY3VtZW50LT50b3BEb2N1bWVudCgpLnNldFVzZXJEaWRJbnRlcmFj
dFdpdGhQYWdlKHRydWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCmluZGV4IGM4ZmNhNjAyOGFjLi4yMGI1ZmQ0YmY5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBEb2N1
bWVudExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2UKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgQVNT
RVJUKHRvcEZyYW1lLmRvY3VtZW50KCkpOwogCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkubG9nRnJhbWVOYXZpZ2F0aW9uKCptX2ZyYW1lLCB0b3BGcmFtZSwgbmV3
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0ZyYW1lTmF2aWdhdGlvbigqbV9mcmFtZSwgdG9wRnJhbWUsIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIAogICAgIC8vIFVwZGF0ZSBjb29raWUgcG9saWN5IGJh
c2UgVVJMIGFzIFVSTCBjaGFuZ2VzLCBleGNlcHQgZm9yIHN1YmZyYW1lcywgd2hpY2ggdXNlIHRo
ZQogICAgIC8vIFVSTCBvZiB0aGUgbWFpbiBmcmFtZSB3aGljaCBkb2Vzbid0IGNoYW5nZSB3aGVu
IHdlIHJlZGlyZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggODU1
NzM5NzYzZWQuLmNlMjlmNTNkZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI3ODcsNyArMjc4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1CiAgICAgICAg
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3Bv
bnNlLCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1
ZXN0LCByZXNwb25zZSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCByZXNwb25zZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5nRGVsZWdhdGVN
ZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZXNw
b25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRhLT5zaXplKCkg
OiAwLCAtMSwgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAKaW5kZXggM2ZjNmFiYWI1ZTAuLjQ3YmE1NTExNDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTM4LDcgKzM4LDYg
QEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00OSwyMyArNDgsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIGlubGluZSBTdHJpbmcgcHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKIAogc3Rh
dGljIFNlY29uZHMgdGltZXN0YW1wUmVzb2x1dGlvbiB7IDFfaCB9OwogCi1SZXNvdXJjZUxvYWRP
YnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkKK1Jlc291cmNl
TG9hZE9ic2VydmVyJiBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkKIHsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJlc291cmNlTG9hZE9ic2Vy
dmVyOwogICAgIHJldHVybiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+JiYgc3RvcmUpCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpzZXROb3RpZmlj
YXRpb25DYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZmljYXRpb25DYWxsYmFj
aykKIHsKLSAgICBpZiAobV9zdG9yZSAmJiBtX3F1ZXVlKQotICAgICAgICBtX3F1ZXVlID0gbnVs
bHB0cjsKLSAgICBtX3N0b3JlID0gV1RGTW92ZShzdG9yZSk7Ci19Ci0gICAgCi12b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzZXRTdGF0aXN0aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYm
IHF1ZXVlKQotewotICAgIEFTU0VSVCghbV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZSA9IFdURk1vdmUo
cXVldWUpOworICAgIEFTU0VSVCghbV9ub3RpZmljYXRpb25DYWxsYmFjayk7CisgICAgbV9ub3Rp
ZmljYXRpb25DYWxsYmFjayA9IFdURk1vdmUobm90aWZpY2F0aW9uQ2FsbGJhY2spOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKQEAgLTc5LDcgKzcxLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hv
dWxkTG9nKFBhZ2UqIHBhZ2UpIGNvbnN0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9zdG9yZTsKKyAgICBy
ZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2Ut
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BG
cmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpAQCAtMTEzLDY4ICsxMDUsNjEgQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwg
Y29uc3QgRnJhbWUmIHQKICAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQ
cmltYXJ5RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFp
bikKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgaXNNYWluRnJhbWUsIGlzUmVkaXJlY3QsIHNvdXJjZVByaW1h
cnlEb21haW4gPSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBtYWluRnJhbWVQ
cmltYXJ5RG9tYWluID0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgdGFy
Z2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCldIHsK
LSAgICAgICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Ci0gICAgICAgICAgICBhdXRvIHRhcmdldFN0YXRp
c3RpY3MgPSBtX3N0b3JlLT50YWtlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0
YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxs
YmFjayA9IGZhbHNlOworICAgIGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IHRha2VSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwogCi0gICAgICAg
ICAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJl
Y29yZHMgZm9yIHRoaXMgZG9tYWluCi0gICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7Cisg
ICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNv
cmRzIGZvciB0aGlzIGRvbWFpbgorICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9
IHRhcmdldFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKIAotICAgICAgICAgICAg
aWYgKGlzTWFpbkZyYW1lKQotICAgICAgICAgICAgICAgIHRhcmdldFN0YXRpc3RpY3MudG9wRnJh
bWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5Mb2FkZWRCZWZv
cmUgPSB0cnVlOworICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGlj
cy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSA9IHRydWU7CisgICAgZWxzZSB7Cisg
ICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1
ZTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jl
c3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQo
bWFpbkZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAg
c2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0
U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmlt
YXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgYXV0byYg
cmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwogCi0gICAgICAgICAg
ICBpZiAoaXNSZWRpcmVjdCkgewotICAgICAgICAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3Jp
Z2luUmVzb3VyY2VTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKGlzUHJl
dmFsZW50UmVzb3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikpCisgICAgICAgICAgICByZWRpcmVj
dGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJl
c291cmNlT3JpZ2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgICAg
ICBpZiAobV9zdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZSh0YXJnZXRQcmltYXJ5RG9tYWluKSkK
LSAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Mu
cmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMuYWRkKHRhcmdldFByaW1h
cnlEb21haW4pOworICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKKyAgICAgICAgICAgICsrdGFy
Z2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG87CisgICAgICAgICAgICAr
K3JlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlblJlZGly
ZWN0ZWRGcm9tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0
aWNzLnN1YmZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKKyAgICAgICAgICAgICsrcmVkaXJlY3Rp
bmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207
CisgICAgICAgICAgICByZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKIAotICAgICAgICAg
ICAgICAgIGlmIChpc01haW5GcmFtZSkgewotICAgICAgICAgICAgICAgICAgICArK3RhcmdldFN0
YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOwotICAgICAgICAgICAgICAgICAg
ICArK3JlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlblJl
ZGlyZWN0ZWRGcm9tOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG87Ci0gICAg
ICAgICAgICAgICAgICAgICsrcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3Vi
ZnJhbWVIYXNCZWVuUmVkaXJlY3RlZEZyb207Ci0gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0
aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRk
KHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1
YmZyYW1lU3ViUmVzb3VyY2VDb3VudDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChzb3VyY2VQcmltYXJ5RG9tYWluLmlzTnVsbCgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4u
aXNFbXB0eSgpIHx8IHNvdXJjZVByaW1hcnlEb21haW4gPT0gIm51bGxPcmlnaW4iKSB7CisgICAg
ICAgICAgICBpZiAoaXNNYWluRnJhbWUpCisgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0
aWNzLnRvcEZyYW1lSW5pdGlhbExvYWRDb3VudDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byYgc291cmNlT3JpZ2luUmVzb3VyY2VTdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQ
cmltYXJ5RG9tYWluKTsKIAotICAgICAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChpc01haW5GcmFtZSkgeworICAgICAgICAgICAgICAgICsrc291cmNlT3JpZ2luUmVzb3Vy
Y2VTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZEZyb207CisgICAgICAgICAgICAg
ICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlUHJpbWFyeURvbWFpbi5p
c051bGwoKSB8fCBzb3VyY2VQcmltYXJ5RG9tYWluLmlzRW1wdHkoKSB8fCBzb3VyY2VQcmltYXJ5
RG9tYWluID09ICJudWxsT3JpZ2luIikgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWlu
RnJhbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJh
bWVJbml0aWFsTG9hZENvdW50OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHNv
dXJjZU9yaWdpblJlc291cmNlU3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURvbWFpbik7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K3NvdXJjZU9yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRG
cm9tOwotICAgICAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1l
SGFzQmVlbk5hdmlnYXRlZFRvOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3ViZnJh
bWVIYXNCZWVuTmF2aWdhdGVkRnJvbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGFyZ2V0
U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK3NvdXJjZU9yaWdpblJl
c291cmNlU3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5OYXZpZ2F0ZWRGcm9tOworICAgICAgICAg
ICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgbV9zdG9yZS0+c2V0
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluLCBX
VEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKLSAgICAgICAgfSAvLyBSZWxlYXNlIGxvY2sKLSAg
ICAgICAgCi0gICAgICAgIGlmIChzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIpCi0g
ICAgICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKLSAgICB9
KTsKKyAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zZXQodGFyZ2V0UHJpbWFyeURvbWFpbiwg
V1RGTW92ZSh0YXJnZXRTdGF0aXN0aWNzKSk7CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNh
dGlvbkNhbGxiYWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9CiAgICAg
CiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3Qg
RnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0yMDIsNTQgKzE4Nyw0NyBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJh
bWUqIGZyYW1lLCBjb25zdCBSZXNvdQogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1h
aW5GcmFtZVByaW1hcnlEb21haW4gfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0UHJpbWFyeURvbWFp
biA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFT
U0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgaXNSZWRpcmVjdCwg
c291cmNlUHJpbWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCks
IG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVk
Q29weSgpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRl
ZENvcHkoKV0gewotICAgICAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
ciA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAgICAgICBhdXRvJiB0YXJnZXRT
dGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLQotICAgICAgICAvLyBBbHdheXMgZmlyZSBpZiB3
ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCi0g
ICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3Rp
Y3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKLQotICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOwotICAgICAgICBp
ZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKLQotICAg
ICAgICBpZiAoaXNSZWRpcmVjdCkgewotICAgICAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmln
aW5TdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gV2UganVzdCBpbnNlcnRlZCB0byB0aGUgc3RvcmUsIHNvIHdlIG5lZWQgdG8gcmVnZXQgJ3Rh
cmdldFN0YXRpc3RpY3MnCi0gICAgICAgICAgICBhdXRvJiB1cGRhdGVkVGFyZ2V0U3RhdGlzdGlj
cyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFy
Z2V0UHJpbWFyeURvbWFpbik7Ci0KLSAgICAgICAgICAgIGlmIChtX3N0b3JlLT5pc1ByZXZhbGVu
dFJlc291cmNlKHRhcmdldFByaW1hcnlEb21haW4pKQotICAgICAgICAgICAgICAgIHJlZGlyZWN0
aW5nT3JpZ2luU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3Jp
Z2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
ICsrcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0
ZWRGcm9tOwotICAgICAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZUhhc0JlZW5SZWRpcmVjdGVkVG87Ci0KLSAgICAgICAgICAgIGF1dG8gc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb1Jlc3VsdCA9IHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAgICAg
ICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsK
LQotICAgICAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0Jl
ZW5TdWJyZXNvdXJjZUNvdW50OwotCi0gICAgICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0
ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJl
c291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNf
Y2FzdDxkb3VibGU+KHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1
YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291
bnQ7CisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBmYWxzZTsKKyAg
ICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKIAotICAgICAgICAgICAgYXV0byB0b3Rh
bFZpc2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNpdGVkTWFwLnNpemUoKSwgMVUpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVl
blN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3Vi
cmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgfSAvLyBS
ZWxlYXNlIGxvY2sKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIpCi0gICAgICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKLSAgICB9KTsKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3Vz
bHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgc2hvdWxkQ2FsbE5v
dGlmaWNhdGlvbkNhbGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQg
PiAwOworCisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0g
dGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWlu
RnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2Fs
bGJhY2sgPSB0cnVlOworCisgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgYXV0byYgcmVk
aXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKworICAgICAgICAvLyBXZSBqdXN0IGlu
c2VydGVkIHRvIHRoZSBzdG9yZSwgc28gd2UgbmVlZCB0byByZWdldCAndGFyZ2V0U3RhdGlzdGlj
cycKKyAgICAgICAgYXV0byYgdXBkYXRlZFRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworCisgICAg
ICAgIGlmIChpc1ByZXZhbGVudFJlc291cmNlKHRhcmdldFByaW1hcnlEb21haW4pKQorICAgICAg
ICAgICAgcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFs
ZW50UmVzb3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKworICAgICAgICAr
K3JlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVk
RnJvbTsKKyAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0Jl
ZW5SZWRpcmVjdGVkVG87CisKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICBpZiAoc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKworICAgICAgICArK3VwZGF0ZWRU
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7CisKKyAg
ICAgICAgYXV0byB0b3RhbFZpc2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNpdGVkTWFwLnNp
emUoKSwgMVUpOworCisgICAgICAgIHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
SGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0
ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHVwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291
cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOworICAgIH0gZWxzZSB7
CisgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJj
ZUNvdW50OworCisgICAgICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5z
VmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKworICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2lu
c1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisgICAgfQorCisgICAg
aWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAgbV9ub3RpZmljYXRp
b25DYWxsYmFjaygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2Nr
ZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB0YXJnZXRVUkwpCkBAIC0y
NzYsMzEgKzI1NCwyNCBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRM
b2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB0YQogICAgIGlmICh0YXJnZXRQ
cmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4pCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgdGFy
Z2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIG1h
aW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29w
eSgpXSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0g
ZmFsc2U7Ci0gICAgICAgIAotICAgICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Ci0gICAgICAgIGF1dG8mIHRhcmdldFN0YXRp
c3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHRhcmdldFByaW1hcnlEb21haW4pOwotCi0gICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhh
dmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAg
ICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5k
YXRhUmVjb3Jkc1JlbW92ZWQgPiAwOwotICAgICAgICAKLSAgICAgICAgYXV0byBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAg
ICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7Cisg
ICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBmYWxzZTsKKyAgICBhdXRv
JiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKIAotICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKLSAgICAgICAgCi0gICAgICAgIGF1
dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXplKCksIDFV
KTsKLSAgICAgICAgCi0gICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVu
U3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0
YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJy
ZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKLSAgICAgICAgfSAvLyBSZWxlYXNlIGxvY2sK
LSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIp
Ci0gICAgICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKLSAg
ICB9KTsKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBk
YXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNh
bGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCisgICAg
YXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5
RG9tYWluKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVl
OworCisgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNl
Q291bnQ7CisKKyAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0
ZWRNYXAuc2l6ZSgpLCAxVSk7CisKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFz
QmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQg
PSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVu
U3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5v
dGlmaWNhdGlvbkNhbGxiYWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9
CiAKIHN0YXRpYyBXYWxsVGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZSB0aW1lKQpA
QCAtMzE5LDI2ICsyOTAsNjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlcklu
dGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2MKICAgICBpZiAodXJs
LmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlQobV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlEb21h
aW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluKHVybCkuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2Nr
KCkpOwotICAgICAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKLSAgICAgICAg
V2FsbFRpbWUgbmV3VGltZSA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7
Ci0gICAgICAgIGlmIChuZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3RhdGlzdGljcy5oYWRV
c2VySW50ZXJhY3Rpb24gPSB0cnVlOwotICAgICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lID0gbmV3VGltZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgYXV0byYgc3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURv
bWFpbih1cmwpKTsKKyAgICBXYWxsVGltZSBuZXdUaW1lID0gcmVkdWNlVGltZVJlc29sdXRpb24o
V2FsbFRpbWU6Om5vdygpKTsKKyAgICBpZiAobmV3VGltZSA9PSBzdGF0aXN0aWNzLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aXN0aWNz
LmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7CisKKyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNr
KCk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZE9ic2VydmVyOjpl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmVuc3VyZShwcmltYXJ5RG9tYWluLCBbJnByaW1hcnlEb21haW5dIHsKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MocHJpbWFyeURvbWFpbik7CiAgICAgfSk7CisgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBhdXRvIHN0YXRp
c3Rpc3RpY3MgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC50YWtlKHByaW1hcnlEb21haW4pOwor
ICAgIGlmIChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbi5pc051bGwoKSkKKyAgICAgICAg
c3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4gPSBwcmltYXJ5RG9tYWluOworICAgIEFTU0VS
VChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbiA9PSBwcmltYXJ5RG9tYWluKTsKKyAgICBy
ZXR1cm4gc3RhdGlzdGlzdGljczsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aXNQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Cit7Cisg
ICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQocHJpbWFyeURv
bWFpbik7CisgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1hcEVudHJ5LT52YWx1ZS5pc1By
ZXZhbGVudFJlc291cmNlOwogfQogCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRp
c3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fc3Rv
cmUgPyBtX3N0b3JlLT5zdGF0aXN0aWNzRm9yT3JpZ2luKG9yaWdpbikgOiBlbXB0eVN0cmluZygp
OworICAgIGF1dG8gaXRlciA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQob3JpZ2luKTsK
KyAgICBpZiAoaXRlciA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICByZXR1cm4gIlN0YXRpc3RpY3MgZm9yICIgKyBv
cmlnaW4gKyAiOlxuIiArIGl0ZXItPnZhbHVlLnRvU3RyaW5nKCk7Cit9CisKK1ZlY3RvcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3Mo
KQoreworICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOworICAg
IHN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAudmFsdWVzKCkpCisgICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoc3RhdGlzdGljKSk7CisKKyAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwor
CisgICAgcmV0dXJuIHN0YXRpc3RpY3M7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKaW5kZXggOWEwNTQ1
YzkyNjAuLjQzYjJhMzczODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaApAQCAtMjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ4LDIzICs0NywyNiBA
QCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIGNsYXNzIFJlc291cmNlTG9hZE9ic2Vy
dmVyIHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI+OwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNl
cnZlciYgc2hhcmVkT2JzZXJ2ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXImIHNoYXJlZCgpOwogICAgIAogICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0
aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpOwogICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lkIGxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3Qg
RnJhbWUqLCBjb25zdCBVUkwmKTsKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1
Y2VkVGltZVJlc29sdXRpb24oY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+
JiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1F1ZXVlKFJlZjxXVEY6
OldvcmtRdWV1ZT4mJik7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zv
ck9yaWdpbihjb25zdCBTdHJpbmcmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90
aWZpY2F0aW9uQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtlU3RhdGlzdGljcygpOwor
CiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2UqKSBjb25zdDsKKyAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KGNvbnN0IFN0cmluZyYpOworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgdGFrZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsK
KyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWlu
KSBjb25zdDsKIAotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fc3Rv
cmU7Ci0gICAgUmVmUHRyPFdURjo6V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKKyAg
ICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9ub3RpZmljYXRpb25DYWxsYmFjazsKICAgICBIYXNo
TWFwPFN0cmluZywgc2l6ZV90PiBtX29yaWdpbnNWaXNpdGVkTWFwOwogfTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKaW5kZXggYzBjZTE3MWMxNDkuLmRmOGViMDNiODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtNzIsMTYg
KzcyLDYgQEAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3IKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKIH0KIAotUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKLXsKLSAgICBBU1NFUlQobV9zdGF0aXN0aWNzTG9j
ay5pc0xvY2tlZCgpKTsKLSAgICBhdXRvIHN0YXRpc3Rpc3RpY3MgPSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC50YWtlKHByaW1hcnlEb21haW4pOwotICAgIGlmIChzdGF0aXN0aXN0aWNzLmhpZ2hM
ZXZlbERvbWFpbi5pc051bGwoKSkKLSAgICAgICAgc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21h
aW4gPSBwcmltYXJ5RG9tYWluOwotICAgIEFTU0VSVChzdGF0aXN0aXN0aWNzLmhpZ2hMZXZlbERv
bWFpbiA9PSBwcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gc3RhdGlzdGlzdGljczsKLX0KLQog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiYgc3RhdGlzdGljcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
QEAgLTE3MywzMiArMTYzLDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KCkKICAgICAgICAgbV9ncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGFIYW5kbGVyKCk7CiB9CiAKLVN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCi17Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKLSAgICBhdXRvIGl0ZXIg
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKG9yaWdpbik7Ci0gICAgaWYgKGl0ZXIgPT0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotICAgIAotICAgIHJldHVybiAiU3RhdGlzdGljcyBmb3IgIiArIG9yaWdpbiArICI6XG4i
ICsgaXRlci0+dmFsdWUudG9TdHJpbmcoKTsKLX0KLQotVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGFrZVN0YXRpc3RpY3MoKQotewot
ICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOwotICAgIAotICAg
IHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOwotICAgIHN0
YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3RhdGlzdGljc01hcC5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAudmFsdWVzKCkpCi0gICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
c3RhdGlzdGljKSk7Ci0KLSAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gc3RhdGlzdGljczsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4mIHN0YXRpc3RpY3MpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgKaW5kZXggYzUwYzNhNTg1NjMuLjA3MWY5MjEyOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC01MSw2ICs1
MSw3IEBAIHN0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CiAKIHN0cnVjdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOwogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8g
V2ViS2l0Mi9VSVByb2Nlc3MuCiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7
CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU+IGNyZWF0ZSgpOwpAQCAtNTgsMjEgKzU5LDE3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBjcmVhdGVFbmNvZGVy
RnJvbURhdGEoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlYWREYXRhRnJvbURlY29kZXIo
S2V5ZWREZWNvZGVyJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zv
ck9yaWdpbihjb25zdCBTdHJpbmcmKTsKLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpOyB9CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckluTWVtb3J5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihjb25zdCBTdHJpbmcmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIHRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgc2V0UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihj
b25zdCBTdHJpbmcmLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiYpOwogCiAgICAgYm9vbCBpc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzPiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPiB0YWtlU3RhdGlzdGljcygpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROb3Rp
ZmljYXRpb25DYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soV1RGOjpGdW5jdGlv
bjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9SZW1vdmUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJGaXJzdCk+JiYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggYzc4ZTNhMDQxMzQuLjVj
ODViNTJmMWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3RJbnRlcm5hbChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbgogCiAgICAgaWYg
KG5ld1JlcXVlc3QucmVxdWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVy
OjpNYWluKSB7CiAgICAgICAgIFRyYWNlUG9pbnQoU3VicmVzb3VyY2VMb2FkV2lsbFN0YXJ0KTsK
LSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVz
b3VyY2VMb2FkaW5nKG1fZnJhbWUuZ2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2Up
OworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nU3VicmVzb3VyY2VM
b2FkaW5nKG1fZnJhbWUuZ2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
IH0KIAogICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggNGM3MDY0ZDFlOWYuLmY0ZGMzZjM2YTQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zODg0LDcgKzM4ODQsNyBAQCBKU1ZhbHVlIElu
dGVybmFsczo6Y2xvbmVBcnJheUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
YnVmZmVyLCBKU1ZhbAogCiBTdHJpbmcgSW50ZXJuYWxzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewotICAgIHJldHVybiBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNzRm9yT3JpZ2luKG9yaWdpbik7
CisgICAgcmV0dXJuIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5zdGF0aXN0aWNzRm9y
T3JpZ2luKG9yaWdpbik7CiB9CiAKIHZvaWQgSW50ZXJuYWxzOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQppbmRleCA3ODI2ZmI0NzhlZS4uNzYyYmU5ZmEyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KQEAgLTI3NCw3ICsyNzQsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3Jr
U3RhdGVOb3RpZmllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVE
YXRhYmFzZVRyYWNrZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU21hcnRSZXBsYWNlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1RpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oPgpAQCAtNzY0LDgg
Kzc2Myw2IEBAIGVudW0geyBXZWJWaWV3VmVyc2lvbiA9IDQgfTsKICNkZWZpbmUgdGltZWRMYXlv
dXRTaXplIDQwOTYKIAogc3RhdGljIE5TTXV0YWJsZVNldCAqc2NoZW1lc1dpdGhSZXByZXNlbnRh
dGlvbnNTZXQ7Ci1zdGF0aWMgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7Ci1zdGF0aWMgV1RGOjpXb3JrUXVldWUqIHN0YXRp
c3RpY3NRdWV1ZTsKIAogI2lmICFQTEFURk9STShJT1MpCiBOU1N0cmluZyAqX1dlYkNhbkdvQmFj
a0tleSA9ICAgICAgICAgICAgQCJjYW5Hb0JhY2siOwpAQCAtMTE2MywyMSArMTE2MCw2IEBAICsg
KHZvaWQpX3JlcG9ydEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb24gaW5Db250ZXh0OihK
U0NvbnRleHRSZWYpY29udGV4dAogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMo
ZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKIH0KIAotc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6
ZUFwcGxpY2F0aW9uU3RhdGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKQotewotICAgIHN0
YXRpYyBCT09MIGluaXRpYWxpemVkID0gTk87Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlID0gJldlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9y
ZSgqcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKTsKLSAgICAKLSAgICBzdGF0aXN0aWNzUXVl
dWUgPSAmV1RGOjpXb3JrUXVldWU6OmNyZWF0ZSgiV2ViVmlldyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikubGVha1JlZigpOwotICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NRdWV1ZSgqc3RhdGlzdGlj
c1F1ZXVlKTsKLSAgICAKLSAgICBpbml0aWFsaXplZCA9IFlFUzsKLX0KLQogc3RhdGljIGJvb2wg
c2hvdWxkRW5hYmxlTG9hZERlZmVycmluZygpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTQy
Nyw4ICsxNDA5LDYgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1l
OihOU1N0cmluZyAqKWZyYW1lTmFtZSBncm91cE5hbWU6KE5TU3QKICNlbmRpZgogICAgICAgICBX
ZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAgV2ViS2l0SW5p
dGlhbGl6ZUFwcGxpY2F0aW9uU3RhdGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKTsKLQog
I2lmIEVOQUJMRShHQU1FUEFEKQogICAgICAgICBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3Zp
ZGVySWZOZWNlc3NhcnkoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggNDU3NTM1NGU5NzguLjMwNGNiODU2ZGM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+
CkBAIC0xNzUsOCArMTc0LDYgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgICwgbV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIoKnRoaXMpCiAjZW5kaWYK
LSAgICAsIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCi0gICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBR
dWV1ZSIpKQogewogICAgIC8vIEluaXRpYWxpemUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCiAg
ICAgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjppbml0aWFsaXplKCk7CkBAIC0yMDIsOSArMTk5LDcg
QEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAKICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdp
bkhhc2hlcy5hZGQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWdu
ZWQsIGRvdWJsZT4oKSk7CiAKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29w
eVJlZigpKTsKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRT
dGF0aXN0aWNzUXVldWUobV9zdGF0aXN0aWNzUXVldWUuY29weVJlZigpKTsKLSAgICBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsK
KyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXROb3RpZmljYXRp
b25DYWxsYmFjayhbdGhpc10gewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzQ2hhbmdlZFRpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3RhdGlzdGljc0No
YW5nZWRUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKQEAgLTE0NjQsMTAgKzE0NTksMTEgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJvY2Vzc0NsZWFudXBUaW1lckZpcmVkKCkKIAogdm9p
ZCBXZWJQcm9jZXNzOjpzdGF0aXN0aWNzQ2hhbmdlZFRpbWVyRmlyZWQoKQogewotICAgIGlmICht
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+aXNFbXB0eSgpKQorICAgIGF1dG8gc3RhdGlz
dGljcyA9IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS50YWtlU3RhdGlzdGljcygpOwor
ICAgIGlmIChzdGF0aXN0aWNzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS0+dGFrZVN0YXRpc3RpY3MoKSksIDApOworICAgIHBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSks
IDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5k
ZXggYzQ2NTZlMWI1OTkuLjI2ODcyZjFhYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaApAQCAtNjQsNyArNjQsNiBAQCBjbGFzcyBQYWdlR3JvdXA7CiBjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CiBjbGFzcyBTZXNzaW9uSUQ7CiBjbGFzcyBVc2VyR2VzdHVyZVRva2VuOwot
Y2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogc3RydWN0IFBsdWdpbkluZm87CiBz
dHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogc3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5n
czsKQEAgLTQxOCw5ICs0MTcsNiBAQCBwcml2YXRlOgogICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJh
Y2tlciBtX3dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcjsKICNlbmRpZgogCi0gICAgUmVmPFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKLQogICAg
IHVuc2lnbmVkIG1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAgICBib29s
IG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwogI2lmIFBMQVRGT1JN
KE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314269</attachid>
            <date>2017-06-30 09:11:55 -0700</date>
            <delta_ts>2017-06-30 09:15:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174013-20170630091152.patch</filename>
            <type>text/plain</type>
            <size>39146</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU5YjhiOGE1YTRlODJj
YThhN2JlOWM2NzczNzEwOTRhODQ1Mzg0NS4uOGQ4YTk2ZDBlZWIwMGVjZDgwNmQ1ZmM4MmQxOTcz
MGMwZWMyMzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE3LTA2LTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIgZG9lcyBub3QgbmVlZCBhIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MDEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIgZG9lcyBub3QgbmVlZCBhIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlIGlzIHRvbyBjb21wbGljYXRlZCBmb3IgaXRzIG5lZWRzLgorICAg
ICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2FuIHRoZW4gYmUgbW92ZWQgdG8gV2Vi
S2l0Mi9VSVByb2Nlc3MgaW4gYSBmb2xsb3ctdXAuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVj
dCk6CisgICAgICAgICogZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJHZXN0dXJlSW5kaWNhdG9yOjpVc2VyR2VzdHVyZUluZGljYXRvcik6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseSk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJT
b2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjp0
YWtlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0Zvck9yaWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3MpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVx
dWVzdEludGVybmFsKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JPcmlnaW4pOgor
CiAyMDE3LTA2LTI5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQVg6IENhbm5vdCBjYWxsIHNldFZhbHVlKCkgb24gY29udGVudGVkaXRhYmxlIG9yIEFS
SUEgdGV4dCBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDMyNjkwMThmNmZkODU4YTQyZTBk
YTEzMjNjYjE5OWU0MGQ0MDY5ZDAuLjE5YWMzNmI4MDNjNTc5YzRjMDYzOGM1ODNiOGQ4YzY2ZWRh
MzY0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNi0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyIGRvZXMgbm90IG5lZWQgYSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDAxMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyIGRvZXMgbm90IG5lZWQgYSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSBpcyB0b28gY29tcGxpY2F0ZWQgZm9yIGl0cyBuZWVkcy4KKyAg
ICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGNhbiB0aGVuIGJlIG1vdmVkIHRvIFdl
YktpdDIvVUlQcm9jZXNzIGluIGEgZm9sbG93LXVwLgorCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFt
ZU5hbWU6Z3JvdXBOYW1lOl0pOgorCiAyMDE3LTA2LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1hcmsgdGhlIEdyYXBoaWNzQ29udGV4dCBhcyBh
Y2NlbGVyYXRlZCB3aGVuIHRoZSBXZWJIVE1MVmlldydzIGxheWVyIGlzIGRyYXdpbmcgYXN5bmNo
cm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkMjhhNzlkZjM5ZTBiN2ViM2Y0YzA5NDczM2NkN2EwYzRl
ODRhNWJlLi4wODI2ZjY3OTE4OWEwMGE0OGZhMzcxMmRmZGM0ZDBjMTM5MjdlOGJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDYtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlciBkb2VzIG5vdCBuZWVkIGEg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlciBkb2VzIG5vdCBuZWVkIGEg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUg
aXMgdG9vIGNvbXBsaWNhdGVkIGZvciBpdHMgbmVlZHMuCisgICAgICAgIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSBjYW4gdGhlbiBiZSBtb3ZlZCB0byBXZWJLaXQyL1VJUHJvY2VzcyBpbiBh
IGZvbGxvdy11cC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Om1fd2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6c3RhdGlzdGljc0NoYW5nZWRUaW1lckZpcmVkKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAxNy0wNi0yOSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBc3NlcnQgdGhhdCBjYWxsYmFjayBJRCBpcyBub3Qg
MCBvciAtMSBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDUyNjQwZDE1ZGI4YTY4ODJl
NjQyZDNlODQ0NjY5YTA3Njg2OTgzOTEuLjYyOWI2OTg1ZjI5OGI4MmM0MGJkZDM5M2UwNjgzYWYy
NWJkODlkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0
Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dXZWJTb2NrZXRMb2Fk
aW5nKGRvY3VtZW50LmZyYW1lKCksIG1fdXJsKTsKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dXZWJTb2NrZXRMb2FkaW5nKGRvY3VtZW50LmZyYW1lKCksIG1f
dXJsKTsKICAgICB9CiAKICAgICBTdHJpbmcgcHJvdG9jb2xTdHJpbmc7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcAppbmRleCA4NGM0MTFkNzZkMzU1NjI0OTBl
YTBmNzlkMGNhZTgzZjk1Y2IyY2I5Li4yMDNjMDYxOTUxMDMxMTlhMTY1MGNkYzc5NGI2NTQ4NGIx
MTZjNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgVXNlckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNh
dG9yKHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3QKIAogICAgIGlmIChkb2N1
bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKICAgICAg
ICAgZG9jdW1lbnQtPnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAoTW9ub3Rv
bmljVGltZTo6bm93KCkpOwotICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2Jz
ZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1
bWVudCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dVc2VySW50
ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1bWVudCk7CiAgICAgICAgIGRv
Y3VtZW50LT50b3BEb2N1bWVudCgpLnNldFVzZXJEaWRJbnRlcmFjdFdpdGhQYWdlKHRydWUpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IGM4
ZmNhNjAyOGFjYWU5YmZkMTc3YTU1OTI2NTdjZGVjMzI2MDM0MWYuLjIwYjVmZDRiZjkyOGIwMjA4
MzhjYzkyYjQ5YmEwYjA3NzdjNzU3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcApAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OndpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlCiAg
ICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIEFTU0VSVCh0b3BGcmFtZS5kb2N1
bWVudCgpKTsKIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxv
Z0ZyYW1lTmF2aWdhdGlvbigqbV9mcmFtZSwgdG9wRnJhbWUsIG5ld1JlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UpOworICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGcmFtZU5h
dmlnYXRpb24oKm1fZnJhbWUsIHRvcEZyYW1lLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICAKICAgICAvLyBVcGRhdGUgY29va2llIHBvbGljeSBiYXNlIFVSTCBhcyBVUkwgY2hh
bmdlcywgZXhjZXB0IGZvciBzdWJmcmFtZXMsIHdoaWNoIHVzZSB0aGUKICAgICAvLyBVUkwgb2Yg
dGhlIG1haW4gZnJhbWUgd2hpY2ggZG9lc24ndCBjaGFuZ2Ugd2hlbiB3ZSByZWRpcmVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDg1NTczOTc2M2VkY2Q2ZmNkNzJh
NzIzYjhhZTA1NzNhYTM2ZmM4ZTkuLmNlMjlmNTNkZTNiNzE1YmVkMzA3NjRiYzY5OTYzNTA4NzQ1
ZDBiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjc4Nyw3ICsy
Nzg3LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXUKICAgICAgICAgICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5l
dHdvcmtpbmdDb250ZXh0KCksIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIHN0b3JlZENyZWRlbnRp
YWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGJ1ZmZlcik7CiAg
ICAgICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsK
ICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkubWF5
YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7Ci0gICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsK
KyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dTdWJyZXNvdXJj
ZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsKICAgICAgICAgfQogICAg
IH0KICAgICBub3RpZmllcigpLnNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1l
bnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlcXVlc3QsIHJlc3BvbnNlLCBkYXRhID8gZGF0
YS0+ZGF0YSgpIDogbnVsbHB0ciwgZGF0YSA/IGRhdGEtPnNpemUoKSA6IDAsIC0xLCBlcnJvcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAppbmRl
eCAzZmM2YWJhYjVlMGM0ZTZlODNhMzkxMWNiN2ZiYjIwNzMxZDZhMzQ1Li4xN2MyZDE2M2E1YmY1
N2FlYjM5NjU0MzJiMWFmMTNiMzM2NjE5MDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00OSwyMyArNDgsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBT
dHJpbmcgcHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKIAogc3RhdGljIFNlY29uZHMgdGlt
ZXN0YW1wUmVzb2x1dGlvbiB7IDFfaCB9OwogCi1SZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkKK1Jlc291cmNlTG9hZE9ic2VydmVyJiBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJlc291cmNlTG9hZE9ic2VydmVyOwogICAgIHJldHVy
biByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2V0U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYgc3Rv
cmUpCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpzZXROb3RpZmljYXRpb25DYWxsYmFjayhX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKIHsKLSAgICBpZiAo
bV9zdG9yZSAmJiBtX3F1ZXVlKQotICAgICAgICBtX3F1ZXVlID0gbnVsbHB0cjsKLSAgICBtX3N0
b3JlID0gV1RGTW92ZShzdG9yZSk7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRTdGF0aXN0aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYmIHF1ZXVlKQotewotICAg
IEFTU0VSVCghbV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZSA9IFdURk1vdmUocXVldWUpOworICAgIEFT
U0VSVCghbV9ub3RpZmljYXRpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25DYWxsYmFj
ayA9IFdURk1vdmUobm90aWZpY2F0aW9uQ2FsbGJhY2spOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTc5
LDcgKzcxLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hvdWxkTG9nKFBhZ2UqIHBh
Z2UpIGNvbnN0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2Ut
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9zdG9yZTsKKyAgICByZXR1cm4gU2V0dGluZ3M6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxT
ZXNzaW9uKCkgJiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAogdm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3Qg
RnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xMTIsNjkgKzEwNCw2MSBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJh
bWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdAogICAgIAogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9t
YWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBz
b3VyY2VQcmltYXJ5RG9tYWluKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKG1f
cXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBpc01haW5GcmFtZSwgaXNSZWRp
cmVjdCwgc291cmNlUHJpbWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4uaXNvbGF0ZWRD
b3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9tYWluLmlz
b2xhdGVkQ29weSgpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlciA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKLSAgICAgICAgICAg
IGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPnRha2VSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAvLyBB
bHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9y
IHRoaXMgZG9tYWluCi0gICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisgICAgYXV0byB0
YXJnZXRTdGF0aXN0aWNzID0gdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKLSAg
ICAgICAgICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRv
QmVmb3JlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRhcmdl
dFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1ZTsKKyAgICAvLyBB
bHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9y
IHRoaXMgZG9tYWluCisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CiAKLSAgICAgICAgICAgICAg
ICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0
aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pOwotICAgICAgICAgICAgICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlciA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGlzTWFpbkZyYW1l
KQorICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZUhhc0JlZW5Mb2FkZWRCZWZvcmUgPSB0cnVlOworCisgICAgICAgIGF1dG8gc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIH0KIAotICAgICAg
ICAgICAgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiByZWRpcmVjdGlu
Z09yaWdpblJlc291cmNlU3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURvbWFpbik7CisgICAgaWYgKGlzUmVk
aXJlY3QpIHsKKyAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3Rp
Y3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1h
cnlEb21haW4pOwogCi0gICAgICAgICAgICAgICAgaWYgKG1fc3RvcmUtPmlzUHJldmFsZW50UmVz
b3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikpCi0gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0
aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVz
b3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKGlzUHJl
dmFsZW50UmVzb3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikpCisgICAgICAgICAgICByZWRpcmVj
dGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJl
c291cmNlT3JpZ2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNNYWluRnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0
aWNzLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKLSAgICAgICAgICAgICAgICAgICAgKyty
ZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5SZWRpcmVj
dGVkRnJvbTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAr
K3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOwotICAgICAgICAg
ICAgICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1l
SGFzQmVlblJlZGlyZWN0ZWRGcm9tOwotICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGluZ09y
aWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJn
ZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAg
ICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOworICAgICAg
ICAgICAgKytyZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0Jl
ZW5SZWRpcmVjdGVkRnJvbTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICsrdGFyZ2V0
U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG87CisgICAgICAgICAgICArK3Jl
ZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlblJlZGlyZWN0
ZWRGcm9tOworICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Mu
c3ViZnJhbWVVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lU3ViUmVzb3VyY2VD
b3VudDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxsKCkgfHwgc291cmNlUHJpbWFyeURvbWFp
bi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbiA9PSAibnVsbE9yaWdpbiIpIHsKKyAg
ICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRp
c3RpY3MudG9wRnJhbWVJbml0aWFsTG9hZENvdW50OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0
YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJj
ZVByaW1hcnlEb21haW4pOworCisgICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKKyAgICAg
ICAgICAgICAgICArK3NvdXJjZU9yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0Jl
ZW5OYXZpZ2F0ZWRGcm9tOworICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BG
cmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxsKCkgfHwgc291cmNlUHJpbWFyeURv
bWFpbi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbiA9PSAibnVsbE9yaWdpbiIpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSW5pdGlhbExvYWRDb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0
aXN0aWNzLnN1YmZyYW1lU3ViUmVzb3VyY2VDb3VudDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3Rp
Y3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNv
dXJjZVByaW1hcnlEb21haW4pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5GcmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRp
c3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkRnJvbTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNl
T3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlbk5hdmlnYXRlZEZyb207Ci0g
ICAgICAgICAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVu
TmF2aWdhdGVkVG87Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3ViZnJhbWVI
YXNCZWVuTmF2aWdhdGVkRnJvbTsKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVIYXNCZWVuTmF2aWdhdGVkVG87CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgICAgIG1fc3RvcmUtPnNldFJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RGTW92ZSh0YXJnZXRTdGF0aXN0aWNzKSk7
Ci0gICAgICAgIH0gLy8gUmVsZWFzZSBsb2NrCi0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQotICAgICAgICAgICAgbV9zdG9yZS0+ZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuc2V0KHRhcmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykp
OworCisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAgbV9u
b3RpZmljYXRpb25DYWxsYmFjaygpOwogfQogICAgIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQpAQCAtMjAxLDU1ICsxODUsNDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3UKICAg
ICAKICAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWlu
IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURv
bWFpbikpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGlzUmVkaXJlY3QsIHNvdXJjZVByaW1hcnlEb21haW4g
PSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBtYWluRnJhbWVQcmltYXJ5RG9t
YWluID0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgdGFyZ2V0UHJpbWFy
eURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAg
Ym9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0
aXN0aWNzTG9jaygpKTsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUt
PmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURv
bWFpbik7Ci0KLSAgICAgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJl
bW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgotICAgICAgICBzaG91bGRGaXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3Zl
ZCA+IDA7Ci0KLSAgICAgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVz
dWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFk
ZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZEZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGlzUmVkaXJlY3Qp
IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IG1fc3Rv
cmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFy
eURvbWFpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGp1c3QgaW5zZXJ0ZWQg
dG8gdGhlIHN0b3JlLCBzbyB3ZSBuZWVkIHRvIHJlZ2V0ICd0YXJnZXRTdGF0aXN0aWNzJwotICAg
ICAgICAgICAgYXV0byYgdXBkYXRlZFRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwot
Ci0gICAgICAgICAgICBpZiAobV9zdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZSh0YXJnZXRQcmlt
YXJ5RG9tYWluKSkKLSAgICAgICAgICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mu
cmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMuYWRkKHRhcmdldFByaW1h
cnlEb21haW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2lu
U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKLSAgICAgICAgICAg
ICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZFRv
OwotCi0gICAgICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9SZXN1bHQg
PSByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAgICBpZiAoc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIHNob3Vs
ZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7Ci0KLSAgICAgICAgICAgICsrdXBk
YXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsK
LQotICAgICAgICAgICAgYXV0byB0b3RhbFZpc2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNp
dGVkTWFwLnNpemUoKSwgMVUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1cGRhdGVkVGFy
Z2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5
VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih1cGRhdGVk
VGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRv
dGFsVmlzaXRlZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50OwogCi0gICAgICAgICAgICBh
dXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAx
VSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlz
aXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhh
c0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKLSAgICAgICAgfQotICAgICAg
ICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IHRh
a2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4p
OworCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0
YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCisg
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmlt
YXJ5RG9tYWluKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3Vs
dC5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOworCisgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdP
cmlnaW5TdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKworICAgICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJj
ZSh0YXJnZXRQcmltYXJ5RG9tYWluKSkKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3Rh
dGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucy5hZGQodGFy
Z2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207CisgICAgICAgICsrdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkVG87CisKKyAgICAgICAgYXV0byBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21h
aW4pOworICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1
ZTsKKworICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVz
b3VyY2VDb3VudDsKKworICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3Jp
Z2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5z
dWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5VG90YWxOdW1iZXJPZk9y
aWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOworICAgIH0gZWxz
ZSB7CisgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNv
dXJjZUNvdW50OworCisgICAgICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmln
aW5zVmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKworICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3Jp
Z2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVz
b3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisgICAgfQorCisg
ICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHRhcmdldFByaW1hcnlEb21haW4sIFdURk1v
dmUodGFyZ2V0U3RhdGlzdGljcykpOworCisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25D
YWxsYmFjaykKKyAgICAgICAgbV9ub3RpZmljYXRpb25DYWxsYmFjaygpOwogfQogCiB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFt
ZSwgY29uc3QgVVJMJiB0YXJnZXRVUkwpCkBAIC0yNzYsMzEgKzI1MSwyMyBAQCB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwg
Y29uc3QgVVJMJiB0YQogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVBy
aW1hcnlEb21haW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFBy
aW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWlu
RnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICB7
Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2so
KSk7Ci0gICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwotCi0g
ICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEg
cmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOwotICAg
ICAgICAKLSAgICAgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0
ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZCht
YWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CisgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURv
bWFpbik7CiAKLSAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1
YnJlc291cmNlQ291bnQ7Ci0gICAgICAgIAotICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0
ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7Ci0gICAgICAgIAotICAgICAg
ICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZp
ZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRh
cmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3Rh
bFZpc2l0ZWQ7Ci0gICAgICAgIH0gLy8gUmVsZWFzZSBsb2NrCi0gICAgICAgIAotICAgICAgICBp
ZiAoc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQotICAgICAgICAgICAgbV9zdG9y
ZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgLy8gQWx3YXlz
IGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlz
IGRvbWFpbgorICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdGFyZ2V0
U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCisgICAgYXV0byBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBp
ZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworCisgICAgKyt0YXJn
ZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7CisKKyAgICBh
dXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAx
VSk7CisKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNl
Q291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxk
b3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3Vu
dCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9CiAKIHN0YXRpYyBXYWxs
VGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZSB0aW1lKQpAQCAtMzE5LDI2ICsyODYs
NjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJl
ZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2MKICAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8
fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9xdWV1ZSk7
Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlEb21haW5TdHJpbmcgPSBwcmlt
YXJ5RG9tYWluKHVybCkuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgewotICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAgICAgICBh
dXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKLSAgICAgICAgV2FsbFRpbWUgbmV3VGlt
ZSA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0gICAgICAgIGlmIChu
ZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24g
PSB0cnVlOwotICAgICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ID0gbmV3VGltZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9zdG9yZS0+ZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAg
ICBhdXRvIG5ld1RpbWUgPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwor
ICAgIGlmIChuZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0g
bmV3VGltZTsKKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKK30KKworUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHByaW1hcnlE
b21haW4sIFsmcHJpbWFyeURvbWFpbl0geworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhwcmltYXJ5RG9tYWluKTsKICAgICB9KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6dGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIGF1dG8gc3RhdGlzdGlzdGljcyA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnRha2UocHJpbWFyeURvbWFpbik7CisgICAgaWYgKHN0YXRpc3Rpc3Rp
Y3MuaGlnaExldmVsRG9tYWluLmlzTnVsbCgpKQorICAgICAgICBzdGF0aXN0aXN0aWNzLmhpZ2hM
ZXZlbERvbWFpbiA9IHByaW1hcnlEb21haW47CisgICAgQVNTRVJUKHN0YXRpc3Rpc3RpY3MuaGln
aExldmVsRG9tYWluID09IHByaW1hcnlEb21haW4pOworICAgIHJldHVybiBzdGF0aXN0aXN0aWNz
OworfQorCitib29sIFJlc291cmNlTG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIG1hcEVudHJ5ID0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKKyAgICBpZiAobWFw
RW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2U7CiB9
CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0Zvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gbV9zdG9yZSA/IG1fc3RvcmUtPnN0YXRp
c3RpY3NGb3JPcmlnaW4ob3JpZ2luKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgYXV0byBpdGVyID0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKworICAgIHJldHVybiAiU3RhdGlzdGljcyBmb3IgIiArIG9yaWdpbiArICI6XG4iICsgaXRl
ci0+dmFsdWUudG9TdHJpbmcoKTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+
IFJlc291cmNlTG9hZE9ic2VydmVyOjp0YWtlU3RhdGlzdGljcygpCit7CisgICAgVmVjdG9yPFJl
c291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7CisgICAgc3RhdGlzdGljcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAg
ICAgICAgc3RhdGlzdGljcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKKwor
ICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7CisKKyAgICByZXR1cm4gc3RhdGlz
dGljczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCA5YTA1NDVjOTI2MGM3NTNjYjAxMjg5ZWEw
MGY2YTBkNTY4OTc4NTQ4Li40M2IyYTM3MzgxOTE1YTQ0ZWVkNTRkMWMwYWVjMzkzYzhlOGFkMmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAt
MjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ4LDIzICs0NywyNiBAQCBzdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKIGNsYXNzIFJlc291cmNlTG9hZE9ic2VydmVyIHsKICAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+OwogcHVibGljOgotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkT2JzZXJ2
ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIHNo
YXJlZCgpOwogICAgIAogICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBm
cmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1Jl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZv
aWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICB2b2lkIGxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqLCBjb25zdCBVUkwm
KTsKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24o
Y29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGlj
c1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1F1ZXVlKFJlZjxXVEY6OldvcmtRdWV1ZT4mJik7Ci0K
ICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zvck9yaWdpbihjb25zdCBTdHJp
bmcmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2so
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtlU3RhdGlzdGljcygpOworCiBwcml2YXRlOgogICAgIGJv
b2wgc2hvdWxkTG9nKFBhZ2UqKSBjb25zdDsKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYpOwor
ICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKKyAgICBib29sIGlzUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKIAotICAgIFJl
ZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fc3RvcmU7Ci0gICAgUmVmUHRyPFdU
Rjo6V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKKyAgICBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gbV9ub3RpZmljYXRpb25DYWxsYmFjazsKICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90
PiBtX29yaWdpbnNWaXNpdGVkTWFwOwogfTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggYzBjZTE3MWMx
NDkyZjg5Y2VkYWQ4MTg0YTAzOThmYzM2NWYzYzBlMi4uZGY4ZWIwM2I4NDIzMTMzY2U1Y2VkMjc5
MGRjZTRjYzExMDY1MzMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTcyLDE2ICs3Miw2IEBAIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKLVJlc291cmNlTG9hZFN0YXRpc3RpY3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0
YWtlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pCi17Ci0gICAgQVNTRVJUKG1fc3RhdGlzdGljc0xvY2suaXNMb2NrZWQoKSk7Ci0g
ICAgYXV0byBzdGF0aXN0aXN0aWNzID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudGFrZShwcmlt
YXJ5RG9tYWluKTsKLSAgICBpZiAoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4uaXNOdWxs
KCkpCi0gICAgICAgIHN0YXRpc3Rpc3RpY3MuaGlnaExldmVsRG9tYWluID0gcHJpbWFyeURvbWFp
bjsKLSAgICBBU1NFUlQoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4gPT0gcHJpbWFyeURv
bWFpbik7Ci0gICAgcmV0dXJuIHN0YXRpc3Rpc3RpY3M7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYmIHN0YXRp
c3RpY3MpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CkBAIC0xNzMsMzIgKzE2Myw2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudCgpCiAgICAgICAgIG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxl
cigpOwogfQogCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNz
Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgYXV0byBpdGVyID0gbV9yZXNvdXJjZVN0YXRp
c3RpY3NNYXAuZmluZChvcmlnaW4pOwotICAgIGlmIChpdGVyID09IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBy
ZXR1cm4gIlN0YXRpc3RpY3MgZm9yICIgKyBvcmlnaW4gKyAiOlxuIiArIGl0ZXItPnZhbHVlLnRv
U3RyaW5nKCk7Ci19Ci0KLVZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnRha2VTdGF0aXN0aWNzKCkKLXsKLSAgICBWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsKLSAgICAKLSAgICB7Ci0gICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAg
ICAgICBzdGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotCi0g
ICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHN0YXRpc3RpY3M7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpt
ZXJnZVN0YXRpc3RpY3MoY29uc3QgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0
aXN0aWNzKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IGM1MGMz
YTU4NTYzNTI3NDBmODc5NWJmNjI3ODVmMTIzZGQ4M2Y5MjkuLjA3MWY5MjEyOGU1ZDliNTNmZDc1
NjI1Zjg0OWQxMWVmNDUzMzE1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTUxLDYgKzUxLDcgQEAgc3RydWN0IFBy
ZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKIAogc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M7CiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBXZWJLaXQyL1VJUHJvY2Vz
cy4KIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHsKIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gY3Jl
YXRlKCk7CkBAIC01OCwyMSArNTksMTcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0
ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IGNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVhZERhdGFGcm9tRGVjb2RlcihLZXllZERlY29kZXImKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3JpZ2luKGNvbnN0IFN0
cmluZyYpOwotCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuaXNFbXB0eSgpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsZWFySW5NZW1vcnkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0
cmluZyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgdGFrZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBzZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmJik7CiAKICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtZXJn
ZVN0YXRpc3RpY3MoY29uc3QgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHRha2VTdGF0aXN0
aWNzKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5vdGlmaWNhdGlvbkNhbGxiYWNr
KFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFp
bnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcAppbmRleCBjNzhlM2EwNDEzNDA1NGUzNDk3NDM2YmNhNmZmODM1
Y2M0YzRiNTljLi41Yzg1YjUyZjFiYTYwOWMxZWZmNjJkNzdiMjVhNDNlYTVkNTRiZWE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKQEAgLTE3Niw3ICsx
NzYsNyBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRlcm5hbChS
ZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbgogCiAgICAgaWYgKG5ld1JlcXVlc3QucmVx
dWVzdGVyKCkgIT0gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyOjpNYWluKSB7CiAgICAg
ICAgIFRyYWNlUG9pbnQoU3VicmVzb3VyY2VMb2FkV2lsbFN0YXJ0KTsKLSAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1f
ZnJhbWUuZ2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1fZnJhbWUu
Z2V0KCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIH0KIAogICAgIEFTU0VS
VCghbmV3UmVxdWVzdC5pc051bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
aW5kZXggNGM3MDY0ZDFlOWZlNzYyNTNjNTI3MDI2YjY3NjdjNzUxYmQzZWViMS4uZjRkYzNmMzZh
NDVkZGYxZTljMmFhNTZiOTBjZDhhZjlkOTJhYzk3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcApAQCAtMzg4NCw3ICszODg0LDcgQEAgSlNWYWx1ZSBJbnRlcm5hbHM6OmNsb25l
QXJyYXlCdWZmZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNWYWwK
IAogU3RyaW5nIEludGVybmFsczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkuc3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4pOworICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkuc3RhdGlzdGljc0Zvck9yaWdpbihvcmlnaW4p
OwogfQogCiB2b2lkIEludGVybmFsczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCBlbmFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNzgyNmZi
NDc4ZWUzMDU0OTE4NWU1Nzc0ZWVhNzU2YzJlMTUyMmVjYi4uNzYyYmU5ZmEyNGUxNDU5ZDdmNzgy
ZjAyYjAxMjA2YTczNmNiN2Y4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpA
QCAtMjc0LDcgKzI3NCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdGF0ZU5vdGlmaWVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TbWFydFJlcGxhY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
VGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmg+CkBAIC03NjQsOCArNzYzLDYgQEAgZW51
bSB7IFdlYlZpZXdWZXJzaW9uID0gNCB9OwogI2RlZmluZSB0aW1lZExheW91dFNpemUgNDA5Ngog
CiBzdGF0aWMgTlNNdXRhYmxlU2V0ICpzY2hlbWVzV2l0aFJlcHJlc2VudGF0aW9uc1NldDsKLXN0
YXRpYyBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUqIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTsKLXN0YXRpYyBXVEY6OldvcmtRdWV1ZSogc3RhdGlzdGljc1F1ZXVlOwog
CiAjaWYgIVBMQVRGT1JNKElPUykKIE5TU3RyaW5nICpfV2ViQ2FuR29CYWNrS2V5ID0gICAgICAg
ICAgICBAImNhbkdvQmFjayI7CkBAIC0xMTYzLDIxICsxMTYwLDYgQEAgKyAodm9pZClfcmVwb3J0
RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbiBpbkNvbnRleHQ6KEpTQ29udGV4dFJlZilj
b250ZXh0CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4
Y2VwdGlvbikpOwogfQogCi1zdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25T
dGF0aXN0aWNzU3RvcmFnZVBhdGhJZk5lY2Vzc2FyeSgpCi17Ci0gICAgc3RhdGljIEJPT0wgaW5p
dGlhbGl6ZWQgPSBOTzsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgPSAmV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1N0b3JlKCpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUpOwotICAgIAotICAgIHN0YXRpc3RpY3NRdWV1ZSA9ICZXVEY6Oldv
cmtRdWV1ZTo6Y3JlYXRlKCJXZWJWaWV3IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9j
ZXNzIERhdGEgUXVldWUiKS5sZWFrUmVmKCk7Ci0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1F1ZXVlKCpzdGF0aXN0aWNzUXVldWUpOwotICAg
IAotICAgIGluaXRpYWxpemVkID0gWUVTOwotfQotCiBzdGF0aWMgYm9vbCBzaG91bGRFbmFibGVM
b2FkRGVmZXJyaW5nKCkKIHsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNDI3LDggKzE0MDksNiBA
QCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICop
ZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdAogI2VuZGlmCiAgICAgICAgIFdlYktpdEluaXRpYWxp
emVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKIAotICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGlj
YXRpb25TdGF0aXN0aWNzU3RvcmFnZVBhdGhJZk5lY2Vzc2FyeSgpOwotCiAjaWYgRU5BQkxFKEdB
TUVQQUQpCiAgICAgICAgIFdlYktpdEluaXRpYWxpemVHYW1lcGFkUHJvdmlkZXJJZk5lY2Vzc2Fy
eSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRl
eCA0NTc1MzU0ZTk3ODJjM2EzN2Q3MGY0YzE3MjVkNDMyMjg3MzY3NmNmLi5kNmVkOWFlNTI1ZjQx
NDEzY2NmNDUyZTE1ZTk3OGE0YTc5NzU4ZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVn
aXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CkBAIC0xNzUsOCAr
MTc0LDYgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
ICwgbV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Y3JlYXRlKCkpCi0gICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQogewog
ICAgIC8vIEluaXRpYWxpemUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCiAgICAgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjppbml0aWFsaXplKCk7CkBAIC0yMDIsOSArMTk5LDcgQEAgV2ViUHJvY2Vz
czo6V2ViUHJvY2VzcygpCiAKICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcy5hZGQo
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4o
KSk7CiAKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0
aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKLSAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzUXVl
dWUobV9zdGF0aXN0aWNzUXVldWUuY29weVJlZigpKTsKLSAgICBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKKyAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkuc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsK
ICAgICAgICAgaWYgKG1fc3RhdGlzdGljc0NoYW5nZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuc3RhcnRPbmVT
aG90KDVfcyk7CkBAIC0xNDY0LDEwICsxNDU5LDExIEBAIHZvaWQgV2ViUHJvY2Vzczo6bm9uVmlz
aWJsZVByb2Nlc3NDbGVhbnVwVGltZXJGaXJlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzczo6c3RhdGlz
dGljc0NoYW5nZWRUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUtPmlzRW1wdHkoKSkKKyAgICBhdXRvIHN0YXRpc3RpY3MgPSBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkudGFrZVN0YXRpc3RpY3MoKTsKKyAgICBpZiAoc3RhdGlzdGljcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnRh
a2VTdGF0aXN0aWNzKCkpLCAwKTsKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NVcGRhdGVkKFdURk1vdmUoc3RhdGlzdGljcykpLCAwKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmluZGV4IGM0NjU2ZTFiNTk5ZDBhZGY2
ZTk5ZDczMGM3ODExNmQ0MGM0OTM1YTguLjI2ODcyZjFhYTExZTNhNWIzMWIzNjNhM2ExMjg0ODUz
ZGRhYzE0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC02NCw3
ICs2NCw2IEBAIGNsYXNzIFBhZ2VHcm91cDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNz
IFNlc3Npb25JRDsKIGNsYXNzIFVzZXJHZXN0dXJlVG9rZW47Ci1jbGFzcyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkRhdGE7CiBzdHJ1Y3QgU291cE5ldHdvcmtQcm94eVNldHRpbmdzOwpAQCAtNDE4LDkgKzQxNyw2
IEBAIHByaXZhdGU6CiAgICAgV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyIG1fd2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyOwogI2VuZGlmCiAKLSAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKLSAgICBSZWY8V1RG
OjpXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwotCiAgICAgdW5zaWduZWQgbV9wYWdlc01h
cmtpbmdMYXllcnNBc1ZvbGF0aWxlIHsgMCB9OwogICAgIGJvb2wgbV9zdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlciB7IGZhbHNlIH07CiAjaWYgUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314271</attachid>
            <date>2017-06-30 09:15:08 -0700</date>
            <delta_ts>2017-06-30 11:18:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174013-20170630091506.patch</filename>
            <type>text/plain</type>
            <size>39438</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU5YjhiOGE1YTRlODJj
YThhN2JlOWM2NzczNzEwOTRhODQ1Mzg0NS4uOGQ4YTk2ZDBlZWIwMGVjZDgwNmQ1ZmM4MmQxOTcz
MGMwZWMyMzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE3LTA2LTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIgZG9lcyBub3QgbmVlZCBhIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MDEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIgZG9lcyBub3QgbmVlZCBhIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlIGlzIHRvbyBjb21wbGljYXRlZCBmb3IgaXRzIG5lZWRzLgorICAg
ICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2FuIHRoZW4gYmUgbW92ZWQgdG8gV2Vi
S2l0Mi9VSVByb2Nlc3MgaW4gYSBmb2xsb3ctdXAuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVj
dCk6CisgICAgICAgICogZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJHZXN0dXJlSW5kaWNhdG9yOjpVc2VyR2VzdHVyZUluZGljYXRvcik6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseSk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJT
b2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjp0
YWtlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0Zvck9yaWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3MpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVx
dWVzdEludGVybmFsKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JPcmlnaW4pOgor
CiAyMDE3LTA2LTI5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQVg6IENhbm5vdCBjYWxsIHNldFZhbHVlKCkgb24gY29udGVudGVkaXRhYmxlIG9yIEFS
SUEgdGV4dCBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDMyNjkwMThmNmZkODU4YTQyZTBk
YTEzMjNjYjE5OWU0MGQ0MDY5ZDAuLjE5YWMzNmI4MDNjNTc5YzRjMDYzOGM1ODNiOGQ4YzY2ZWRh
MzY0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNi0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyIGRvZXMgbm90IG5lZWQgYSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDAxMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyIGRvZXMgbm90IG5lZWQgYSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSBpcyB0b28gY29tcGxpY2F0ZWQgZm9yIGl0cyBuZWVkcy4KKyAg
ICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGNhbiB0aGVuIGJlIG1vdmVkIHRvIFdl
YktpdDIvVUlQcm9jZXNzIGluIGEgZm9sbG93LXVwLgorCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFt
ZU5hbWU6Z3JvdXBOYW1lOl0pOgorCiAyMDE3LTA2LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1hcmsgdGhlIEdyYXBoaWNzQ29udGV4dCBhcyBh
Y2NlbGVyYXRlZCB3aGVuIHRoZSBXZWJIVE1MVmlldydzIGxheWVyIGlzIGRyYXdpbmcgYXN5bmNo
cm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkMjhhNzlkZjM5ZTBiN2ViM2Y0YzA5NDczM2NkN2EwYzRl
ODRhNWJlLi4wODI2ZjY3OTE4OWEwMGE0OGZhMzcxMmRmZGM0ZDBjMTM5MjdlOGJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDYtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlciBkb2VzIG5vdCBuZWVkIGEg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlciBkb2VzIG5vdCBuZWVkIGEg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUg
aXMgdG9vIGNvbXBsaWNhdGVkIGZvciBpdHMgbmVlZHMuCisgICAgICAgIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSBjYW4gdGhlbiBiZSBtb3ZlZCB0byBXZWJLaXQyL1VJUHJvY2VzcyBpbiBh
IGZvbGxvdy11cC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Om1fd2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6c3RhdGlzdGljc0NoYW5nZWRUaW1lckZpcmVkKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAxNy0wNi0yOSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBc3NlcnQgdGhhdCBjYWxsYmFjayBJRCBpcyBub3Qg
MCBvciAtMSBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDUyNjQwZDE1ZGI4YTY4ODJl
NjQyZDNlODQ0NjY5YTA3Njg2OTgzOTEuLjYyOWI2OTg1ZjI5OGI4MmM0MGJkZDM5M2UwNjgzYWYy
NWJkODlkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0
Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dXZWJTb2NrZXRMb2Fk
aW5nKGRvY3VtZW50LmZyYW1lKCksIG1fdXJsKTsKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dXZWJTb2NrZXRMb2FkaW5nKGRvY3VtZW50LmZyYW1lKCksIG1f
dXJsKTsKICAgICB9CiAKICAgICBTdHJpbmcgcHJvdG9jb2xTdHJpbmc7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcAppbmRleCA4NGM0MTFkNzZkMzU1NjI0OTBl
YTBmNzlkMGNhZTgzZjk1Y2IyY2I5Li4yMDNjMDYxOTUxMDMxMTlhMTY1MGNkYzc5NGI2NTQ4NGIx
MTZjNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckdlc3R1cmVJbmRpY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyR2VzdHVyZUluZGljYXRvci5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgVXNlckdlc3R1cmVJbmRpY2F0b3I6OlVzZXJHZXN0dXJlSW5kaWNh
dG9yKHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3QKIAogICAgIGlmIChkb2N1
bWVudCAmJiBjdXJyZW50VG9rZW4oKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKICAgICAg
ICAgZG9jdW1lbnQtPnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAoTW9ub3Rv
bmljVGltZTo6bm93KCkpOwotICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2Jz
ZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1
bWVudCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dVc2VySW50
ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCpkb2N1bWVudCk7CiAgICAgICAgIGRv
Y3VtZW50LT50b3BEb2N1bWVudCgpLnNldFVzZXJEaWRJbnRlcmFjdFdpdGhQYWdlKHRydWUpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IGM4
ZmNhNjAyOGFjYWU5YmZkMTc3YTU1OTI2NTdjZGVjMzI2MDM0MWYuLjIwYjVmZDRiZjkyOGIwMjA4
MzhjYzkyYjQ5YmEwYjA3NzdjNzU3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcApAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OndpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlCiAg
ICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIEFTU0VSVCh0b3BGcmFtZS5kb2N1
bWVudCgpKTsKIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxv
Z0ZyYW1lTmF2aWdhdGlvbigqbV9mcmFtZSwgdG9wRnJhbWUsIG5ld1JlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UpOworICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGcmFtZU5h
dmlnYXRpb24oKm1fZnJhbWUsIHRvcEZyYW1lLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICAKICAgICAvLyBVcGRhdGUgY29va2llIHBvbGljeSBiYXNlIFVSTCBhcyBVUkwgY2hh
bmdlcywgZXhjZXB0IGZvciBzdWJmcmFtZXMsIHdoaWNoIHVzZSB0aGUKICAgICAvLyBVUkwgb2Yg
dGhlIG1haW4gZnJhbWUgd2hpY2ggZG9lc24ndCBjaGFuZ2Ugd2hlbiB3ZSByZWRpcmVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDg1NTczOTc2M2VkY2Q2ZmNkNzJh
NzIzYjhhZTA1NzNhYTM2ZmM4ZTkuLmNlMjlmNTNkZTNiNzE1YmVkMzA3NjRiYzY5OTYzNTA4NzQ1
ZDBiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjc4Nyw3ICsy
Nzg3LDcgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXUKICAgICAgICAgICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5l
dHdvcmtpbmdDb250ZXh0KCksIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIHN0b3JlZENyZWRlbnRp
YWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGJ1ZmZlcik7CiAg
ICAgICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsK
ICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkubWF5
YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7Ci0gICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsK
KyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dTdWJyZXNvdXJj
ZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsKICAgICAgICAgfQogICAg
IH0KICAgICBub3RpZmllcigpLnNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1l
bnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlcXVlc3QsIHJlc3BvbnNlLCBkYXRhID8gZGF0
YS0+ZGF0YSgpIDogbnVsbHB0ciwgZGF0YSA/IGRhdGEtPnNpemUoKSA6IDAsIC0xLCBlcnJvcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAppbmRl
eCAzZmM2YWJhYjVlMGM0ZTZlODNhMzkxMWNiN2ZiYjIwNzMxZDZhMzQ1Li4xN2MyZDE2M2E1YmY1
N2FlYjM5NjU0MzJiMWFmMTNiMzM2NjE5MDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00OSwyMyArNDgsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBT
dHJpbmcgcHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKIAogc3RhdGljIFNlY29uZHMgdGlt
ZXN0YW1wUmVzb2x1dGlvbiB7IDFfaCB9OwogCi1SZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkKK1Jlc291cmNlTG9hZE9ic2VydmVyJiBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJlc291cmNlTG9hZE9ic2VydmVyOwogICAgIHJldHVy
biByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2V0U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYgc3Rv
cmUpCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpzZXROb3RpZmljYXRpb25DYWxsYmFjayhX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKIHsKLSAgICBpZiAo
bV9zdG9yZSAmJiBtX3F1ZXVlKQotICAgICAgICBtX3F1ZXVlID0gbnVsbHB0cjsKLSAgICBtX3N0
b3JlID0gV1RGTW92ZShzdG9yZSk7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRTdGF0aXN0aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYmIHF1ZXVlKQotewotICAg
IEFTU0VSVCghbV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZSA9IFdURk1vdmUocXVldWUpOworICAgIEFT
U0VSVCghbV9ub3RpZmljYXRpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25DYWxsYmFj
ayA9IFdURk1vdmUobm90aWZpY2F0aW9uQ2FsbGJhY2spOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTc5
LDcgKzcxLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hvdWxkTG9nKFBhZ2UqIHBh
Z2UpIGNvbnN0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2Ut
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9zdG9yZTsKKyAgICByZXR1cm4gU2V0dGluZ3M6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxT
ZXNzaW9uKCkgJiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAogdm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3Qg
RnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xMTIsNjkgKzEwNCw2MSBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJh
bWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdAogICAgIAogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9t
YWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBz
b3VyY2VQcmltYXJ5RG9tYWluKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKG1f
cXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBpc01haW5GcmFtZSwgaXNSZWRp
cmVjdCwgc291cmNlUHJpbWFyeURvbWFpbiA9IHNvdXJjZVByaW1hcnlEb21haW4uaXNvbGF0ZWRD
b3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9tYWluLmlz
b2xhdGVkQ29weSgpLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlciA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKLSAgICAgICAgICAg
IGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPnRha2VSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwogCi0gICAgICAgICAgICAvLyBB
bHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9y
IHRoaXMgZG9tYWluCi0gICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisgICAgYXV0byB0
YXJnZXRTdGF0aXN0aWNzID0gdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKLSAg
ICAgICAgICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRv
QmVmb3JlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRhcmdl
dFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1ZTsKKyAgICAvLyBB
bHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9y
IHRoaXMgZG9tYWluCisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CiAKLSAgICAgICAgICAgICAg
ICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0
aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pOwotICAgICAgICAgICAgICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlciA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGlzTWFpbkZyYW1l
KQorICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFt
ZUhhc0JlZW5Mb2FkZWRCZWZvcmUgPSB0cnVlOworCisgICAgICAgIGF1dG8gc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIH0KIAotICAgICAg
ICAgICAgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiByZWRpcmVjdGlu
Z09yaWdpblJlc291cmNlU3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURvbWFpbik7CisgICAgaWYgKGlzUmVk
aXJlY3QpIHsKKyAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3Rp
Y3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1h
cnlEb21haW4pOwogCi0gICAgICAgICAgICAgICAgaWYgKG1fc3RvcmUtPmlzUHJldmFsZW50UmVz
b3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikpCi0gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0
aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVz
b3VyY2VPcmlnaW5zLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKGlzUHJl
dmFsZW50UmVzb3VyY2UodGFyZ2V0UHJpbWFyeURvbWFpbikpCisgICAgICAgICAgICByZWRpcmVj
dGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJl
c291cmNlT3JpZ2lucy5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNNYWluRnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0
aWNzLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKLSAgICAgICAgICAgICAgICAgICAgKyty
ZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5SZWRpcmVj
dGVkRnJvbTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAr
K3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOwotICAgICAgICAg
ICAgICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1l
SGFzQmVlblJlZGlyZWN0ZWRGcm9tOwotICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGluZ09y
aWdpblJlc291cmNlU3RhdGlzdGljcy5zdWJmcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJn
ZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAg
ICArK3RhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOworICAgICAg
ICAgICAgKytyZWRpcmVjdGluZ09yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0Jl
ZW5SZWRpcmVjdGVkRnJvbTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICsrdGFyZ2V0
U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG87CisgICAgICAgICAgICArK3Jl
ZGlyZWN0aW5nT3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlblJlZGlyZWN0
ZWRGcm9tOworICAgICAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Mu
c3ViZnJhbWVVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lU3ViUmVzb3VyY2VD
b3VudDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVTdWJSZXNvdXJjZUNvdW50OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxsKCkgfHwgc291cmNlUHJpbWFyeURvbWFp
bi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbiA9PSAibnVsbE9yaWdpbiIpIHsKKyAg
ICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRp
c3RpY3MudG9wRnJhbWVJbml0aWFsTG9hZENvdW50OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVN1YlJlc291cmNlQ291bnQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0
YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJj
ZVByaW1hcnlEb21haW4pOworCisgICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKKyAgICAg
ICAgICAgICAgICArK3NvdXJjZU9yaWdpblJlc291cmNlU3RhdGlzdGljcy50b3BGcmFtZUhhc0Jl
ZW5OYXZpZ2F0ZWRGcm9tOworICAgICAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BG
cmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZVByaW1hcnlEb21haW4uaXNOdWxsKCkgfHwgc291cmNlUHJpbWFyeURv
bWFpbi5pc0VtcHR5KCkgfHwgc291cmNlUHJpbWFyeURvbWFpbiA9PSAibnVsbE9yaWdpbiIpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSW5pdGlhbExvYWRDb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgKyt0YXJnZXRTdGF0
aXN0aWNzLnN1YmZyYW1lU3ViUmVzb3VyY2VDb3VudDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3Rp
Y3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNv
dXJjZVByaW1hcnlEb21haW4pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5GcmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRp
c3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkRnJvbTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICsrdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUbzsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNl
T3JpZ2luUmVzb3VyY2VTdGF0aXN0aWNzLnN1YmZyYW1lSGFzQmVlbk5hdmlnYXRlZEZyb207Ci0g
ICAgICAgICAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVIYXNCZWVu
TmF2aWdhdGVkVG87Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytzb3VyY2VPcmlnaW5SZXNvdXJjZVN0YXRpc3RpY3Muc3ViZnJhbWVI
YXNCZWVuTmF2aWdhdGVkRnJvbTsKKyAgICAgICAgICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVIYXNCZWVuTmF2aWdhdGVkVG87CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgICAgIG1fc3RvcmUtPnNldFJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RGTW92ZSh0YXJnZXRTdGF0aXN0aWNzKSk7
Ci0gICAgICAgIH0gLy8gUmVsZWFzZSBsb2NrCi0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQotICAgICAgICAgICAgbV9zdG9yZS0+ZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuc2V0KHRhcmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykp
OworCisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAgbV9u
b3RpZmljYXRpb25DYWxsYmFjaygpOwogfQogICAgIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQpAQCAtMjAxLDU1ICsxODUsNDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3UKICAg
ICAKICAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWlu
IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURv
bWFpbikpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGlzUmVkaXJlY3QsIHNvdXJjZVByaW1hcnlEb21haW4g
PSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBtYWluRnJhbWVQcmltYXJ5RG9t
YWluID0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgdGFyZ2V0UHJpbWFy
eURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAg
Ym9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0
aXN0aWNzTG9jaygpKTsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUt
PmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURv
bWFpbik7Ci0KLSAgICAgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJl
bW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgotICAgICAgICBzaG91bGRGaXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3Zl
ZCA+IDA7Ci0KLSAgICAgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVz
dWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFk
ZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZEZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGlzUmVkaXJlY3Qp
IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IG1fc3Rv
cmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFy
eURvbWFpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGp1c3QgaW5zZXJ0ZWQg
dG8gdGhlIHN0b3JlLCBzbyB3ZSBuZWVkIHRvIHJlZ2V0ICd0YXJnZXRTdGF0aXN0aWNzJwotICAg
ICAgICAgICAgYXV0byYgdXBkYXRlZFRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwot
Ci0gICAgICAgICAgICBpZiAobV9zdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZSh0YXJnZXRQcmlt
YXJ5RG9tYWluKSkKLSAgICAgICAgICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mu
cmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMuYWRkKHRhcmdldFByaW1h
cnlEb21haW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2lu
U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKLSAgICAgICAgICAg
ICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZFRv
OwotCi0gICAgICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9SZXN1bHQg
PSByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAgICBpZiAoc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIHNob3Vs
ZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7Ci0KLSAgICAgICAgICAgICsrdXBk
YXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsK
LQotICAgICAgICAgICAgYXV0byB0b3RhbFZpc2l0ZWQgPSBzdGQ6Om1heChtX29yaWdpbnNWaXNp
dGVkTWFwLnNpemUoKSwgMVUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1cGRhdGVkVGFy
Z2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5
VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih1cGRhdGVk
VGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRv
dGFsVmlzaXRlZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICsrdGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50OwogCi0gICAgICAgICAgICBh
dXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAx
VSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlz
aXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhh
c0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKLSAgICAgICAgfQotICAgICAg
ICB9IC8vIFJlbGVhc2UgbG9jawotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8gdGFyZ2V0U3RhdGlzdGljcyA9IHRh
a2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4p
OworCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0
YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCisg
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmlt
YXJ5RG9tYWluKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3Vs
dC5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOworCisgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdP
cmlnaW5TdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKworICAgICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJj
ZSh0YXJnZXRQcmltYXJ5RG9tYWluKSkKKyAgICAgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3Rh
dGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucy5hZGQodGFy
Z2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAgICAgKytyZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207CisgICAgICAgICsrdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkVG87CisKKyAgICAgICAgYXV0byBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21h
aW4pOworICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1
ZTsKKworICAgICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVz
b3VyY2VDb3VudDsKKworICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3Jp
Z2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5z
dWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5VG90YWxOdW1iZXJPZk9y
aWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOworICAgIH0gZWxz
ZSB7CisgICAgICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNv
dXJjZUNvdW50OworCisgICAgICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmln
aW5zVmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKworICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3Jp
Z2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVz
b3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisgICAgfQorCisg
ICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHRhcmdldFByaW1hcnlEb21haW4sIFdURk1v
dmUodGFyZ2V0U3RhdGlzdGljcykpOworCisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25D
YWxsYmFjaykKKyAgICAgICAgbV9ub3RpZmljYXRpb25DYWxsYmFjaygpOwogfQogCiB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFt
ZSwgY29uc3QgVVJMJiB0YXJnZXRVUkwpCkBAIC0yNzYsMzEgKzI1MSwyMyBAQCB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwg
Y29uc3QgVVJMJiB0YQogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVBy
aW1hcnlEb21haW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFBy
aW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWlu
RnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICB7
Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2so
KSk7Ci0gICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwotCi0g
ICAgICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEg
cmVjb3JkcyBmb3IgdGhpcyBkb21haW4KLSAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOwotICAg
ICAgICAKLSAgICAgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0
ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZCht
YWluRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CisgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURv
bWFpbik7CiAKLSAgICAgICAgKyt0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1
YnJlc291cmNlQ291bnQ7Ci0gICAgICAgIAotICAgICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0
ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7Ci0gICAgICAgIAotICAgICAg
ICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZp
ZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRh
cmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3Rh
bFZpc2l0ZWQ7Ci0gICAgICAgIH0gLy8gUmVsZWFzZSBsb2NrCi0gICAgICAgIAotICAgICAgICBp
ZiAoc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQotICAgICAgICAgICAgbV9zdG9y
ZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgLy8gQWx3YXlz
IGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlz
IGRvbWFpbgorICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdGFyZ2V0
U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCisgICAgYXV0byBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBp
ZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworCisgICAgKyt0YXJn
ZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQ7CisKKyAgICBh
dXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAx
VSk7CisKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNl
Q291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxk
b3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3Vu
dCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrKQorICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrKCk7CiB9CiAKIHN0YXRpYyBXYWxs
VGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZSB0aW1lKQpAQCAtMzE5LDI2ICsyODYs
NjEgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJl
ZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2MKICAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8
fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9xdWV1ZSk7
Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlEb21haW5TdHJpbmcgPSBwcmlt
YXJ5RG9tYWluKHVybCkuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgewotICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAgICAgICBh
dXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3RyaW5nKTsKLSAgICAgICAgV2FsbFRpbWUgbmV3VGlt
ZSA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0gICAgICAgIGlmIChu
ZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24g
PSB0cnVlOwotICAgICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ID0gbmV3VGltZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9zdG9yZS0+ZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAg
ICBhdXRvIG5ld1RpbWUgPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwor
ICAgIGlmIChuZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0g
bmV3VGltZTsKKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKK30KKworUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHByaW1hcnlE
b21haW4sIFsmcHJpbWFyeURvbWFpbl0geworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhwcmltYXJ5RG9tYWluKTsKICAgICB9KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6dGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIGF1dG8gc3RhdGlzdGlzdGljcyA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnRha2UocHJpbWFyeURvbWFpbik7CisgICAgaWYgKHN0YXRpc3Rpc3Rp
Y3MuaGlnaExldmVsRG9tYWluLmlzTnVsbCgpKQorICAgICAgICBzdGF0aXN0aXN0aWNzLmhpZ2hM
ZXZlbERvbWFpbiA9IHByaW1hcnlEb21haW47CisgICAgQVNTRVJUKHN0YXRpc3Rpc3RpY3MuaGln
aExldmVsRG9tYWluID09IHByaW1hcnlEb21haW4pOworICAgIHJldHVybiBzdGF0aXN0aXN0aWNz
OworfQorCitib29sIFJlc291cmNlTG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIG1hcEVudHJ5ID0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKKyAgICBpZiAobWFw
RW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2U7CiB9
CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0Zvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gbV9zdG9yZSA/IG1fc3RvcmUtPnN0YXRp
c3RpY3NGb3JPcmlnaW4ob3JpZ2luKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgYXV0byBpdGVyID0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKworICAgIHJldHVybiAiU3RhdGlzdGljcyBmb3IgIiArIG9yaWdpbiArICI6XG4iICsgaXRl
ci0+dmFsdWUudG9TdHJpbmcoKTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+
IFJlc291cmNlTG9hZE9ic2VydmVyOjp0YWtlU3RhdGlzdGljcygpCit7CisgICAgVmVjdG9yPFJl
c291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7CisgICAgc3RhdGlzdGljcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAg
ICAgICAgc3RhdGlzdGljcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKKwor
ICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7CisKKyAgICByZXR1cm4gc3RhdGlz
dGljczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCA5YTA1NDVjOTI2MGM3NTNjYjAxMjg5ZWEw
MGY2YTBkNTY4OTc4NTQ4Li40M2IyYTM3MzgxOTE1YTQ0ZWVkNTRkMWMwYWVjMzkzYzhlOGFkMmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAt
MjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ4LDIzICs0NywyNiBAQCBzdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKIGNsYXNzIFJlc291cmNlTG9hZE9ic2VydmVyIHsKICAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+OwogcHVibGljOgotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkT2JzZXJ2
ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIHNo
YXJlZCgpOwogICAgIAogICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBm
cmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1Jl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZv
aWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICB2b2lkIGxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqLCBjb25zdCBVUkwm
KTsKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24o
Y29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGlj
c1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1F1ZXVlKFJlZjxXVEY6OldvcmtRdWV1ZT4mJik7Ci0K
ICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zvck9yaWdpbihjb25zdCBTdHJp
bmcmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2so
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtlU3RhdGlzdGljcygpOworCiBwcml2YXRlOgogICAgIGJv
b2wgc2hvdWxkTG9nKFBhZ2UqKSBjb25zdDsKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYpOwor
ICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgdGFrZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKKyAgICBib29sIGlzUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKIAotICAgIFJl
ZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fc3RvcmU7Ci0gICAgUmVmUHRyPFdU
Rjo6V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKKyAgICBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gbV9ub3RpZmljYXRpb25DYWxsYmFjazsKICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90
PiBtX29yaWdpbnNWaXNpdGVkTWFwOwogfTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggYzBjZTE3MWMx
NDkyZjg5Y2VkYWQ4MTg0YTAzOThmYzM2NWYzYzBlMi4uMjc1ZTQxMzI1OTcwOTM2NWEyNjM1OTNi
ZTIyN2RhOWZjYTY2ODJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTcyLDIzICs3Miw2IEBAIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKLVJlc291cmNlTG9hZFN0YXRpc3RpY3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0
YWtlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pCi17Ci0gICAgQVNTRVJUKG1fc3RhdGlzdGljc0xvY2suaXNMb2NrZWQoKSk7Ci0g
ICAgYXV0byBzdGF0aXN0aXN0aWNzID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudGFrZShwcmlt
YXJ5RG9tYWluKTsKLSAgICBpZiAoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4uaXNOdWxs
KCkpCi0gICAgICAgIHN0YXRpc3Rpc3RpY3MuaGlnaExldmVsRG9tYWluID0gcHJpbWFyeURvbWFp
bjsKLSAgICBBU1NFUlQoc3RhdGlzdGlzdGljcy5oaWdoTGV2ZWxEb21haW4gPT0gcHJpbWFyeURv
bWFpbik7Ci0gICAgcmV0dXJuIHN0YXRpc3Rpc3RpY3M7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYmIHN0YXRp
c3RpY3MpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKLSAgICBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5zZXQocHJpbWFyeURvbWFpbiwgV1RGTW92ZShzdGF0aXN0aWNzKSk7Ci19Ci0KIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpLZXlWYWx1ZVBhaXJUeXBl
IFN0YXRpc3RpY3NWYWx1ZTsKIAogc3RkOjp1bmlxdWVfcHRyPEtleWVkRW5jb2Rlcj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVFbmNvZGVyRnJvbURhdGEoKQpAQCAtMTczLDMy
ICsxNTYsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnQoKQogICAgICAgICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0
YUhhbmRsZXIoKTsKIH0KIAotU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3Rh
dGlzdGljc0Zvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKLXsKLSAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOwotICAgIGF1dG8gaXRlciA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmZpbmQob3JpZ2luKTsKLSAgICBpZiAoaXRlciA9PSBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
Ci0gICAgcmV0dXJuICJTdGF0aXN0aWNzIGZvciAiICsgb3JpZ2luICsgIjpcbiIgKyBpdGVyLT52
YWx1ZS50b1N0cmluZygpOwotfQotCi1WZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0YWtlU3RhdGlzdGljcygpCi17Ci0gICAgVmVjdG9y
PFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0gICAgCi0gICAgewotICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgc3RhdGlzdGljcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSk7Ci0g
ICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMo
KSkKLSAgICAgICAgc3RhdGlzdGljcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMp
KTsKLQotICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzdGF0aXN0aWNzOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
PiYgc3RhdGlzdGljcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRl
eCBjNTBjM2E1ODU2MzUyNzQwZjg3OTViZjYyNzg1ZjEyM2RkODNmOTI5Li4wNzFmOTIxMjhlNWQ5
YjUzZmQ3NTYyNWY4NDlkMTFlZjQ1MzMxNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC01MSw2ICs1MSw3IEBAIHN0
cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSB7CiAKIHN0cnVjdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOwogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gV2ViS2l0Mi9V
SVByb2Nlc3MuCiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7CiBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IGNyZWF0ZSgpOwpAQCAtNTgsMjEgKzU5LDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBjcmVhdGVFbmNvZGVyRnJvbURhdGEo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlYWREYXRhRnJvbURlY29kZXIoS2V5ZWREZWNv
ZGVyJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RhdGlzdGljc0Zvck9yaWdpbihj
b25zdCBTdHJpbmcmKTsKLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpOyB9CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhckluTWVtb3J5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihj
b25zdCBTdHJpbmcmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
IHRha2VSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgc2V0UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJp
bmcmLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiYpOwogCiAgICAgYm9vbCBpc1ByZXZhbGVudFJl
c291cmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtl
U3RhdGlzdGljcygpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25D
YWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJGaXJzdCk+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggYzc4ZTNhMDQxMzQwNTRlMzQ5NzQzNmJj
YTZmZjgzNWNjNGM0YjU5Yy4uNWM4NWI1MmYxYmE2MDljMWVmZjYyZDc3YjI1YTQzZWE1ZDU0YmVh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0x
NzYsNyArMTc2LDcgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SW50
ZXJuYWwoUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb24KIAogICAgIGlmIChuZXdSZXF1
ZXN0LnJlcXVlc3RlcigpICE9IFJlc291cmNlUmVxdWVzdEJhc2U6OlJlcXVlc3Rlcjo6TWFpbikg
ewogICAgICAgICBUcmFjZVBvaW50KFN1YnJlc291cmNlTG9hZFdpbGxTdGFydCk7Ci0gICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1N1YnJlc291cmNlTG9h
ZGluZyhtX2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ1N1YnJlc291cmNlTG9hZGluZyht
X2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB9CiAKICAg
ICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IDRjNzA2NGQxZTlmZTc2MjUzYzUyNzAyNmI2NzY3Yzc1MWJkM2VlYjEuLmY0
ZGMzZjM2YTQ1ZGRmMWU5YzJhYTU2YjkwY2Q4YWY5ZDkyYWM5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKQEAgLTM4ODQsNyArMzg4NCw3IEBAIEpTVmFsdWUgSW50ZXJuYWxz
OjpjbG9uZUFycmF5QnVmZmVyKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBidWZmZXIs
IEpTVmFsCiAKIFN0cmluZyBJbnRlcm5hbHM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWRPYnNlcnZlcigpLnN0YXRpc3RpY3NGb3JPcmlnaW4ob3JpZ2luKTsKKyAgICBy
ZXR1cm4gUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnN0YXRpc3RpY3NGb3JPcmlnaW4o
b3JpZ2luKTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGJvb2wgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4
IDc4MjZmYjQ3OGVlMzA1NDkxODVlNTc3NGVlYTc1NmMyZTE1MjJlY2IuLjc2MmJlOWZhMjRlMTQ1
OWQ3Zjc4MmYwMmIwMTIwNmE3MzZjYjdmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KQEAgLTI3NCw3ICsyNzQsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RhdGVO
b3RpZmllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZVRyYWNrZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU21hcnRSZXBsYWNlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1RpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oPgpAQCAtNzY0LDggKzc2Myw2
IEBAIGVudW0geyBXZWJWaWV3VmVyc2lvbiA9IDQgfTsKICNkZWZpbmUgdGltZWRMYXlvdXRTaXpl
IDQwOTYKIAogc3RhdGljIE5TTXV0YWJsZVNldCAqc2NoZW1lc1dpdGhSZXByZXNlbnRhdGlvbnNT
ZXQ7Ci1zdGF0aWMgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKiByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU7Ci1zdGF0aWMgV1RGOjpXb3JrUXVldWUqIHN0YXRpc3RpY3NR
dWV1ZTsKIAogI2lmICFQTEFURk9STShJT1MpCiBOU1N0cmluZyAqX1dlYkNhbkdvQmFja0tleSA9
ICAgICAgICAgICAgQCJjYW5Hb0JhY2siOwpAQCAtMTE2MywyMSArMTE2MCw2IEBAICsgKHZvaWQp
X3JlcG9ydEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGNlcHRpb24gaW5Db250ZXh0OihKU0NvbnRl
eHRSZWYpY29udGV4dAogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0
YXRlLCBleGNlcHRpb24pKTsKIH0KIAotc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxp
Y2F0aW9uU3RhdGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKQotewotICAgIHN0YXRpYyBC
T09MIGluaXRpYWxpemVkID0gTk87Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlID0gJldlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZSgqcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKTsKLSAgICAKLSAgICBzdGF0aXN0aWNzUXVldWUgPSAm
V1RGOjpXb3JrUXVldWU6OmNyZWF0ZSgiV2ViVmlldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikubGVha1JlZigpOwotICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NRdWV1ZSgqc3RhdGlzdGljc1F1ZXVl
KTsKLSAgICAKLSAgICBpbml0aWFsaXplZCA9IFlFUzsKLX0KLQogc3RhdGljIGJvb2wgc2hvdWxk
RW5hYmxlTG9hZERlZmVycmluZygpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTQyNyw4ICsx
NDA5LDYgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOihOU1N0
cmluZyAqKWZyYW1lTmFtZSBncm91cE5hbWU6KE5TU3QKICNlbmRpZgogICAgICAgICBXZWJLaXRJ
bml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAgV2ViS2l0SW5pdGlhbGl6
ZUFwcGxpY2F0aW9uU3RhdGlzdGljc1N0b3JhZ2VQYXRoSWZOZWNlc3NhcnkoKTsKLQogI2lmIEVO
QUJMRShHQU1FUEFEKQogICAgICAgICBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3ZpZGVySWZO
ZWNlc3NhcnkoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKaW5kZXggNDU3NTM1NGU5NzgyYzNhMzdkNzBmNGMxNzI1ZDQzMjI4NzM2NzZjZi4uZDZlZDlh
ZTUyNWY0MTQxM2NjZjQ1MmUxNWU5NzhhNGE3OTc1OGYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNl
cnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nj
aGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgpAQCAt
MTc1LDggKzE3NCw2IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nlc3MoKQogI2lmIFBMQVRGT1JNKElP
UykKICAgICAsIG1fd2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKCp0aGlzKQogI2VuZGlmCi0gICAg
LCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQotICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUi
KSkKIHsKICAgICAvLyBJbml0aWFsaXplIG91ciBwbGF0Zm9ybSBzdHJhdGVnaWVzLgogICAgIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6aW5pdGlhbGl6ZSgpOwpAQCAtMjAyLDkgKzE5OSw3IEBAIFdl
YlByb2Nlc3M6OldlYlByb2Nlc3MoKQogCiAgICAgbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNo
ZXMuYWRkKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBIYXNoTWFwPHVuc2lnbmVkLCBk
b3VibGU+KCkpOwogCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCku
c2V0U3RhdGlzdGljc1N0b3JlKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNvcHlSZWYo
KSk7Ci0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlz
dGljc1F1ZXVlKG1fc3RhdGlzdGljc1F1ZXVlLmNvcHlSZWYoKSk7Ci0gICAgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0aGlzXSB7CisgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0
aGlzXSB7CiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuaXNBY3RpdmUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9zdGF0aXN0aWNzQ2hhbmdlZFRpbWVyLnN0
YXJ0T25lU2hvdCg1X3MpOwpAQCAtMTQ2NCwxMCArMTQ1OSwxMSBAQCB2b2lkIFdlYlByb2Nlc3M6
Om5vblZpc2libGVQcm9jZXNzQ2xlYW51cFRpbWVyRmlyZWQoKQogCiB2b2lkIFdlYlByb2Nlc3M6
OnN0YXRpc3RpY3NDaGFuZ2VkVGltZXJGaXJlZCgpCiB7Ci0gICAgaWYgKG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLT5pc0VtcHR5KCkpCisgICAgYXV0byBzdGF0aXN0aWNzID0gUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnRha2VTdGF0aXN0aWNzKCk7CisgICAgaWYgKHN0YXRp
c3RpY3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLT50YWtlU3RhdGlzdGljcygpKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXVEZNb3ZlKHN0YXRpc3RpY3MpKSwgMCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCBjNDY1NmUxYjU5
OWQwYWRmNmU5OWQ3MzBjNzgxMTZkNDBjNDkzNWE4Li4yNjg3MmYxYWExMWUzYTViMzFiMzYzYTNh
MTI4NDg1M2RkYWMxNDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApA
QCAtNjQsNyArNjQsNiBAQCBjbGFzcyBQYWdlR3JvdXA7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7
CiBjbGFzcyBTZXNzaW9uSUQ7CiBjbGFzcyBVc2VyR2VzdHVyZVRva2VuOwotY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOwogc3RydWN0IFBsdWdpbkluZm87CiBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5EYXRhOwogc3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKQEAgLTQxOCw5
ICs0MTcsNiBAQCBwcml2YXRlOgogICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlciBtX3dlYlNR
TGl0ZURhdGFiYXNlVHJhY2tlcjsKICNlbmRpZgogCi0gICAgUmVmPFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7Ci0gICAg
UmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKLQogICAgIHVuc2lnbmVkIG1f
cGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAgICBib29sIG1fc3VwcHJlc3NN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwogI2lmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
      

    </bug>

</bugzilla>