<?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>174008</bug_id>
          
          <creation_ts>2017-06-29 20:02:55 -0700</creation_ts>
          <short_desc>Merge WebResourceLoadStatisticsManager and WebResourceLoadObserver</short_desc>
          <delta_ts>2017-06-30 09:22:47 -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>WebKit2</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>ggaren</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324253</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 20:02:55 -0700</bug_when>
    <thetext>WebResourceLoadStatisticsManager is currently only a proxy to WebResourceLoadObserver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324258</commentid>
    <comment_count>1</comment_count>
      <attachid>314217</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-29 20:23:10 -0700</bug_when>
    <thetext>Created attachment 314217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324319</commentid>
    <comment_count>2</comment_count>
      <attachid>314217</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-29 23:35:26 -0700</bug_when>
    <thetext>Comment on attachment 314217
Patch

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

I think this change looked correct. Another nice simplification.

&gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:58
&gt; +// FIXME: This API name is wrong.

We can change that, it’s only used in testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324430</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:06:00 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #2)
&gt; Comment on attachment 314217 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314217&amp;action=review
&gt; 
&gt; I think this change looked correct. Another nice simplification.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.cpp:58
&gt; &gt; +// FIXME: This API name is wrong.
&gt; 
&gt; We can change that, it’s only used in testing.

Sure, can I change it in a follow up. I suspect we may want to make some of this API asynchronous too to avoid locks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324440</commentid>
    <comment_count>4</comment_count>
      <attachid>314217</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 09:19:09 -0700</bug_when>
    <thetext>Comment on attachment 314217
Patch

Wonderful! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324441</commentid>
    <comment_count>5</comment_count>
      <attachid>314217</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:22:46 -0700</bug_when>
    <thetext>Comment on attachment 314217
Patch

Clearing flags on attachment: 314217

Committed r219000: &lt;http://trac.webkit.org/changeset/219000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324443</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 09:22:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314217</attachid>
            <date>2017-06-29 20:23:10 -0700</date>
            <delta_ts>2017-06-30 09:22:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174008-20170629202309.patch</filename>
            <type>text/plain</type>
            <size>60310</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4OTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWU3ZWJhMGM5MjZiNzRj
OGM5NzFhOTliNGI2NjY3ZGJlYzNhNTU5NS4uNTA0MWQ1ZGY0ZGU0YzNkOGI2ZTZlZGQ0Zjg2NGMy
MDNmZjZkMzQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc3IEBACiAyMDE3LTA2LTI5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTWVyZ2UgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIgYW5kIFdlYlJlc291cmNlTG9hZE9ic2VydmVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwMDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZXJnZSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlciBhbmQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuIE9uZSB3
YXMgYmFzaWNhbGx5CisgICAgICAgIGEgcHJveHkgdG8gdGhlIG90aGVyLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOgorICAg
ICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFByZXZhbGVudFJlc291cmNl
KToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJc1ByZXZhbGVudFJl
c291cmNlKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRIYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcklzSGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJJc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAg
ICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJT
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRp
b25GcmVlKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRNaW5p
bXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJTZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAoV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcik6
CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4pOgorICAg
ICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVUZWxlbWV0cnlIYW5kbGVy
KToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpOgorICAgICAgICAoV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6CisgICAgICAgIChXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6cHJpbWFyeURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6c2V0U3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFN0YXRpc3RpY3NRdWV1ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVhcklu
TWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpsb2dVc2VySW50ZXJhY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmlzUHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmlzR3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6
OnNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVRlbGVtZXRyeUhhbmRsZXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hh
cmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCisyMDE3LTA2LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAg
ICAgICAgU3BsaXQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgaW50byAyIGNsYXNzZXM6IG9uZSBmb3Ig
V2ViQ29yZSBhbmQgb25lIGZvciB0aGUgVUlQcm9jZXNzCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5OTAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRl
eCA2N2Q0NDc3NmIwNWQwYWVlZWM0ZTgyMWFmY2JmOTUwMTJiMmMxMTNiLi5lZjZiMDBiMjUzZTM1
MzhjYjNhMDNkM2UwMTJmMjFiYTE1NzVkN2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMzI4
LDcgKzMyOCw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvV2ViUHJvY2Vz
c0xpZmV0aW1lVHJhY2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCiAg
ICAgVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVIYW5kbGVyLmNwcAogICAg
IFVJUHJvY2Vzcy9XZWJVUkxTY2hlbWVUYXNrLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJWaWV3cG9y
dEF0dHJpYnV0ZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKaW5kZXgg
MThhODgyN2MwNDk2MjE2MGYwYzMwM2I5Mzc4OTFiMzg5MTgzMmNlYS4uOWVlMDhkYWI5M2JmYWRh
M2ViNjU5MDMxOWUyZjM4OTZhYzNiNjQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcApAQCAtMjgsMTMxICsyOCwxNDUgQEAKIAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgog
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL1NlY29uZHMu
aD4KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
Ci1XS1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyR2V0VHlwZUlEKCkKLXsK
LSAgICByZXR1cm4gdG9BUEkoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OkFQSVR5
cGUpOwotfQotCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQcmV2YWxl
bnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKLSAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0UHJldmFsZW50UmVzb3VyY2UodG9XVEZT
dHJpbmcoaG9zdE5hbWUpLCB2YWx1ZSk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuc2V0UHJldmFsZW50UmVzb3VyY2Uo
VVJMKFVSTCgpLCB0b1dURlN0cmluZyhob3N0TmFtZSkpKTsKKyAgICBlbHNlCisgICAgICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5jbGVhclByZXZhbGVudFJl
c291cmNlKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoaG9zdE5hbWUpKSk7CiB9CiAKIGJvb2wgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdS
ZWYgaG9zdE5hbWUpCiB7Ci0gICAgcmV0dXJuIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyOjppc1ByZXZhbGVudFJlc291cmNlKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSk7CisgICAgcmV0
dXJuIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5pc1ByZXZhbGVu
dFJlc291cmNlKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoaG9zdE5hbWUpKSk7CiB9CiAKIHZvaWQg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbihX
S1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6c2V0SGFzSGFkVXNlckludGVyYWN0aW9uKHRvV1RGU3RyaW5nKGhv
c3ROYW1lKSwgdmFsdWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnNoYXJlZCgpLmxvZ1VzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCks
IHRvV1RGU3RyaW5nKGhvc3ROYW1lKSkpOworICAgIGVsc2UKKyAgICAgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OnNoYXJlZCgpLmNsZWFyVXNlckludGVyYWN0aW9uKFVSTChV
UkwoKSwgdG9XVEZTdHJpbmcoaG9zdE5hbWUpKSk7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIEFQSSBu
YW1lIGlzIHdyb25nLgogYm9vbCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNI
YWRVc2VySW50ZXJhY3Rpb24oV0tTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgcmV0dXJuIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24odG9X
VEZTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6OnNoYXJlZCgpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIHRvV1RG
U3RyaW5nKGhvc3ROYW1lKSkpOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJTZXRHcmFuZGZhdGhlcmVkKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQog
ewotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRHcmFuZGZhdGhlcmVk
KHRvV1RGU3RyaW5nKGhvc3ROYW1lKSwgdmFsdWUpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5zZXRHcmFuZGZhdGhlcmVkKFVSTChVUkwoKSwgdG9XVEZT
dHJpbmcoaG9zdE5hbWUpKSwgdmFsdWUpOwogfQogCiBib29sIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJJc0dyYW5kZmF0aGVyZWQoV0tTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAg
cmV0dXJuIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjppc0dyYW5kZmF0aGVyZWQo
dG9XVEZTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OnNoYXJlZCgpLmlzR3JhbmRmYXRoZXJlZChVUkwoVVJMKCksIHRvV1RGU3Ry
aW5nKGhvc3ROYW1lKSkpOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIFdL
U3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbih0b1dURlN0cmluZyho
b3N0TmFtZSksIHRvV1RGU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKTsKKyAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoaG9zdE5hbWUpKSwgVVJMKFVSTCgpLCB0b1dU
RlN0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oV0tTdHJpbmdS
ZWYgaG9zdE5hbWUsIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbih0b1dURlN0cmluZyhob3N0TmFtZSksIHRvV1RGU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUp
KTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuc2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoaG9zdE5h
bWUpKSwgVVJMKFVSTCgpLCB0b1dURlN0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwogfQogCiB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKQogewotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8odG9XVEZTdHJpbmcoaG9zdE5hbWUpLCB0b1dURlN0cmlu
Zyhob3N0TmFtZVJlZGlyZWN0ZWRUbykpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpzaGFyZWQoKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oVVJMKFVSTCgp
LCB0b1dURlN0cmluZyhob3N0TmFtZSkpLCBVUkwoVVJMKCksIHRvV1RGU3RyaW5nKGhvc3ROYW1l
UmVkaXJlY3RlZFRvKSkpOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKFNlY29uZHMgeyBzZWNvbmRzIH0pOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpzaGFyZWQoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgeyBz
ZWNvbmRzIH0pOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRU
aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlv
bkZyZWUoU2Vjb25kcyB7IHNlY29uZHMgfSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6OnNoYXJlZCgpLnNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKFNlY29u
ZHMgeyBzZWNvbmRzIH0pOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRz
KQogewotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGlt
ZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgeyBzZWNvbmRzIH0pOworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5zZXRNaW5pbXVtVGltZUJl
dHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgeyBzZWNvbmRzIH0pOwogfQogCiB2b2lk
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRHcmFuZGZhdGhlcmluZ1RpbWUoZG91
YmxlIHNlY29uZHMpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNl
dEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHsgc2Vjb25kcyB9KTsKKyAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgeyBzZWNvbmRzIH0pOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKQogewotICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuZmlyZURhdGFNb2RpZmlj
YXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpCiB7Ci0gICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigp
OworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5maXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKIH0KIAogdm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9t
YWluKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewotICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJG
b3JPbmVEb21haW4odG9XVEZTdHJpbmcoaG9zdE5hbWUpLCB2YWx1ZSk7CisgICAgaWYgKHZhbHVl
KQorICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuZmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHsgfSwgeyB0b1dURlN0cmluZyhob3N0TmFt
ZSkgfSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6OnNoYXJlZCgpLmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih7IHRv
V1RGU3RyaW5nKGhvc3ROYW1lKSB9LCB7IH0sIGZhbHNlKTsKIH0KIAogdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVRlbGVtZXRyeUhhbmRsZXIoKQogewotICAgIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworICAg
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5maXJlVGVsZW1ldHJ5
SGFuZGxlcigpOwogfQogCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7Ci0gICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CiB9
CiAKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7Ci0gICAgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKHZhbHVlKTsKIH0KIAogdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
U2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSkKIHsKLSAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVs
ZW1ldHJ5V2FzQ2FwdHVyZWQodmFsdWUpOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKHZhbHVlKTsK
IH0KIAogdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkU3VibWl0
VGVsZW1ldHJ5KGJvb2wgdmFsdWUpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7CisgICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogfQog
CiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudFN0b3JlKCkKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOworICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5jbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
KCk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMpCiB7
Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMoaG91cnMpOworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5jbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RkOjpjaHJvbm86Omhv
dXJzKGhvdXJzKSk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJl
c2V0VG9Db25zaXN0ZW50U3RhdGUoKQogewotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OnNoYXJlZCgpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oMjRf
aCAqIDMwLik7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNoYXJlZCgp
LnNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKDI0X2gpOworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQoKS5zZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0
YVJlY29yZHNSZW1vdmFsKDFfaCk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNoYXJlZCgpLnNldEdyYW5kZmF0aGVyaW5nVGltZSgxX2gpOworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChmYWxzZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6c2V0
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoZmFsc2UpOworICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwodHJ1ZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNoYXJlZCgpLmNsZWFySW5NZW1vcnlTdG9yZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmgKaW5kZXggZDgzM2I0M2ZmOGJhMmNiMDQzMTg2NGRlZDFlNGEwZGViNzQy
YjFjMy4uYzBmYTEzZWViYTNhY2ZlMWJhOGZkZDA2Yzc5OThmM2NiOWY5MDk5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCkBAIC0zMSw4ICszMSw2IEBACiBleHRlcm4gIkMiIHsK
ICNlbmRpZgogICAgIAotICAgIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyR2V0VHlwZUlEKCk7Ci0gICAgCiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgYm9vbCBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VySXNQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFt
ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dEhhc0hhZFVzZXJJbnRlcmFjdGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b2NvYS9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tCmluZGV4IDM1MWU3
YjFmZTcyYWE0YjE4MWM4YTU2M2YyNDUyZGFiNzBkNTIzYzEuLjNlMDA5ZGY4M2Y2ODcyNWJmMzc2
ZWRjMmRjYzRjOTljMjQzM2I0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlckNvY29hLm1tCkBAIC0yNyw3ICsyNyw2IEBACiAjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5oIgogCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKLSNp
bXBvcnQgIldlYlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC00MywxNiArNDIsMTYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAgICAgICAgIAogICAgICAg
ICBkb3VibGUgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTogV2ViUHJlZmVyZW5jZXNLZXk6OnJlc291
cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uS2V5KCldOwogICAgICAg
ICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+IDAgJiYgdGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiA8PSAzMCAqIGRheUluU2Vjb25kcykKLSAgICAgICAgICAgIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
U2Vjb25kcyB7IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gfSk7CisgICAgICAgICAgICBzZXRU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgeyB0aW1lVG9MaXZlVXNlckludGVyYWN0
aW9uIH0pOwogICAgICAgICAKICAgICAgICAgZG91YmxlIHRpbWVUb0xpdmVDb29raWVQYXJ0aXRp
b25GcmVlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9y
S2V5OiBXZWJQcmVmZXJlbmNlc0tleTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVD
b29raWVQYXJ0aXRpb25GcmVlS2V5KCldOwogICAgICAgICBpZiAodGltZVRvTGl2ZUNvb2tpZVBh
cnRpdGlvbkZyZWUgPiAwICYmIHRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlIDw9IGRheUlu
U2Vjb25kcykKLSAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLnNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKFNlY29uZHMgeyB0aW1lVG9M
aXZlQ29va2llUGFydGl0aW9uRnJlZSB9KTsKKyAgICAgICAgICAgIHNldFRpbWVUb0xpdmVDb29r
aWVQYXJ0aXRpb25GcmVlKFNlY29uZHMgeyB0aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB9
KTsKIAogICAgICAgICBkb3VibGUgZ3JhbmRmYXRoZXJpbmdUaW1lID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OiBXZWJQcmVmZXJlbmNlc0tleTo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZUtleSgpXTsKICAgICAgICAg
aWYgKGdyYW5kZmF0aGVyaW5nVGltZSA+IDAgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDcgKiBk
YXlJblNlY29uZHMpCi0gICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyB7IGdyYW5kZmF0aGVyaW5n
VGltZSB9KTsKKyAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHsgZ3Jh
bmRmYXRoZXJpbmdUaW1lIH0pOwogICAgIH0pOwogfQogCi19OworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNmYwMWMxYjk1YTI2OTQzZjJiMmQ5MzllY2Q5MDlhYWMw
YmVjMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZE9ic2VydmVyLmgiCi0KLSNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVVJM
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBTdHJpbmcgcHJpbWFy
eURvbWFpbihjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpwcmltYXJ5RG9tYWluKHZhbHVlKTsKLX0KLQotV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXImIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYlJlc291cmNlTG9hZE9ic2VydmVyPiBXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjsKLSAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI7Ci19Ci0K
LXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmIHN0b3JlKQotewotICAgIGlmIChtX3N0b3JlICYm
IG1fcXVldWUpCi0gICAgICAgIG1fcXVldWUgPSBudWxscHRyOwotICAgIG1fc3RvcmUgPSBXVEZN
b3ZlKHN0b3JlKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3RhdGlz
dGljc1F1ZXVlKFJlZjxXVEY6OldvcmtRdWV1ZT4mJiBxdWV1ZSkKLXsKLSAgICBBU1NFUlQoIW1f
cXVldWUpOwotICAgIG1fcXVldWUgPSBXVEZNb3ZlKHF1ZXVlKTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6Y2xlYXJJbk1lbW9yeVN0b3JlKCkKLXsKLSAgICBpZiAoIW1fc3Rv
cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBtX3N0b3JlLT5jbGVhckluTWVtb3J5KCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUoKQotewotICAgIGlmICghbV9zdG9yZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzXSB7
Ci0gICAgICAgIG1fc3RvcmUtPmNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KCk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmUoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmll
ZFNpbmNlKQotewotICAgIC8vIEZvciBub3csIGJlIGNvbnNlcnZhdGl2ZSBhbmQgY2xlYXIgZXZl
cnl0aGluZyByZWdhcmRsZXNzIG9mIG1vZGlmaWVkU2luY2UKLSAgICBVTlVTRURfUEFSQU0obW9k
aWZpZWRTaW5jZSk7Ci0gICAgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwotfQot
Ci12b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBwcmltYXJ5RG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbih1cmwpLmlz
b2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Ci0gICAgICAgICAgICBhdXRvJiBzdGF0
aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihwcmltYXJ5RG9tYWluU3RyaW5nKTsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3N0b3JlLT5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoeyBwcmltYXJ5RG9tYWlu
U3RyaW5nIH0sIHsgfSwgZmFsc2UpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkKLXsKLSAgICBp
ZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwot
ICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0KLSAgICBzdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgPSB7IH07Ci19Ci0KLWJvb2wgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAodXJsLmlz
QmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAg
IGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0KLSAgICByZXR1cm4gbV9zdG9yZS0+
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3MpOwotfQotCi12b2lkIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCkK
LXsKLSAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NM
b2NrKCkpOwotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0KLSAgICBzdGF0
aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOwotfQotCi1ib29sIFdlYlJlc291cmNl
TG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsKQotewotICAg
IGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xv
Y2soKSk7Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKLQotICAgIHJldHVy
biBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2U7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCi17Ci0g
ICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygp
KTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOwotCi0gICAgc3RhdGlzdGlj
cy5pc1ByZXZhbGVudFJlc291cmNlID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgdmFsdWUpCi17
Ci0gICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9j
aygpKTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOwotCi0gICAgc3RhdGlz
dGljcy5ncmFuZGZhdGhlcmVkID0gdmFsdWU7Ci19Ci0KLWJvb2wgV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAodXJsLmlz
QmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAg
IGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0KLSAgICByZXR1cm4gc3RhdGlzdGlj
cy5ncmFuZGZhdGhlcmVkOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJM
JiB0b3BGcmFtZSkKLXsKLSAgICBpZiAoc3ViZnJhbWUuaXNCbGFua1VSTCgpIHx8IHN1YmZyYW1l
LmlzRW1wdHkoKSB8fCB0b3BGcmFtZS5pc0JsYW5rVVJMKCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9xdWV1ZSk7Ci0gICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlUb3BGcmFtZURvbWFpblN0cmluZyA9IHByaW1hcnlEb21h
aW4odG9wRnJhbWUpLmlzb2xhdGVkQ29weSgpLCBwcmltYXJ5U3ViRnJhbWVEb21haW5TdHJpbmcg
PSBwcmltYXJ5RG9tYWluKHN1YmZyYW1lKS5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOwotICAgICAgICBh
dXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5U3ViRnJhbWVEb21haW5TdHJpbmcpOwotICAgICAgICBzdGF0aXN0
aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKHByaW1hcnlUb3BGcmFtZURvbWFp
blN0cmluZyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNl
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBVUkwmIHN1YnJlc291cmNlLCBj
b25zdCBVUkwmIHRvcEZyYW1lKQotewotICAgIGlmIChzdWJyZXNvdXJjZS5pc0JsYW5rVVJMKCkg
fHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IHRvcEZyYW1lLmlzQmxhbmtVUkwoKSB8fCB0b3BG
cmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3F1ZXVlKTsK
LSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5n
ID0gcHJpbWFyeURvbWFpbih0b3BGcmFtZSkuaXNvbGF0ZWRDb3B5KCksIHByaW1hcnlTdWJyZXNv
dXJjZURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpLmlzb2xhdGVkQ29w
eSgpXSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGlj
c0xvY2soKSk7Ci0gICAgICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpblN0
cmluZyk7Ci0gICAgICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
cy5hZGQocHJpbWFyeVRvcEZyYW1lRG9tYWluU3RyaW5nKTsKLSAgICB9KTsKLX0KLQotdm9pZCBX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCi17
Ci0gICAgaWYgKHN1YnJlc291cmNlLmlzQmxhbmtVUkwoKSB8fCBzdWJyZXNvdXJjZS5pc0VtcHR5
KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8uaXNCbGFua1VSTCgpIHx8IGhvc3ROYW1lUmVkaXJl
Y3RlZFRvLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcXVldWUp
OwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21haW5TdHJp
bmcgPSBwcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJlY3RlZFRvKS5pc29sYXRlZENvcHkoKSwg
cHJpbWFyeVN1YnJlc291cmNlRG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbihzdWJyZXNvdXJj
ZSkuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0
b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKLSAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3Rv
cmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJl
c291cmNlRG9tYWluU3RyaW5nKTsKLSAgICAgICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvLmFkZChwcmltYXJ5UmVkaXJlY3REb21haW5TdHJpbmcpOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKHNlY29uZHMpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShTZWNvbmRzIHNlY29uZHMpCi17Ci0g
ICAgbV9zdG9yZS0+c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoc2Vjb25kcyk7Ci19
Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIG1fc3RvcmUtPnNldE1p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7Ci19Ci0KLXZvaWQg
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNl
Y29uZHMpCi17Ci0gICAgbV9zdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChzZWNvbmRzKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Zmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKLXsKLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNl
ZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4g
dGhyZWFkLgotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXNdIHsKLSAgICAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpCi17Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZC4KLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzXSB7Ci0gICAgICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwg
Ym9vbCBjbGVhckZpcnN0KQotewotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rp
bmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgZG9tYWluc1RvUmVtb3ZlID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpj
b3B5KGRvbWFpbnNUb1JlbW92ZSksIGRvbWFpbnNUb0FkZCA9IENyb3NzVGhyZWFkQ29waWVyPFZl
Y3RvcjxTdHJpbmc+Pjo6Y29weShkb21haW5zVG9BZGQpLCBjbGVhckZpcnN0XSB7Ci0gICAgICAg
IG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihkb21haW5zVG9SZW1v
dmUsIGRvbWFpbnNUb0FkZCwgY2xlYXJGaXJzdCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKLXsKLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgbV9zdG9yZS0+ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzEwN2IyYjdiNGZiZDZi
ZjUyNDhhNDg0ZWY0NmFjNjI0OWI0OTZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBXb3JrUXVldWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFVSTDsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlJlc291cmNlTG9hZE9ic2VydmVy
IHsKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8V2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI+OwotcHVibGljOgotICAgIHN0YXRpYyBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVk
T2JzZXJ2ZXIoKTsKLQotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6
OlVSTCYpOwotICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVS
TCYpOwotICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6VVJMJik7
Ci0KLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwot
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwmKTsKLSAgICB2
b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJik7Ci0gICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGJvb2wgdmFsdWUpOwotICAg
IGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwotCi0gICAgdm9pZCBz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgV2ViQ29yZTo6VVJMJiBzdWJmcmFt
ZSwgY29uc3QgV2ViQ29yZTo6VVJMJiB0b3BGcmFtZSk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgV2ViQ29yZTo6VVJMJiBzdWJyZXNvdXJjZSwgY29u
c3QgV2ViQ29yZTo6VVJMJiB0b3BGcmFtZSk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgV2ViQ29yZTo6VVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7Ci0KLSAgICB2b2lkIHNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFy
dGl0aW9uRnJlZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUo
U2Vjb25kcyk7Ci0KLSAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwotICAg
IHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7Ci0gICAgdm9pZCBmaXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFp
bnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgYm9vbCBjbGVh
ckZpcnN0KTsKLSAgICB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7Ci0KLSAgICB2b2lkIHNl
dFN0YXRpc3RpY3NTdG9yZShSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PiYmKTsKLSAgICB2b2lkIHNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3JrUXVldWU+JiYp
OwotICAgIHZvaWQgY2xlYXJJbk1lbW9yeVN0b3JlKCk7Ci0gICAgdm9pZCBjbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlKCk7Ci0gICAgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5j
ZSk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gbV9zdG9yZTsKLSAgICBSZWZQdHI8V1RGOjpXb3JrUXVldWU+IG1fcXVldWU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCmluZGV4
IDg3MTczOGY1MTI0YzkyN2YzZjQ1NDIxN2EyNTMyNWRhMGE3ZGJlZjkuLmMxZjQzMzE0NmI2M2Nl
YzM0YmNhNWIzMTk3YmFmNWQ2MTgwMjZjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcApA
QCAtMjYsMTQ5ICsyNiwyNTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZE9ic2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2luY2x1ZGUgPHd0
Zi9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLW5hbWVzcGFj
ZSBXZWJLaXQgewordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBTdHJpbmcgcHJp
bWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcmltYXJ5RG9tYWluKHZhbHVlKTsKK30KIAotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
JiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkKIHsKLSAgICBpZiAo
dmFsdWUpCi0gICAgICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigp
LnNldFByZXZhbGVudFJlc291cmNlKFVSTChVUkwoKSwgaG9zdE5hbWUpKTsKLSAgICBlbHNlCi0g
ICAgICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoVVJMKFVSTCgpLCBob3N0TmFtZSkpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcj4gd2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI7CisgICAgcmV0dXJuIHdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOwogfQogCi1ib29sIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTdGF0aXN0aWNzU3RvcmUoUmVmPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4mJiBzdG9yZSkKIHsKLSAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShVUkwoVVJMKCks
IGhvc3ROYW1lKSk7CisgICAgaWYgKG1fc3RvcmUgJiYgbV9xdWV1ZSkKKyAgICAgICAgbV9xdWV1
ZSA9IG51bGxwdHI7CisgICAgbV9zdG9yZSA9IFdURk1vdmUoc3RvcmUpOwogfQotICAgIAotdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0SGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFN0YXRpc3RpY3NRdWV1ZShSZWY8V1RGOjpXb3Jr
UXVldWU+JiYgcXVldWUpCiB7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb24oVVJMKFVSTCgp
LCBob3N0TmFtZSkpOwotICAgIGVsc2UKLSAgICAgICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkuY2xlYXJVc2VySW50ZXJhY3Rpb24oVVJMKFVSTCgpLCBob3N0TmFt
ZSkpOworICAgIEFTU0VSVCghbV9xdWV1ZSk7CisgICAgbV9xdWV1ZSA9IFdURk1vdmUocXVldWUp
OwogfQogCi1ib29sIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpoYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBob3N0TmFtZSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OmNsZWFySW5NZW1vcnlTdG9yZSgpCiB7Ci0gICAgcmV0dXJuIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmhhc0hhZFVzZXJJbnRlcmFj
dGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgaWYgKCFtX3N0b3JlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQobV9xdWV1ZSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3Ro
aXNdIHsKKyAgICAgICAgbV9zdG9yZS0+Y2xlYXJJbk1lbW9yeSgpOworICAgIH0pOwogfQogCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRHcmFuZGZhdGhlcmVkKGNv
bnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKLSAg
ICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRHcmFuZGZhdGhl
cmVkKFVSTChVUkwoKSwgaG9zdE5hbWUpLCB2YWx1ZSk7CisgICAgaWYgKCFtX3N0b3JlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9xdWV1ZSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3RoaXNdIHsKKyAgICAgICAgbV9zdG9yZS0+Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
KTsKKyAgICB9KTsKIH0KIAotYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSkKIHsKLSAg
ICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuaXNHcmFu
ZGZhdGhlcmVkKFVSTChVUkwoKSwgaG9zdE5hbWUpKTsKKyAgICAvLyBGb3Igbm93LCBiZSBjb25z
ZXJ2YXRpdmUgYW5kIGNsZWFyIGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiBtb2RpZmllZFNpbmNl
CisgICAgVU5VU0VEX1BBUkFNKG1vZGlmaWVkU2luY2UpOworICAgIGNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgaG9zdE5h
bWUsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVIb3N0TmFtZSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkKIHsK
LSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oVVJMKFVSTCgpLCBob3N0TmFtZSksIFVSTChVUkwoKSwgdG9w
RnJhbWVIb3N0TmFtZSkpOworICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3F1ZXVlKTsKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJpbWFyeURvbWFpblN0cmluZyA9IHByaW1hcnlEb21haW4odXJs
KS5pc29sYXRlZENvcHkoKV0geworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOworICAgICAgICAgICAgYXV0byYg
c3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpblN0cmluZyk7CisgICAgICAgICAgICBzdGF0aXN0aWNzLmhhZFVz
ZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgICAgICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHsgcHJpbWFyeURv
bWFpblN0cmluZyB9LCB7IH0sIGZhbHNlKTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
KGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVIb3N0TmFtZSkK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihVUkwoVVJMKCks
IGhvc3ROYW1lKSwgVVJMKFVSTCgpLCB0b3BGcmFtZUhvc3ROYW1lKSk7CisgICAgaWYgKHVybC5p
c0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsKKyAgICBhdXRv
JiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworCisgICAgc3RhdGlzdGljcy5oYWRVc2VySW50
ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lID0geyB9OwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwg
Y29uc3QgU3RyaW5nJiBob3N0TmFtZVJlZGlyZWN0ZWRUbykKK2Jvb2wgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkK
IHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oVVJMKFVSTCgpLCBob3N0TmFtZSksIFVSTChVUkwoKSwg
aG9zdE5hbWVSZWRpcmVjdGVkVG8pKTsKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOworICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlEb21haW4odXJsKSk7CisKKyAgICByZXR1cm4gbV9zdG9yZS0+aGFzSGFkUmVjZW50VXNlcklu
dGVyYWN0aW9uKHN0YXRpc3RpY3MpOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7CisgICAg
aWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0aWNzTG9jaygpKTsK
KyAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworCisgICAgc3RhdGlzdGljcy5p
c1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyBz
ZWNvbmRzKQorYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aXNQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCkKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShzZWNv
bmRzKTsKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0
YXRpc3RpY3NMb2NrKCkpOworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisK
KyAgICByZXR1cm4gc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlOwogfQogCi12b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCiB7
Ci0gICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0TWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKKyAgICBpZiAodXJsLmlz
QmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRpc3RpY3NMb2NrKCkpOworICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50
UmVzb3VyY2UgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcykKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1
cmwsIGJvb2wgdmFsdWUpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKHNlY29uZHMpOworICAgIGlmICh1cmwuaXNC
bGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7CisgICAgYXV0byYg
c3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKworICAgIHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJl
ZCA9IHZhbHVlOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpm
aXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKQorYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9y
ZS0+c3RhdGlzdGljc0xvY2soKSk7CisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwp
KTsKKworICAgIHJldHVybiBzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQ7CiB9CiAKLXZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcigpCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJMJiB0
b3BGcmFtZSkKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKKyAgICBpZiAoc3ViZnJhbWUu
aXNCbGFua1VSTCgpIHx8IHN1YmZyYW1lLmlzRW1wdHkoKSB8fCB0b3BGcmFtZS5pc0JsYW5rVVJM
KCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bV9xdWV1ZSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByaW1hcnlUb3BGcmFtZURv
bWFpblN0cmluZyA9IHByaW1hcnlEb21haW4odG9wRnJhbWUpLmlzb2xhdGVkQ29weSgpLCBwcmlt
YXJ5U3ViRnJhbWVEb21haW5TdHJpbmcgPSBwcmltYXJ5RG9tYWluKHN1YmZyYW1lKS5pc29sYXRl
ZENvcHkoKV0geworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RvcmUtPnN0YXRp
c3RpY3NMb2NrKCkpOworICAgICAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3ViRnJhbWVEb21haW5T
dHJpbmcpOworICAgICAgICBzdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMu
YWRkKHByaW1hcnlUb3BGcmFtZURvbWFpblN0cmluZyk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlckZvck9uZURvbWFpbihjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBib29sIHZhbHVlKQor
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJh
bWUpCiB7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoeyB9LCB7
aG9zdE5hbWV9LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
e2hvc3ROYW1lfSwgeyB9LCBmYWxzZSk7CisgICAgaWYgKHN1YnJlc291cmNlLmlzQmxhbmtVUkwo
KSB8fCBzdWJyZXNvdXJjZS5pc0VtcHR5KCkgfHwgdG9wRnJhbWUuaXNCbGFua1VSTCgpIHx8IHRv
cEZyYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcXVldWUp
OworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcmltYXJ5VG9wRnJhbWVEb21haW5TdHJp
bmcgPSBwcmltYXJ5RG9tYWluKHRvcEZyYW1lKS5pc29sYXRlZENvcHkoKSwgcHJpbWFyeVN1YnJl
c291cmNlRG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSkuaXNvbGF0ZWRD
b3B5KCldIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0b3JlLT5zdGF0aXN0
aWNzTG9jaygpKTsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNlRG9tYWlu
U3RyaW5nKTsKKyAgICAgICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zLmFkZChwcmltYXJ5VG9wRnJhbWVEb21haW5TdHJpbmcpOworICAgIH0pOwogfQogCi12b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigp
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFt
ZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2Jz
ZXJ2ZXIoKS5maXJlVGVsZW1ldHJ5SGFuZGxlcigpOworICAgIGlmIChzdWJyZXNvdXJjZS5pc0Js
YW5rVVJMKCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRv
LmlzQmxhbmtVUkwoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRUby5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChtX3F1ZXVlKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgcHJpbWFyeVJlZGlyZWN0RG9tYWluU3RyaW5nID0gcHJpbWFyeURvbWFpbihob3N0TmFt
ZVJlZGlyZWN0ZWRUbykuaXNvbGF0ZWRDb3B5KCksIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpblN0
cmluZyA9IHByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpLmlzb2xhdGVkQ29weSgpXSB7CisgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdG9yZS0+c3RhdGlzdGljc0xvY2soKSk7Cisg
ICAgICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpblN0cmluZyk7CisgICAg
ICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQocHJpbWFyeVJl
ZGlyZWN0RG9tYWluU3RyaW5nKTsKKyAgICB9KTsKIH0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCB2YWx1ZSkKKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKKyAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKHNlY29uZHMpOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVl
KQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZUNv
b2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyBzZWNvbmRzKQogewotICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkKHZhbHVlKTsKKyAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJl
ZShzZWNvbmRzKTsKIH0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQorCit2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7CisgICAgbV9zdG9yZS0+
c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKIH0KLSAg
ICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCisKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldEdyYW5kZmF0aGVyaW5nVGltZShT
ZWNvbmRzIHNlY29uZHMpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7
CisgICAgbV9zdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChz
ZWNvbmRzKTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpc10geworICAgICAgICBtX3N0b3JlLT5maXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkK
IHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQg
YnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRo
cmVhZC4KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcXVldWUtPmRpc3Bh
dGNoKFt0aGlzXSB7CisgICAgICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcigpOworICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJz
KHVuc2lnbmVkIGhvdXJzKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBk
b21haW5zVG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wg
Y2xlYXJGaXJzdCkKIHsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5jbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1f
Y2xvY2s6Om5vdygpIC0gc3RkOjpjaHJvbm86OmhvdXJzKGhvdXJzKSk7CisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBm
cm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBkb21haW5zVG9SZW1vdmUgPSBDcm9zc1RocmVhZENv
cGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1RvUmVtb3ZlKSwgZG9tYWluc1RvQWRk
ID0gQ3Jvc3NUaHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNUb0FkZCks
IGNsZWFyRmlyc3RdIHsKKyAgICAgICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKGRvbWFpbnNUb1JlbW92ZSwgZG9tYWluc1RvQWRkLCBjbGVhckZpcnN0KTsKKyAg
ICB9KTsKIH0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJl
c2V0VG9Db25zaXN0ZW50U3RhdGUoKQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpmaXJlVGVsZW1ldHJ5SGFuZGxlcigpCiB7Ci0gICAgV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbigyNF9o
ICogMzAuKTsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5z
ZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSgyNF9oKTsKLSAgICBXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKDFfaCk7Ci0gICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKDFfaCk7Ci0gICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGZhbHNlKTsKLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpzZXROb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChmYWxzZSk7Ci0gICAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCh0cnVlKTsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5jbGVhckluTWVtb3J5U3RvcmUoKTsKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgorICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9zdG9yZS0+
ZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKIH0KLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oCmluZGV4IDM5OTEwZmM3NDI3ODkwZTA3NjIzMzJhOTMyZDAz
MzExYTY3YzY0NWUuLmViMjI4NzBmMDJjOGI2NTU3M2VkYjljZTdiNDkwY2MzOThkYmVhMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oCkBAIC0yNSw1MCArMjUsNjEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVz
cGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBVUkw7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6
OlR5cGU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyPiB7CitjbGFzcyBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciB7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyPiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIoKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNv
bnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwotICAgIHN0YXRpYyBib29sIGlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBob3N0TmFtZSk7Ci0gICAgc3RhdGljIHZvaWQg
c2V0SGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFs
dWUpOwotICAgIHN0YXRpYyBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcm
IGhvc3ROYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmlu
ZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwotICAgIHN0YXRpYyBib29sIGlzR3JhbmRmYXRoZXJl
ZChjb25zdCBTdHJpbmcmIGhvc3ROYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgY29uc3QgU3RyaW5nJiB0
b3BGcmFtZUhvc3ROYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZUhvc3ROYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNv
bmRzKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShT
ZWNvbmRzKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMpOwotICAgIHN0YXRpYyB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGlt
ZShTZWNvbmRzKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlv
bihTZWNvbmRzKTsKLSAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKLSAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsK
LSAgICBzdGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXJGb3JPbmVE
b21haW4oY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7Ci0gICAgc3RhdGljIHZv
aWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwotICAgIHN0YXRpYyB2b2lkIHNldE5v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwotICAgIHN0YXRp
YyB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKTsKLSAgICBzdGF0aWMg
dm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChi
b29sIHZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlKCk7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1v
ZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZSgpOworICAgIHN0YXRpYyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ciYgc2hhcmVkKCk7CisKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3Jl
OjpVUkwmKTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpV
UkwmKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYp
OworCisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwmKTsK
KyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAg
dm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIHZv
aWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBXZWJDb3JlOjpVUkwmLCBib29sIHZhbHVlKTsKKyAg
ICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBXZWJDb3JlOjpVUkwmKTsKKworICAgIHZvaWQg
c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlVSTCYgc3ViZnJh
bWUsIGNvbnN0IFdlYkNvcmU6OlVSTCYgdG9wRnJhbWUpOworICAgIHZvaWQgc2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlVSTCYgc3VicmVzb3VyY2UsIGNv
bnN0IFdlYkNvcmU6OlVSTCYgdG9wRnJhbWUpOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFdlYkNvcmU6OlVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFdlYkNv
cmU6OlVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOworCisgICAgdm9pZCBzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBh
cnRpdGlvbkZyZWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMpOworCisgICAgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAg
ICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOworICAgIHZvaWQgZmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21h
aW5zVG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xl
YXJGaXJzdCk7CisgICAgdm9pZCBmaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworCisgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzU3RvcmUoUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4mJik7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUXVldWUoUmVmPFdURjo6V29ya1F1ZXVlPiYm
KTsKKyAgICB2b2lkIGNsZWFySW5NZW1vcnlTdG9yZSgpOworICAgIHZvaWQgY2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnRTdG9yZSgpOworICAgIHZvaWQgY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnRTdG9yZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2lu
Y2UpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2Vy
RGVmYXVsdHNJZk5lZWRlZCgpOworICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRl
ZCgpOwogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4gbV9zdG9yZTsKKyAgICBSZWZQdHI8V1RGOjpXb3JrUXVldWU+IG1f
cXVldWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
aW5kZXggOTFlNmQwNDJiMWY2M2Y2NDc4YTFjZmRhNmNiY2Y0YTU4YzhjODcxZS4uMzllYTQyZDYx
OGVlYjBiODA5NWRmMTkxOTgyYTQ5OTFmMDdhMGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2lu
Y2x1ZGUgIldlYlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmVNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIK
QEAgLTIxMCw4ICsyMDksOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcigpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY29weVJlZigpKTsKLSAgICBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5zZXRTdGF0aXN0aWNzUXVldWUobV9zdGF0aXN0aWNzUXVldWUuY29weVJlZigpKTsKKyAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuc2V0U3RhdGlzdGlj
c1N0b3JlKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNvcHlSZWYoKSk7CisgICAgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNoYXJlZCgpLnNldFN0YXRpc3RpY3NRdWV1
ZShtX3N0YXRpc3RpY3NRdWV1ZS5jb3B5UmVmKCkpOwogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLT5zZXROb3RpZmljYXRpb25DYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSB7CiAgICAgICAgIGlmIChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM0LDcgKzIzMyw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291
cmNlTG9hZE9ic2VydmVyKCkKICAgICAgICAgc3VibWl0VGVsZW1ldHJ5KCk7CiAgICAgfSk7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6
OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkucmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOwog
I2VuZGlmCiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggMDgzYzc0ZjgxNzYwNmU4ZTIx
ODZlOTMwN2UwMWViMDU1YmY2MWUxZS4uMmZiOWNjNTk2MTU0MTE2NDdmZTljYWQxNmExNWFlYTkz
Mjg1M2Q0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5o
IgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
c2l0ZURhdGEuaCIKQEAgLTgxNiw3ICs4MTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBzdGQ6OmNocgog
I2VuZGlmCiAKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcykpCi0gICAgICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUobW9kaWZpZWRT
aW5jZSk7CisgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzaGFyZWQo
KS5jbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKG1vZGlmaWVkU2luY2UpOwogCiAgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHdlIGRvbid0IGhhdmUgYW55IHBlbmRpbmcgY2FsbGJh
Y2tzLiBJZiBzbywgd2Ugd2FudCB0byBkaXNwYXRjaCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHJp
Z2h0IGF3YXkuCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKQEAgLTEw
ODUsNyArMTA4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAjZW5kaWYKIAogICAgIGlm
IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSkKLSAgICAgICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCku
Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOworICAgICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6c2hhcmVkKCkuY2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSgpOwogCiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHdlIGRvbid0IGhhdmUgYW55
IHBlbmRpbmcgY2FsbGJhY2tzLiBJZiBzbywgd2Ugd2FudCB0byBkaXNwYXRjaCB0aGUgY29tcGxl
dGlvbiBoYW5kbGVyIHJpZ2h0IGF3YXkuCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZO
ZWVkZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBjYmYyZTI4ZDI1NDBiZmYwNTNhNDk3NTIwZGQyYTEzZTljN2M0YzY0Li5j
NzVkYzc4YjBiMGM2MWY5YTJiOGQ5NDgzOGUwM2QxZjllYWVhOGY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MDIsOCArOTAy
LDYgQEAKIAkJNDFGQUY1RjgxRTNDMTAyMTAwMUFFNjc4IC8qIExpYldlYlJUQ1Jlc29sdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBRjVGNjFF
M0MwQjQ3MDAxQUU2NzggLyogTGliV2ViUlRDUmVzb2x2ZXIuaCAqLzsgfTsKIAkJNDFGQUY1Rjkx
RTNDMTAyNTAwMUFFNjc4IC8qIExpYldlYlJUQ1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRkFGNUY3MUUzQzBCNDcwMDFBRTY3OCAv
KiBMaWJXZWJSVENSZXNvbHZlci5jcHAgKi87IH07CiAJCTQ0NTBBRUMwMURDM0ZBRTUwMDk5NDNG
MiAvKiBTaGFyZWRNZW1vcnlDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDUwQUVCRjFEQzNGQUU1MDA5OTQzRjIgLyogU2hhcmVkTWVtb3J5
Q29jb2EuY3BwICovOyB9OwotCQk0NjM0M0IzQTFGMDU5OTIzMDAwM0YzMDkgLyogV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDY0NkFCMzIxRjA1OThENDAwOUQwN0ZDIC8qIFdlYlJlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcCAqLzsgfTsKLQkJNDYzNDNCM0IxRjA1OTkyNjAwMDNGMzA5IC8qIFdlYlJlc291cmNl
TG9hZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NjQ2QUIzMzFGMDU5OEQ0MDA5RDA3RkMgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCAqLzsgfTsKIAkJNDYzRkQ0ODAxRUI5NDU5NjAwQTI5ODJDIC8qIFdLUHJvY2Vzc1Rlcm1pbmF0
aW9uUmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjNGRDQ3RjFFQjk0NTg0MDBBMjk4MkMgLyogV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NjNG
RDQ4MjFFQjk0RUMwMDBBMjk4MkMgLyogUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjNGRDQ4MTFFQjk0RUFE
MDBBMjk4MkMgLyogUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmggKi87IH07CiAJCTQ2NTI1MEU2
MUVDRjUyREMwMDIwMjVDQiAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY1MjUwRTUxRUNGNTJDRDAwMjAy
NUNCIC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi87IH07CkBAIC0zMTQ1LDggKzMxNDMs
NiBAQAogCQk0NDUwQUVCRjFEQzNGQUU1MDA5OTQzRjIgLyogU2hhcmVkTWVtb3J5Q29jb2EuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2hhcmVkTWVtb3J5Q29jb2Eu
Y3BwOyBwYXRoID0gY29jb2EvU2hhcmVkTWVtb3J5Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NjNGRDQ3RjFFQjk0NTg0MDBBMjk4MkMgLyogV0tQcm9jZXNzVGVybWlu
YXRpb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm9jZXNz
VGVybWluYXRpb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDYzRkQ0
ODExRUI5NEVBRDAwQTI5ODJDIC8qIFByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDY0NkFCMzIxRjA1OThENDAwOUQwN0ZDIC8qIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDY0NkFCMzMxRjA1OThENDAwOUQwN0ZDIC8qIFdlYlJlc291cmNlTG9hZE9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZE9i
c2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2NTI1MEU1MUVDRjUyQ0Qw
MDIwMjVDQiAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZBMkI2MDYxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91
bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyog
QmFja2dyb3VuZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg2Myw4ICs2ODU5LDYgQEAKIAkJCQlCQzEx
MUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlCQzAz
MkRDRjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJvY2Vzc1Byb3h5LmggKi8sCiAJCQkJQkNFRTdB
QjMxMjgxNzA5NTAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJ
CQk0NjQ2QUIzMjFGMDU5OEQ0MDA5RDA3RkMgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
ICovLAotCQkJCTQ2NDZBQjMzMUYwNTk4RDQwMDlEMDdGQyAvKiBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oICovLAogCQkJCTZCRTk2OUExMUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8sCiAJCQkJNkJFOTY5OUYxRTQzQjg2RTAwOEI3NDgz
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi8sCiAJCQkJN0E5Q0Q4QzAx
Qzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8s
CkBAIC04NTc0LDcgKzg1NjgsNiBAQAogCQkJCTBGNTk0N0E4MTg3QjUxNzYwMDQzNzg1NyAvKiBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3QTQxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ2
MzQzQjNCMUYwNTk5MjYwMDAzRjMwOSAvKiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUQxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGlu
Z1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1QkE4MjUxQkEy
NUNGQjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTAyOTEsNyArMTAyODQsNiBAQAogCQkJCUMwMzM3REFFMTI3QTI0RkUwMDhG
RjRGNCAvKiBXZWJFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRCQTEwRjQzODBG
MDA1OEMxNUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MTExQjVFMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAq
LywKLQkJCQk0NjM0M0IzQTFGMDU5OTIzMDAwM0YzMDkgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDY5NTMxMjE0RTZDQjAwMEI5OEVCIC8qIFdl
YkZvcm1DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDY5NTUxMjE0RTZDQjAwMEI5
OEVCIC8qIFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzExMUFERDExMkY1QjkzMDAzMzdCQUIgLyogV2ViRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>